Author: stefanct
Date: Sat Jan 24 16:06:27 2015
New Revision: 1870
URL: http://flashrom.org/trac/flashrom/changeset/1870

Log:
Add support for Eon EN25P Series.

These are very similar to Eon's EN25B series but unlike those the
EN25P has uniform sectors (of 32 and 64 kB). They can not be
distinguished by RDID alone but the RES and REMS IDs are different
and hence could be detected eventually in the future. This patch
also refines tiny bits of the EN25B series.

The series includes:
 - EN25P05
 - EN25P10
 - EN25P20
 - EN25P40
 - EN25P80
 - EN25P16
 - EN25P32
 - EN25P64

Signed-off-by: Stefan Tauner <[email protected]>
Acked-by: Stefan Tauner <[email protected]>

Modified:
   trunk/flashchips.c
   trunk/flashchips.h

Modified: trunk/flashchips.c
==============================================================================
--- trunk/flashchips.c  Mon Jan 19 20:52:34 2015        (r1869)
+++ trunk/flashchips.c  Sat Jan 24 16:06:27 2015        (r1870)
@@ -3332,7 +3332,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3366,7 +3366,37 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P05",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B05,
+               .total_size     = 64,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = {
+                                       {32 * 1024, 2} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3400,7 +3430,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3434,7 +3464,36 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P10",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B10,
+               .total_size     = 128,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {32 * 1024, 4} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {128 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3469,7 +3528,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3504,7 +3563,36 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P20",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B20,
+               .total_size     = 256,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 4} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3539,7 +3627,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3574,7 +3662,36 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P40",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B40,
+               .total_size     = 512,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3609,7 +3726,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3644,7 +3761,36 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P80",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B80,
+               .total_size     = 1024,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 16} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3679,7 +3825,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3714,7 +3860,36 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P16",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B16,
+               .total_size     = 2048,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_WRSR_WREN,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 32} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3726,7 +3901,8 @@
                .model_id       = EON_EN25B32,
                .total_size     = 4096,
                .page_size      = 256,
-               .feature_bits   = FEATURE_WRSR_WREN,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
@@ -3749,7 +3925,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3761,7 +3937,8 @@
                .model_id       = EON_EN25B32,
                .total_size     = 4096,
                .page_size      = 256,
-               .feature_bits   = FEATURE_WRSR_WREN,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
@@ -3784,7 +3961,37 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P32", /* Uniform version of EN25B32 */
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B32,
+               .total_size     = 4096,
+               .page_size      = 256,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 64} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3796,7 +4003,8 @@
                .model_id       = EON_EN25B64,
                .total_size     = 8192,
                .page_size      = 256,
-               .feature_bits   = FEATURE_WRSR_WREN,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
@@ -3819,7 +4027,7 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 
@@ -3831,7 +4039,8 @@
                .model_id       = EON_EN25B64,
                .total_size     = 8192,
                .page_size      = 256,
-               .feature_bits   = FEATURE_WRSR_WREN,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
@@ -3854,7 +4063,37 @@
                .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
+               .voltage        = {2700, 3600},
+       },
+
+       {
+               .vendor         = "Eon",
+               .name           = "EN25P64",
+               .bustype        = BUS_SPI,
+               .manufacture_id = EON_ID_NOPREFIX,
+               .model_id       = EON_EN25B64,
+               .total_size     = 8192,
+               .page_size      = 256,
+               /* OTP: 512B total; enter 0x3A */
+               .feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {64 * 1024, 128} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {8 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .printlock      = spi_prettyprint_status_register_plain, /* 
TODO: improve */
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read, /* Fast read (0x0B) supported 
*/
                .voltage        = {2700, 3600},
        },
 

Modified: trunk/flashchips.h
==============================================================================
--- trunk/flashchips.h  Mon Jan 19 20:52:34 2015        (r1869)
+++ trunk/flashchips.h  Sat Jan 24 16:06:27 2015        (r1870)
@@ -237,28 +237,36 @@
  */
 #define EON_ID                 0x7F1C  /* EON Silicon Devices */
 #define EON_ID_NOPREFIX                0x1C    /* EON, missing 0x7F prefix */
-#define EON_EN25B05            0x2010  /* Same as P05, 2^19 kbit or 2^16 kByte 
*/
+#define EON_EN25B05            0x2010  /* Same as EN25P05, can be 
distinguished by RES/REMS: */
+#define EON_EN25P05            0x05
 #define EON_EN25B05T           0x25
 #define EON_EN25B05B           0x95
-#define EON_EN25B10            0x2011  /* Same as P10 */
+#define EON_EN25B10            0x2011  /* Same as EN25P10, can be 
distinguished by RES/REMS: */
+#define EON_EN25P10            0x10
 #define EON_EN25B10T           0x40
 #define EON_EN25B10B           0x30
-#define EON_EN25B20            0x2012  /* Same as P20 */
+#define EON_EN25B20            0x2012  /* Same as EN25P20, can be 
distinguished by RES/REMS: */
+#define EON_EN25P20            0x11
 #define EON_EN25B20T           0x41
 #define EON_EN25B20B           0x31
-#define EON_EN25B40            0x2013  /* Same as P40 */
+#define EON_EN25B40            0x2013  /* Same as EN25P40, can be 
distinguished by RES/REMS: */
+#define EON_EN25P40            0x12
 #define EON_EN25B40T           0x42
 #define EON_EN25B40B           0x32
-#define EON_EN25B80            0x2014  /* Same as P80 */
+#define EON_EN25B80            0x2014  /* Same as EN25P80, can be 
distinguished by RES/REMS: */
+#define EON_EN25P80            0x13
 #define EON_EN25B80T           0x43
 #define EON_EN25B80B           0x33
-#define EON_EN25B16            0x2015  /* Same as P16 */
+#define EON_EN25B16            0x2015  /* Same as EN25P16, can be 
distinguished by RES/REMS: */
+#define EON_EN25P16            0x14
 #define EON_EN25B16T           0x44
 #define EON_EN25B16B           0x34
-#define EON_EN25B32            0x2016  /* Same as P32 */
+#define EON_EN25B32            0x2016  /* Same as EN25P32, can be 
distinguished by RES/REMS: */
+#define EON_EN25P32            0x15
 #define EON_EN25B32T           0x45
 #define EON_EN25B32B           0x35
-#define EON_EN25B64            0x2017  /* Same as P64 */
+#define EON_EN25B64            0x2017  /* Same as EN25P64, can be 
distinguished by RES/REMS: */
+#define EON_EN25P64            0x16
 #define EON_EN25B64T           0x46
 #define EON_EN25B64B           0x36
 #define EON_EN25F05            0x3110

_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to