1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 22:21:16 +02:00

Add support for a bunch of 29GL parallel flash chips

29GL chips use a new 3-Byte device ID probing function at addresses
0x01, 0x0E, 0x0F.

Flash chip families supported by this method include...
 - EON EN29GL
 - Gigadevice GD29GL (if they really exist)
 - ISSI (PMC) IS29GL
 - Macronix MX29GL (+MX68GL1G0F)
 - Spansion S29GL (+S70GL02G)
 - Winbond W29GL

This patch adds respective flash chip definitions for chips up to 16 MB from
Eon, ISSI, Macronix and Winbond. Bigger chips as well as those from
Gigadevice and Spansion are left out.

Corresponding to flashrom svn r1835.

Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
This commit is contained in:
Stefan Tauner
2014-08-03 14:15:14 +00:00
parent 7de939325b
commit 03a9c3c1bb
4 changed files with 754 additions and 10 deletions

View File

@ -4891,6 +4891,120 @@ const struct flashchip flashchips[] = {
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
.name = "EN29GL064(A)B",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
.model_id = EON_EN29GL064B,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
.name = "EN29GL064(A)T",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
.model_id = EON_EN29GL064T,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 127},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
.name = "EN29GL064H/L",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
.model_id = EON_EN29GL064HL,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
.name = "EN29GL128",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
.model_id = EON_EN29GL128HL,
.total_size = 16384,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {128 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Fujitsu",
.name = "MBM29F004BC",
@ -6092,6 +6206,120 @@ const struct flashchip flashchips[] = {
.voltage = {3000, 3600},
},
{
.vendor = "ISSI",
.name = "IS29GL064B",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
.model_id = ISSI_PMC_IS29GL064B,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "ISSI",
.name = "IS29GL064T",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
.model_id = ISSI_PMC_IS29GL064T,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 127},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "ISSI",
.name = "IS29GL064H/L",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
.model_id = ISSI_PMC_IS29GL064HL,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "ISSI",
.name = "IS29GL128H/L",
.bustype = BUS_PARALLEL,
.manufacture_id = ISSI_ID,
.model_id = ISSI_PMC_IS29GL128HL,
.total_size = 16384,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {128 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX23L3254",
@ -7197,6 +7425,207 @@ const struct flashchip flashchips[] = {
.voltage = {4500, 5500},
},
{
.vendor = "Macronix",
.name = "MX29GL320EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL320EB,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 63},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL320ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL320ET,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 63},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL320EH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL320EHL,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 64} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL640EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL640EB,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL640ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL640ET,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 127},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL640EH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL640EHL,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29GL128F",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX29GL128F,
.total_size = 16384,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {128 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
.name = "MX29LV040",
@ -13053,6 +13482,207 @@ const struct flashchip flashchips[] = {
.voltage = {4500, 5500},
},
{
.vendor = "Winbond",
.name = "W29GL032CB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL032CB,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 63},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL032CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL032CT,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 63},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL032CH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL032CHL,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 64} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL064CB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL064CB,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{8 * 1024, 8},
{64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL064CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL064CT,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
{64 * 1024, 127},
{8 * 1024, 8},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL064CH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL064CHL,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {64 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W29GL128C",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
.model_id = WINBOND_W29GL128CHL,
.total_size = 16384,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec_29gl,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {128 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
.name = "W39F010",