diff options
author | David Hendricks <david.hendricks@gmail.com> | 2018-02-11 17:40:53 -0800 |
---|---|---|
committer | David Hendricks <david.hendricks@gmail.com> | 2018-02-20 01:09:29 +0000 |
commit | c9ee0ed8a62d5b165a22d536753e960e0158460c (patch) | |
tree | eb795574c05b61a4a3f82dbd916c26cc27c256e5 | |
parent | f701f343117270b4373320eb25ae259b8e513b7d (diff) | |
download | flashrom-c9ee0ed8a62d5b165a22d536753e960e0158460c.tar.gz flashrom-c9ee0ed8a62d5b165a22d536753e960e0158460c.tar.bz2 flashrom-c9ee0ed8a62d5b165a22d536753e960e0158460c.zip |
flashchips: Add Winbond W25P80/16/32 support
This adds support for W25P80/16/32 chips. Most notably these chips only
have two erase commands - one for 64KiB "sectors" and one for chip
erase.
Change-Id: Ie09ba8e28fee35c42e17ca05219dc673413de93b
Signed-off-by: David Hendricks <david.hendricks@gmail.com>
Reviewed-on: https://review.coreboot.org/23700
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | flashchips.c | 86 | ||||
-rw-r--r-- | flashchips.h | 3 |
2 files changed, 89 insertions, 0 deletions
diff --git a/flashchips.c b/flashchips.c index 54c494390..0d851427a 100644 --- a/flashchips.c +++ b/flashchips.c @@ -15430,6 +15430,92 @@ const struct flashchip flashchips[] = { }, { + .vendor = "Winbond", + .name = "W25P80", + .bustype = BUS_SPI, + .manufacture_id = WINBOND_NEX_ID, + .model_id = WINBOND_NEX_W25P80, + .total_size = 1024, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {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, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Winbond", + .name = "W25P16", + .bustype = BUS_SPI, + .manufacture_id = WINBOND_NEX_ID, + .model_id = WINBOND_NEX_W25P16, + .total_size = 2048, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { {64 * 1024, 32} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {2048 * 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, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Winbond", + .name = "W25P32", + .bustype = BUS_SPI, + .manufacture_id = WINBOND_NEX_ID, + .model_id = WINBOND_NEX_W25P32, + .total_size = 4096, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { {64 * 1024, 64} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {4096 * 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, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, + }, + { .vendor = "Winbond", .name = "W29C512A/W29EE512", .bustype = BUS_PARALLEL, diff --git a/flashchips.h b/flashchips.h index 6a7b0ae8b..f487248e9 100644 --- a/flashchips.h +++ b/flashchips.h @@ -890,6 +890,9 @@ * byte of device ID is related to log(bitsize). */ #define WINBOND_NEX_ID 0xEF /* Winbond (ex Nexcom) serial flashes */ +#define WINBOND_NEX_W25P80 0x2014 +#define WINBOND_NEX_W25P16 0x2015 +#define WINBOND_NEX_W25P32 0x2016 #define WINBOND_NEX_W25X10 0x3011 #define WINBOND_NEX_W25X20 0x3012 #define WINBOND_NEX_W25X40 0x3013 |