mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-02 22:43:17 +02:00
Add support for the following AMIC SPI chips
http://www.amictechnology.com/pdf/A25L20P.pdf covers: AMIC A25L05PT AMIC A25L05PU AMIC A25L10PT AMIC A25L10PU AMIC A25L20PT AMIC A25L20PU http://www.amictechnology.com/pdf/A25L16P.pdf covers: AMIC A25L16PT AMIC A25L16PU Clarify the situation surrounding the A25L40PT and A25L40PU chips which share the same RDID values, despite the fact that their erase block layouts are different. Rudolf Marek tested and confirmed the distinct erase block layouts of these chips. Add a pretty-printer for the AMIC SPI chip status register Add a generic AMIC chip type. Corresponding to flashrom svn r1096. Signed-off-by: Daniel Lenski <dlenski@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:

committed by
Carl-Daniel Hailfinger

parent
74a828a6dd
commit
df90d3a38f
286
flashchips.c
286
flashchips.c
@ -1169,14 +1169,207 @@ struct flashchip flashchips[] = {
|
||||
.read = read_memmapped,
|
||||
},
|
||||
|
||||
/* The next two chip definitions have top/bottom boot blocks, but has no
|
||||
device differentiation between the two */
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L05PT",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L05PT,
|
||||
.total_size = 64,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{32 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{8 * 1024, 1},
|
||||
{4 * 1024, 2},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {64 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L05PU",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L05PU,
|
||||
.total_size = 64,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{4 * 1024, 2},
|
||||
{8 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{32 * 1024, 1},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {64 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L10PT",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L10PT,
|
||||
.total_size = 128,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{64 * 1024, 1},
|
||||
{32 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{8 * 1024, 1},
|
||||
{4 * 1024, 2},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {128 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L10PU",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L10PU,
|
||||
.total_size = 128,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{4 * 1024, 2},
|
||||
{8 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{32 * 1024, 1},
|
||||
{64 * 1024, 1},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {128 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L20PT",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L20PT,
|
||||
.total_size = 256,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{64 * 1024, 3},
|
||||
{32 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{8 * 1024, 1},
|
||||
{4 * 1024, 2},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {256 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L20PU",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L20PU,
|
||||
.total_size = 256,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{4 * 1024, 2},
|
||||
{8 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{32 * 1024, 1},
|
||||
{64 * 1024, 3},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {256 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
/* The A25L40P{T,U} chips are distinguished by their
|
||||
* erase block layouts, but without any distinction in RDID.
|
||||
* This inexplicable quirk was verified by Rudolf Marek
|
||||
* and discussed on the flashrom mailing list on 2010-07-12.
|
||||
*/
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L40PT",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L40P,
|
||||
.model_id = AMIC_A25L40PT,
|
||||
.total_size = 512,
|
||||
.page_size = 256,
|
||||
.tested = TEST_OK_PRW,
|
||||
@ -1208,7 +1401,7 @@ struct flashchip flashchips[] = {
|
||||
.name = "A25L40PU",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L40P,
|
||||
.model_id = AMIC_A25L40PU,
|
||||
.total_size = 512,
|
||||
.page_size = 256,
|
||||
.tested = TEST_OK_PRW,
|
||||
@ -1267,6 +1460,76 @@ struct flashchip flashchips[] = {
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L16PT",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L16PT,
|
||||
.total_size = 2048,
|
||||
.page_size = 256,
|
||||
.tested = TEST_UNTESTED,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{64 * 1024, 31},
|
||||
{32 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{8 * 1024, 1},
|
||||
{4 * 1024, 2},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {2048 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_60,
|
||||
}, {
|
||||
.eraseblocks = { {2048 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A25L16PU",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = AMIC_A25L16PU,
|
||||
.total_size = 2048,
|
||||
.page_size = 256,
|
||||
.tested = TEST_OK_PRW,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.block_erasers =
|
||||
{
|
||||
{
|
||||
.eraseblocks = {
|
||||
{4 * 1024, 2},
|
||||
{8 * 1024, 1},
|
||||
{16 * 1024, 1},
|
||||
{32 * 1024, 1},
|
||||
{64 * 1024, 31},
|
||||
},
|
||||
.block_erase = spi_block_erase_d8,
|
||||
}, {
|
||||
.eraseblocks = { {2048 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_60,
|
||||
}, {
|
||||
.eraseblocks = { {2048 * 1024, 1} },
|
||||
.block_erase = spi_block_erase_c7,
|
||||
}
|
||||
},
|
||||
.unlock = spi_disable_blockprotect,
|
||||
.write = spi_chip_write_256,
|
||||
.read = spi_chip_read,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "A29002B",
|
||||
@ -6677,6 +6940,21 @@ struct flashchip flashchips[] = {
|
||||
.read = read_memmapped,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "AMIC",
|
||||
.name = "unknown AMIC SPI chip",
|
||||
.bustype = CHIP_BUSTYPE_SPI,
|
||||
.manufacture_id = AMIC_ID,
|
||||
.model_id = GENERIC_DEVICE_ID,
|
||||
.total_size = 0,
|
||||
.page_size = 256,
|
||||
.tested = TEST_BAD_PREW,
|
||||
.probe = probe_spi_rdid4,
|
||||
.probe_timing = TIMING_ZERO,
|
||||
.write = NULL,
|
||||
.read = NULL,
|
||||
},
|
||||
|
||||
{
|
||||
.vendor = "Atmel",
|
||||
.name = "unknown Atmel SPI chip",
|
||||
|
Reference in New Issue
Block a user