blob: 615419debae09688876cff1e74e06c51f36385fa [file] [log] [blame]
/*
* 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 <stepan@openbios.org>
* Copyright (C) 2006-2009 Carl-Daniel Hailfinger
* Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
*
* 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.
*/
#include "flash.h"
#include "flashchips.h"
#include "chipdrivers.h"
/**
* List of supported flash chips.
*
* This file is sorted alphabetically by vendor and name.
*
* The usual intention is that that this list is sorted by vendor, then chip
* family and chip density, which is useful for the output of 'flashrom -L'.
*/
const struct flashchip flashchips[] = {
/*
* .vendor = Vendor name
* .name = Chip name
* .bustype = Supported flash bus types (Parallel, LPC...)
* .manufacture_id = Manufacturer chip ID
* .model_id = Model chip ID
* .total_size = Total size in (binary) kbytes
* .page_size = Page or eraseblock(?) size in bytes
* .tested = Test status
* .probe = Probe function
* .probe_timing = Probe function delay
* .block_erasers[] = Array of erase layouts and erase functions
* {
* .eraseblocks[] = Array of { blocksize, blockcount }
* .block_erase = Block erase function
* }
* .printlock = Chip lock status function
* .unlock = Chip unlock function
* .write = Chip write function
* .read = Chip read function
* .voltage = Voltage range in millivolt
*/
/* TODO: Refactor implementation to avoid these .c includes */
#include "flashchips/amd.c"
#include "flashchips/amic.c"
#include "flashchips/atmel.c"
#include "flashchips/boya_bohong.c"
#include "flashchips/bright.c"
#include "flashchips/catalyst.c"
#include "flashchips/ene.c"
#include "flashchips/esi.c"
#include "flashchips/esmt.c"
#include "flashchips/eon.c"
#include "flashchips/fudan.c"
#include "flashchips/fujitsu.c"
#include "flashchips/gigadevice.c"
#include "flashchips/hyundai.c"
#include "flashchips/issi.c"
#include "flashchips/intel.c"
#include "flashchips/macronix.c"
#include "flashchips/micron_numonyx_st.c"
#include "flashchips/micron.c"
#include "flashchips/mosel_vitelic.c"
#include "flashchips/nantronics.c"
#include "flashchips/pmc.c"
#include "flashchips/puya.c"
#include "flashchips/sst.c"
#include "flashchips/st.c"
#include "flashchips/sanyo.c"
#include "flashchips/sharp.c"
#include "flashchips/spansion.c"
#include "flashchips/syncmos_mosel_vitelic.c"
#include "flashchips/ti.c"
#include "flashchips/winbond.c"
#include "flashchips/xmc.c"
#include "flashchips/xtx.c"
#include "flashchips/zetta.c"
/*
* These entries are intentionally placed at the end.
*/
{
.vendor = "Unknown",
.name = "SFDP-capable chip",
.bustype = BUS_SPI,
.manufacture_id = GENERIC_MANUF_ID,
.model_id = SFDP_DEVICE_ID,
.total_size = 0, /* set by probing function */
.page_size = 0, /* set by probing function */
.feature_bits = 0, /* set by probing function */
/* We present our own "report this" text hence we do not */
/* want the default "This flash part has status UNTESTED..." */
/* text to be printed. */
.tested = { .probe = OK, .read = OK, .erase = OK, .write = OK, .wp = NA },
.probe = PROBE_SPI_SFDP,
.block_erasers = {}, /* set by probing function */
.unlock = SPI_DISABLE_BLOCKPROTECT, /* is this safe? */
.write = 0, /* set by probing function */
.read = SPI_CHIP_READ,
/* FIXME: some vendor extensions define this */
.voltage = {0},
},
{
.vendor = "Programmer",
.name = "Opaque flash chip",
.bustype = BUS_PROG,
.manufacture_id = PROGMANUF_ID,
.model_id = PROGDEV_ID,
.total_size = 0,
.page_size = 256,
/* probe is assumed to work, rest will be filled in by probe */
.tested = TEST_OK_PROBE,
.probe = PROBE_OPAQUE,
/* eraseblock sizes will be set by the probing function */
.block_erasers =
{
{
.block_erase = OPAQUE_ERASE,
}
},
.write = WRITE_OPAQUE,
.read = READ_OPAQUE,
},
{
.vendor = "AMIC",
.name = "unknown AMIC SPI chip",
.bustype = BUS_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 = 0,
.read = 0,
},
{
.vendor = "Atmel",
.name = "unknown Atmel SPI chip",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "Eon",
.name = "unknown Eon SPI chip",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "Macronix",
.name = "unknown Macronix SPI chip",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "PMC",
.name = "unknown PMC SPI chip",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "SST",
.name = "unknown SST SPI chip",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "ST",
.name = "unknown ST SPI chip",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "Sanyo",
.name = "unknown Sanyo SPI chip",
.bustype = BUS_SPI,
.manufacture_id = SANYO_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "Winbond",
.name = "unknown Winbond (ex Nexcom) SPI chip",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.probe_timing = TIMING_ZERO,
.write = 0,
.read = 0,
},
{
.vendor = "Generic",
.name = "unknown SPI chip (RDID)",
.bustype = BUS_SPI,
.manufacture_id = GENERIC_MANUF_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_RDID,
.write = 0,
},
{
.vendor = "Generic",
.name = "unknown SPI chip (REMS)",
.bustype = BUS_SPI,
.manufacture_id = GENERIC_MANUF_ID,
.model_id = GENERIC_DEVICE_ID,
.total_size = 0,
.page_size = 256,
.tested = TEST_BAD_PREW,
.probe = PROBE_SPI_REMS,
.write = 0,
},
{0}
};
const unsigned int flashchips_size = ARRAY_SIZE(flashchips);