/* * This file is part of the flashrom project. * * Copyright (C) 2000 Silicon Integrated System Corporation * Copyright (C) 2004 Tyan Corp * Copyright (C) 2005-2008 coresystems GmbH * Copyright (C) 2006-2009 Carl-Daniel Hailfinger * Copyright (C) 2009 Sean Nelson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ { .vendor = "SST", .name = "SST25LF020A", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF020_REMS, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25LF040A", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RES2, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST25LF080(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF080_REMS, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RES2, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST25VF010(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF010_REMS, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {32 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_D8, /* Supported by SST25VF010A only */ }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, /* Supported by SST25VF010A only */ }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, /* Fast read (0x0B) supported by SST25VF010A only */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF016B", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF016B, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF016, .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF020", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF020_REMS, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_UNTESTED, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, /* only */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF020B", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF020B, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 and 2nd SR */ .unlock = SPI_DISABLE_BLOCKPROTECT, /* FIXME: 2nd SR */ .write = SPI_WRITE_AAI, /* AAI supported (0xAD) */ .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF032B", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF032B, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 1024} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF040", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PR, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF040B", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF040B, .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_WRITE_AAI, /* AAI supported (0xAD) */ .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF040B.REMS", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B_REMS, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF040B, .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF064C", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF064C, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .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_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE256, .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF080B", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF080B, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF512(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF512_REMS, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, .probe = PROBE_SPI_REMS, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 2} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {32 * 1024, 2} }, .block_erase = SPI_BLOCK_ERASE_D8, /* Supported by SST25VF512A only */ }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, /* Supported by SST25VF512A only */ }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */ .unlock = SPI_DISABLE_BLOCKPROTECT, .write = SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */ .read = SPI_CHIP_READ, /* Fast read (0x0B) supported by SST25VF512A only */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25WF010", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25WF010, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {1024 * 128, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 128, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */ .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF020", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25WF020, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {1024 * 256, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 256, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */ .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF020A", .bustype = BUS_SPI, .manufacture_id = SANYO_ID, /* See flashchips.h */ .model_id = SST_SST25WF020A, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {64 * 1024, 4} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_CHIP_WRITE256, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF040", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25WF040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {1024 * 512, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 512, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */ .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF040B", .bustype = BUS_SPI, .manufacture_id = SANYO_ID, /* See flashchips.h */ .model_id = SST_SST25WF040B, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_CHIP_WRITE256, .read = SPI_CHIP_READ, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF080", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25WF080, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 32} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* *does* have a BP3 but it is useless */ .unlock = SPI_DISABLE_BLOCKPROTECT_BP3_SRWD, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF080B", .bustype = BUS_SPI, .manufacture_id = SANYO_ID, /* See flashchips.h */ .model_id = SST_SST25WF080B, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_CHIP_WRITE256, .read = SPI_CHIP_READ, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST25WF512", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25WF512, .total_size = 64, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {32 * 1024, 2} }, .block_erase = SPI_BLOCK_ERASE_52, }, { .eraseblocks = { {1024 * 64, 1} }, .block_erase = SPI_BLOCK_ERASE_60, }, { .eraseblocks = { {1024 * 64, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */ .unlock = SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, .write = SPI_WRITE_AAI, .read = SPI_CHIP_READ, /* Fast read (0x0B) supported */ .voltage = {1650, 1950}, }, { .vendor = "SST", .name = "SST26VF016B(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST26VF016B, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {8 * 1024, 4}, {32 * 1024, 1}, {64 * 1024, 30}, {32 * 1024, 1}, {8 * 1024, 4}, }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */ .unlock = SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT, .write = SPI_CHIP_WRITE256, /* Multi I/O supported */ .read = SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST26VF032B(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST26VF032B, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_UNTESTED, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 1024} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {8 * 1024, 4}, {32 * 1024, 1}, {64 * 1024, 62}, {32 * 1024, 1}, {8 * 1024, 4}, }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */ .unlock = SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT, .write = SPI_CHIP_WRITE256, /* Multi I/O supported */ .read = SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST26VF064B(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, .model_id = SST_SST26VF064B, .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = PROBE_SPI_RDID, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 2048} }, .block_erase = SPI_BLOCK_ERASE_20, }, { .eraseblocks = { {8 * 1024, 4}, {32 * 1024, 1}, {64 * 1024, 126}, {32 * 1024, 1}, {8 * 1024, 4}, }, .block_erase = SPI_BLOCK_ERASE_D8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = SPI_BLOCK_ERASE_C7, }, }, .printlock = SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */ .unlock = SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT, .write = SPI_CHIP_WRITE256, /* Multi I/O supported */ .read = SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */ .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST28SF040A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST28SF040, .total_size = 512, .page_size = 256, .feature_bits = 0, .tested = TEST_UNTESTED, .probe = PROBE_AT82802AB, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */ .block_erasers = { { .eraseblocks = { {128, 4096} }, .block_erase = ERASE_SECTOR_28SF040, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = ERASE_CHIP_28SF040, } }, .unlock = UNPROTECT_28SF040, .write = WRITE_28SF040, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST29EE010", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST29EE010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PR, .probe = PROBE_JEDEC, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {128 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST29EE020A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST29EE020A, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRE, .probe = PROBE_JEDEC, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {256 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST29LE010", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST29LE010, .total_size = 128, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, .probe = PROBE_JEDEC, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {128 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST29LE020", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST29LE020, .total_size = 256, .page_size = 128, .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRE, .probe = PROBE_JEDEC, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {256 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST39SF010A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39SF010, .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST39SF020A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39SF020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST39SF040", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39SF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST39SF512", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39SF512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {4500, 5500}, }, { .vendor = "SST", .name = "SST39VF010", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39VF010, .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST39VF020", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39VF020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST39VF040", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39VF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST39VF080", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39VF080, .total_size = 1024, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST39VF512", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, .model_id = SST_SST39VF512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = JEDEC_CHIP_BLOCK_ERASE, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST49LF002A/B", .bustype = BUS_FWH, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF002A, .total_size = 256, .page_size = 16 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {16 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */ } }, .printlock = PRINTLOCK_SST_FWHUB, .unlock = UNLOCK_SST_FWHUB, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF003A/B", .bustype = BUS_FWH, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF003A, .total_size = 384, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 96} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 6} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {384 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */ } }, .printlock = PRINTLOCK_SST_FWHUB, .unlock = UNLOCK_SST_FWHUB, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB) * and is only honored for 64k block erase, but not 4k sector erase. */ .vendor = "SST", .name = "SST49LF004A/B", .bustype = BUS_FWH, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF004A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */ }, }, .printlock = PRINTLOCK_SST_FWHUB, .unlock = UNLOCK_SST_FWHUB, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF004C", .bustype = BUS_FWH, .manufacture_id = SST_ID, .model_id = SST_SST49LF004C, .total_size = 512, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, .probe = PROBE_AT82802AB, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = ERASE_SECTOR_49LFXXXC, }, { .eraseblocks = { {64 * 1024, 7}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = ERASE_BLOCK_82802AB, } }, .printlock = PRINTLOCK_REGSPACE2_BLOCK_ERASER_1, .unlock = UNLOCK_REGSPACE2_BLOCK_ERASER_1, .write = WRITE_82802AB, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF008A", .bustype = BUS_FWH, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF008A, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */ } }, .printlock = PRINTLOCK_SST_FWHUB, .unlock = UNLOCK_SST_FWHUB, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF008C", .bustype = BUS_FWH, .manufacture_id = SST_ID, .model_id = SST_SST49LF008C, .total_size = 1024, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, .probe = PROBE_AT82802AB, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = ERASE_SECTOR_49LFXXXC, }, { .eraseblocks = { {64 * 1024, 15}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = ERASE_BLOCK_82802AB, } }, .printlock = PRINTLOCK_REGSPACE2_BLOCK_ERASER_1, .unlock = UNLOCK_REGSPACE2_BLOCK_ERASER_1, .write = WRITE_82802AB, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF016C", .bustype = BUS_FWH, .manufacture_id = SST_ID, .model_id = SST_SST49LF016C, .total_size = 2048, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, .probe = PROBE_AT82802AB, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = ERASE_SECTOR_49LFXXXC, }, { .eraseblocks = { {64 * 1024, 31}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = ERASE_BLOCK_82802AB, } }, .printlock = PRINTLOCK_REGSPACE2_BLOCK_ERASER_1, .unlock = UNLOCK_REGSPACE2_BLOCK_ERASER_1, .write = WRITE_82802AB, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF020", .bustype = BUS_LPC, .manufacture_id = SST_ID, .model_id = SST_SST49LF020, .total_size = 256, .page_size = 16 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {16 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF020A", .bustype = BUS_LPC, .manufacture_id = SST_ID, .model_id = SST_SST49LF020A, .total_size = 256, .page_size = 4 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {16 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF040", .bustype = BUS_LPC, .manufacture_id = SST_ID, .model_id = SST_SST49LF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150 ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF040B", .bustype = BUS_LPC, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = 1, /* 150ns */ .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, } }, .unlock = UNLOCK_REGSPACE2_UNIFORM_64K, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF080A", .bustype = BUS_LPC, /* A/A Mux */ .manufacture_id = SST_ID, .model_id = SST_SST49LF080A, .total_size = 1024, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = PROBE_JEDEC, .probe_timing = TIMING_FIXME, .block_erasers = { { .eraseblocks = { {4 * 1024, 256} }, .block_erase = JEDEC_SECTOR_ERASE, }, { .eraseblocks = { {64 * 1024, 16} }, .block_erase = JEDEC_BLOCK_ERASE, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = NO_BLOCK_ERASE_FUNC, } }, .write = WRITE_JEDEC1, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST49LF160C", .bustype = BUS_LPC, .manufacture_id = SST_ID, .model_id = SST_SST49LF160C, .total_size = 2048, .page_size = 4 * 1024, .feature_bits = FEATURE_REGISTERMAP, .tested = TEST_OK_PR, .probe = PROBE_AT82802AB, .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */ .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = ERASE_SECTOR_49LFXXXC, }, { .eraseblocks = { {64 * 1024, 31}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = ERASE_BLOCK_82802AB, } }, .printlock = PRINTLOCK_REGSPACE2_BLOCK_ERASER_1, .unlock = UNLOCK_REGSPACE2_BLOCK_ERASER_1, .write = WRITE_82802AB, .read = READ_MEMMAPPED, .voltage = {3000, 3600}, },