[flashrom] [PATCH] Add chip definitions for Mosel Vitelic
Mattias Mattsson
vitplister at gmail.com
Fri Jul 9 11:36:39 CEST 2010
Add definitions for the following chips from Mosel Vitelic Corporation:
V29C31004B
V29C31004T
V29C51000B
V29C51000T
V29C51001B
V29C51001T
V29C51002B
V29C51002T
V29C51004B
V29C51004T
V29C51400B
V29C51400T
V29LC51000
V29LC51001
V29LC51002
This is one of my first patches ever so I am not at all certain it is
correct.
Datasheets here:
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C31004.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C51000.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C51001.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C51002.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C51004.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29C51400.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29LC51000.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29LC51001.pdf
http://www.ezoflash.com/datasheets/flash/Mosel_Vitelic/V29LC51002.pdf
Signed-off-by: Mattias Mattsson <vitplister at gmail.com>
Index: flashrom/flashchips.c
===================================================================
--- flashrom.orig/flashchips.c 2010-07-09 11:07:44.000000000 +0200
+++ flashrom/flashchips.c 2010-07-09 11:08:01.000000000 +0200
@@ -3166,6 +3166,422 @@
},
{
+ .vendor = "Mosel Vitelic",
+ .name = "V29C31004B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C31004B,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C31004T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C31004T,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51000B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51000B,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 128}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51000T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51000T,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 128}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51001B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51001B,
+ .total_size = 128,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 256}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51001T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51001T,
+ .total_size = 128,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 256}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51002B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51002B,
+ .total_size = 256,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51002T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51002T,
+ .total_size = 256,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51004B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51004B,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51004T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51004T,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51400B",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51400B,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51400T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51400T,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29C51400T",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29C51400T,
+ .total_size = 512,
+ .page_size = 1024,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 1024, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29LC51000",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29LC51000,
+ .total_size = 64,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 128}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {128 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29LC51001",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29LC51001,
+ .total_size = 128,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 256}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {256 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
+ .vendor = "Mosel Vitelic",
+ .name = "V29LC51002",
+ .bustype = CHIP_BUSTYPE_PARALLEL,
+ .manufacture_id = MVC_ID,
+ .model_id = MVC_V29LC51002,
+ .total_size = 256,
+ .page_size = 512,
+ .feature_bits = FEATURE_BYTEWRITES | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {1 * 512, 512}, },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 512, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ },
+
+ {
.vendor = "Numonyx",
.name = "M25PE10",
.bustype = CHIP_BUSTYPE_SPI,
Index: flashrom/flashchips.h
===================================================================
--- flashrom.orig/flashchips.h 2010-07-09 11:07:44.000000000 +0200
+++ flashrom/flashchips.h 2010-07-09 11:08:01.000000000 +0200
@@ -329,6 +329,23 @@
#define MX_29SL800CB 0x6B /* Same as MX29SL802CB */
#define MX_29SL800CT 0xEA /* Same as MX29SL802CT */
+#define MVC_ID 0x40 /* Mosel Vitelic Corp. / SyncMOS */
+#define MVC_V29C31004B 0x73
+#define MVC_V29C31004T 0x63 /* Same as S29C31004T */
+#define MVC_V29C51000B 0xA0
+#define MVC_V29C51000T 0x00
+#define MVC_V29C51001B 0xA1
+#define MVC_V29C51001T 0x01 /* Same as S29C51001T */
+#define MVC_V29C51002B 0xA2
+#define MVC_V29C51002T 0x02 /* Same as S29C51002T */
+#define MVC_V29C51004B 0xA3
+#define MVC_V29C51004T 0x03 /* Same as S29C51004T */
+#define MVC_V29C51400B 0xB3
+#define MVC_V29C51400T 0x13
+#define MVC_V29LC51000 0x20
+#define MVC_V29LC51001 0x60
+#define MVC_V29LC51002 0x82
+
/*
* Programmable Micro Corp is listed in JEP106W in bank 2, so it should
* have a 0x7F continuation code prefix.
More information about the flashrom
mailing list