mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-30 16:33:41 +02:00
flashchips.c: Add support for XMC new SPI flash types
Adds initial support for the follow SPI flash chips: XM25QU64C XM25QU128C XM25QU256C XM25QH64C XM25QH128C XM25QH256C BUG=none TEST=builds Signed-off-by: Luke He <sixuerain@qq.com> Change-Id: I15c51b0f1ed789bcb2cabe33bc830f8d5d916969 Reviewed-on: https://review.coreboot.org/c/flashrom/+/48949 Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
e3afd77087
commit
32f4cb4ffa
238
flashchips.c
238
flashchips.c
@ -18992,6 +18992,244 @@ const struct flashchip flashchips[] = {
|
|||||||
.voltage = {3000, 3600},
|
.voltage = {3000, 3600},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QH64C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QH64C,
|
||||||
|
.total_size = 8192,
|
||||||
|
.page_size = 256,
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 2048} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 256} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 128} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {8 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {8 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_c7,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.printlock = spi_prettyprint_status_register_plain,
|
||||||
|
.unlock = spi_disable_blockprotect,
|
||||||
|
.write = spi_chip_write_256,
|
||||||
|
.read = spi_chip_read,
|
||||||
|
.voltage = {2700, 3600},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QU64C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QU64C,
|
||||||
|
.total_size = 8192,
|
||||||
|
.page_size = 256,
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 2048} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 256} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 128} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {8 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {8 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_c7,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.printlock = spi_prettyprint_status_register_plain,
|
||||||
|
.unlock = spi_disable_blockprotect,
|
||||||
|
.write = spi_chip_write_256,
|
||||||
|
.read = spi_chip_read,
|
||||||
|
.voltage = {1650, 1950},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QH128C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QH128C,
|
||||||
|
.total_size = 16384,
|
||||||
|
.page_size = 256,
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 4096} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 512} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 256} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {16 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {16 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_c7,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.printlock = spi_prettyprint_status_register_plain,
|
||||||
|
.unlock = spi_disable_blockprotect,
|
||||||
|
.write = spi_chip_write_256,
|
||||||
|
.read = spi_chip_read,
|
||||||
|
.voltage = {2700, 3600},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QU128C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QU128C,
|
||||||
|
.total_size = 16384,
|
||||||
|
.page_size = 256,
|
||||||
|
/* supports SFDP */
|
||||||
|
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 4096} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 512} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 256} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {16 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {16 * 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,
|
||||||
|
.voltage = {1650, 1950},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QH256C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QH256C,
|
||||||
|
.total_size = 32768,
|
||||||
|
.page_size = 256,
|
||||||
|
/* supports SFDP */
|
||||||
|
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
|
||||||
|
/* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN
|
||||||
|
| FEATURE_4BA_EXT_ADDR | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 8192} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 1024} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 512} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 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,
|
||||||
|
.voltage = {2700, 3600},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
.vendor = "XMC",
|
||||||
|
.name = "XM25QU256C",
|
||||||
|
.bustype = BUS_SPI,
|
||||||
|
.manufacture_id = ST_ID,
|
||||||
|
.model_id = XMC_XM25QU256C,
|
||||||
|
.total_size = 32768,
|
||||||
|
.page_size = 256,
|
||||||
|
/* supports SFDP */
|
||||||
|
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
|
||||||
|
/* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
|
||||||
|
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN
|
||||||
|
| FEATURE_4BA_EXT_ADDR | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ,
|
||||||
|
.tested = TEST_UNTESTED,
|
||||||
|
.probe = probe_spi_rdid,
|
||||||
|
.probe_timing = TIMING_ZERO,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 8192} },
|
||||||
|
.block_erase = spi_block_erase_20,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024, 1024} },
|
||||||
|
.block_erase = spi_block_erase_52,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 512} },
|
||||||
|
.block_erase = spi_block_erase_d8,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 1024 * 1024, 1} },
|
||||||
|
.block_erase = spi_block_erase_60,
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {32 * 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,
|
||||||
|
.voltage = {1650, 1950},
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
.vendor = "Zetta Device",
|
.vendor = "Zetta Device",
|
||||||
.name = "ZD25D20",
|
.name = "ZD25D20",
|
||||||
|
@ -792,7 +792,7 @@
|
|||||||
* ST25P chips are SPI, first byte of device ID is memory type, second
|
* ST25P chips are SPI, first byte of device ID is memory type, second
|
||||||
* byte of device ID is related to log(bitsize) at least for some chips.
|
* byte of device ID is related to log(bitsize) at least for some chips.
|
||||||
*/
|
*/
|
||||||
#define ST_ID 0x20 /* ST / SGS/Thomson / Numonyx (later acquired by Micron) */
|
#define ST_ID 0x20 /* ST / SGS/Thomson / Numonyx / XMC(later acquired by Micron) */
|
||||||
#define ST_M25P05A 0x2010
|
#define ST_M25P05A 0x2010
|
||||||
#define ST_M25P05_RES 0x05
|
#define ST_M25P05_RES 0x05
|
||||||
#define ST_M25P10A 0x2011
|
#define ST_M25P10A 0x2011
|
||||||
@ -811,6 +811,12 @@
|
|||||||
#define ST_M45PE40 0x4013
|
#define ST_M45PE40 0x4013
|
||||||
#define ST_M45PE80 0x4014
|
#define ST_M45PE80 0x4014
|
||||||
#define ST_M45PE16 0x4015
|
#define ST_M45PE16 0x4015
|
||||||
|
#define XMC_XM25QH64C 0x4017
|
||||||
|
#define XMC_XM25QU64C 0x4117
|
||||||
|
#define XMC_XM25QH128C 0x4018
|
||||||
|
#define XMC_XM25QU128C 0x4118
|
||||||
|
#define XMC_XM25QH256C 0x4019
|
||||||
|
#define XMC_XM25QU256C 0x4119
|
||||||
#define ST_M25PX80 0x7114
|
#define ST_M25PX80 0x7114
|
||||||
#define ST_M25PX16 0x7115
|
#define ST_M25PX16 0x7115
|
||||||
#define ST_M25PX32 0x7116
|
#define ST_M25PX32 0x7116
|
||||||
|
Loading…
x
Reference in New Issue
Block a user