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@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.