diff options
author | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2015-03-01 22:04:38 +0000 |
---|---|---|
committer | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2015-03-01 22:04:38 +0000 |
commit | 74dc73f6907ea159c0d5d221309e266528ea6134 (patch) | |
tree | 15dba04ff8d31e6a4dce586a520311cc9e58f1d7 | |
parent | adadca66f2ce2cb03ece016ab07fef604283c667 (diff) | |
download | flashrom-74dc73f6907ea159c0d5d221309e266528ea6134.tar.gz flashrom-74dc73f6907ea159c0d5d221309e266528ea6134.tar.bz2 flashrom-74dc73f6907ea159c0d5d221309e266528ea6134.zip |
Add a bunch of new/tested stuff and various small changes 23
Tested mainboards:
OK:
- Elitegroup GF7050VT-M
Reported by Alex
- Fujitsu D2724-A1x (used in ESPRIMO E5625)
Reported by Rainer Spillmann
- Teclast X98 Air 3G
Reported by Antonio Ospite
Flash chips:
- Fix MX25L6405(D) definition by splitting it.
Reported by Reggie McMurtrey
- Add Macronix MX25L..08E family and rearrange MX25L6436E.
- Pm49FL004 to PREW (+EW)
Reported by Georg Sauthoff
Miscellaneous:
- Add board enable for abit KN9 Ultra.
- Mark ARM-USB-OCD as working OK.
- Use "mobile devices" instead of "laptops" in output.
- Tiny other stuff.
Corresponding to flashrom svn r1886.
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | board_enable.c | 2 | ||||
-rw-r--r-- | flashchips.c | 80 | ||||
-rw-r--r-- | flashchips.h | 8 | ||||
-rw-r--r-- | ft2232_spi.c | 2 | ||||
-rw-r--r-- | print.c | 10 | ||||
-rw-r--r-- | print_wiki.c | 10 |
7 files changed, 81 insertions, 33 deletions
@@ -1081,6 +1081,6 @@ djgpp-dos: clean libpayload: clean make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib -.PHONY: all install clean distclean compiler hwlibs features export tarball dos featuresavailable +.PHONY: all install clean distclean compiler hwlibs features export tarball djgpp-dos featuresavailable libpayload -include $(OBJS:.o=.d) diff --git a/board_enable.c b/board_enable.c index 81dcfec88..31984e356 100644 --- a/board_enable.c +++ b/board_enable.c @@ -1099,6 +1099,7 @@ static int nvidia_mcp_gpio0_raise(void) /* * Suited for: * - abit KN8 Ultra: NVIDIA CK804 + * - abit KN9 Ultra: NVIDIA MCP55 */ static int nvidia_mcp_gpio2_lower(void) { @@ -2314,6 +2315,7 @@ const struct board_match board_matches[] = { {0x8086, 0x2930, 0x147b, 0x1084, 0x11ab, 0x4364, 0x147b, 0x1084, NULL, NULL, NULL, P3, "abit", "IP35", 0, OK, intel_ich_gpio16_raise}, {0x8086, 0x2930, 0x147b, 0x1083, 0x10ec, 0x8167, 0x147b, 0x1083, NULL, NULL, NULL, P3, "abit", "IP35 Pro", 0, OK, intel_ich_gpio16_raise}, {0x10de, 0x0050, 0x147b, 0x1c1a, 0x10de, 0x0052, 0x147b, 0x1c1a, NULL, NULL, NULL, P3, "abit", "KN8 Ultra", 0, NT, nvidia_mcp_gpio2_lower}, + {0x10de, 0x0369, 0x147b, 0x1c20, 0x10de, 0x0360, 0x147b, 0x1c20, "^KN9(NF-MCP55 series)$", NULL, NULL, P3, "abit", "KN9 Ultra", 0, OK, nvidia_mcp_gpio2_lower}, {0x10de, 0x01e0, 0x147b, 0x1c00, 0x10de, 0x0060, 0x147B, 0x1c00, NULL, NULL, NULL, P3, "abit", "NF7-S", 0, OK, nvidia_mcp_gpio8_raise}, {0x10de, 0x02f0, 0x147b, 0x1c26, 0x10de, 0x0260, 0x147b, 0x1c26, NULL, NULL, NULL, P3, "abit", "NF-M2 nView", 0, OK, nvidia_mcp_gpio4_lower}, {0x1106, 0x0691, 0, 0, 0x1106, 0x3057, 0, 0, "(VA6)$", NULL, NULL, P3, "abit", "VA6", 0, OK, via_apollo_gpo4_lower}, diff --git a/flashchips.c b/flashchips.c index 4f36e95a6..8b5d1ecdc 100644 --- a/flashchips.c +++ b/flashchips.c @@ -6803,12 +6803,14 @@ const struct flashchip flashchips[] = { { .vendor = "Macronix", - .name = "MX25L8005/MX25L8006E/MX25V8005", + .name = "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L8005, .total_size = 1024, .page_size = 256, + /* MX25L8006E, MX25L8008E support SFDP */ + /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */ .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, @@ -6876,13 +6878,13 @@ const struct flashchip flashchips[] = { { .vendor = "Macronix", - .name = "MX25L1605A/MX25L1606E", + .name = "MX25L1605A/MX25L1606E/MX25L1608E", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L1605, .total_size = 2048, .page_size = 256, - /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E only) */ + /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E and MX25L1608E only) */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, @@ -6909,7 +6911,7 @@ const struct flashchip flashchips[] = { .printlock = spi_prettyprint_status_register_bp3_srwd, /* MX25L1605A bp2 only */ .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .read = spi_chip_read, /* Fast read (0x0B) supported (MX25L1608E supports dual-I/O read) */ .voltage = {2700, 3600}, }, @@ -6941,7 +6943,7 @@ const struct flashchip flashchips[] = { .block_erase = spi_block_erase_c7, }, }, - .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: Continuously Program (CP) mode */ + .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: Continuously Program (CP) mode, for 73E is quad enable */ .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ @@ -7084,7 +7086,7 @@ const struct flashchip flashchips[] = { .block_erase = spi_block_erase_c7, }, }, - .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: CP mode */ + .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */ .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, .read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */ @@ -7093,7 +7095,7 @@ const struct flashchip flashchips[] = { { .vendor = "Macronix", - .name = "MX25L3206E", + .name = "MX25L3206E/MX25L3208E", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L3205, @@ -7207,14 +7209,14 @@ const struct flashchip flashchips[] = { { .vendor = "Macronix", - .name = "MX25L6405(D)", + .name = "MX25L6405", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L6405, .total_size = 8192, .page_size = 256, - /* MX25L6405D has 64B of OTP; enter 0xB1, exit 0xC1 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + /* Has an additional 512B EEPROM sector */ + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, @@ -7234,22 +7236,22 @@ const struct flashchip flashchips[] = { .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 has different meanings */ + .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: error flag */ .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, }, { .vendor = "Macronix", - .name = "MX25L6406E/MX25L6436E", + .name = "MX25L6405D", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L6405, .total_size = 8192, .page_size = 256, - /* OTP: 06E 64B/36E 512B total; enter 0xB1, exit 0xC1 */ + /* OTP: 64B total; enter 0xB1, exit 0xC1 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, @@ -7270,16 +7272,56 @@ const struct flashchip flashchips[] = { .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 for 36E is quad enable */ + .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */ .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0xBB) supported */ .voltage = {2700, 3600}, }, { .vendor = "Macronix", - .name = "MX25L6445E/MX25L6465E/MX25L6473E", + .name = "MX25L6406E/MX25L6408E", + .bustype = BUS_SPI, + .manufacture_id = MACRONIX_ID, + .model_id = MACRONIX_MX25L6405, + .total_size = 8192, + .page_size = 256, + /* MX25L6406E supports SFDP */ + /* OTP: 06E 64B total; enter 0xB1, exit 0xC1 */ + .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 = { {64 * 1024, 128} }, + .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_bp3_srwd, + .unlock = spi_disable_blockprotect_bp3_srwd, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Macronix", + .name = "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E", .bustype = BUS_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L6405, @@ -10126,9 +10168,9 @@ const struct flashchip flashchips[] = { .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, - .tested = TEST_OK_PR, + .tested = TEST_OK_PREW, .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ + .probe_timing = TIMING_ZERO, .block_erasers = { { diff --git a/flashchips.h b/flashchips.h index 1bf811a1c..07ae49d0a 100644 --- a/flashchips.h +++ b/flashchips.h @@ -470,10 +470,10 @@ #define MACRONIX_MX25L1005 0x2011 /* Same as MX25L1005C, MX25L1006E */ #define MACRONIX_MX25L2005 0x2012 /* Same as MX25L2005C, MX25L2006E */ #define MACRONIX_MX25L4005 0x2013 /* Same as MX25L4005A, MX25L4005C, MX25L4006E */ -#define MACRONIX_MX25L8005 0x2014 /* Same as MX25V8005, MX25L8006E, FIXME: MX25L8073E (4k 0x20) */ -#define MACRONIX_MX25L1605 0x2015 /* MX25L1605 (64k 0x20); MX25L1605A/MX25L1606E (4k 0x20, 64k 0x52); MX25L1605D/MX25L1608D/MX25L1673E (4k 0x20) */ -#define MACRONIX_MX25L3205 0x2016 /* MX25L3205, MX25L3205A (64k 0x20); MX25L3205D/MX25L3208D (4k 0x20); MX25L3206E (4k 0x20, 64k 0x52); MX25L3273E (4k 0x20, 32k 0x52) */ -#define MACRONIX_MX25L6405 0x2017 /* MX25L6405, MX25L6405D (64k 0x20); MX25L6406E/MX25L6436E (4k 0x20); MX25L6445E/MX25L6465E/MX25L6473E (4k 0x20, 32k 0x52) */ +#define MACRONIX_MX25L8005 0x2014 /* Same as MX25V8005, MX25L8006E, MX25L8008E, FIXME: MX25L8073E (4k 0x20) */ +#define MACRONIX_MX25L1605 0x2015 /* MX25L1605 (64k 0x20); MX25L1605A/MX25L1606E/MX25L1608E (4k 0x20, 64k 0x52); MX25L1605D/MX25L1608D/MX25L1673E (4k 0x20) */ +#define MACRONIX_MX25L3205 0x2016 /* MX25L3205, MX25L3205A (64k 0x20); MX25L3205D/MX25L3208D (4k 0x20); MX25L3206E/MX25L3208E (4k 0x20, 64k 0x52); MX25L3273E (4k 0x20, 32k 0x52) */ +#define MACRONIX_MX25L6405 0x2017 /* MX25L6405, MX25L6405D (64k 0x20); MX25L6406E/MX25L6408E (4k 0x20); MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E (4k 0x20, 32k 0x52) */ #define MACRONIX_MX25L12805D 0x2018 /* MX25L12805D (no 32k); MX25L12865E, MX25L12835F, MX25L12845E (32k 0x52) */ #define MACRONIX_MX25L25635F 0x2019 /* Same as MX25L25639F, but the latter seems to not support REMS */ #define MACRONIX_MX25L1635D 0x2415 diff --git a/ft2232_spi.c b/ft2232_spi.c index 4e23797bd..08742ecf4 100644 --- a/ft2232_spi.c +++ b/ft2232_spi.c @@ -67,7 +67,7 @@ const struct dev_entry devs_ft2232spi[] = { {FTDI_VID, AMONTEC_JTAGKEY_PID, OK, "Amontec", "JTAGkey"}, {GOEPEL_VID, GOEPEL_PICOTAP_PID, OK, "GOEPEL", "PicoTAP"}, {FIC_VID, OPENMOKO_DBGBOARD_PID, OK, "FIC", "OpenMoko Neo1973 Debug board (V2+)"}, - {OLIMEX_VID, OLIMEX_ARM_OCD_PID, NT, "Olimex", "ARM-USB-OCD"}, + {OLIMEX_VID, OLIMEX_ARM_OCD_PID, OK, "Olimex", "ARM-USB-OCD"}, {OLIMEX_VID, OLIMEX_ARM_TINY_PID, OK, "Olimex", "ARM-USB-TINY"}, {OLIMEX_VID, OLIMEX_ARM_OCD_H_PID, OK, "Olimex", "ARM-USB-OCD-H"}, {OLIMEX_VID, OLIMEX_ARM_TINY_H_PID, OK, "Olimex", "ARM-USB-TINY-H"}, @@ -480,9 +480,9 @@ int print_supported(void) programmer_table[PROGRAMMER_INTERNAL].name); print_supported_chipsets(); msg_ginfo("\n"); - print_supported_boards_helper(boards_known, "boards"); + print_supported_boards_helper(boards_known, "mainboards"); msg_ginfo("\n"); - print_supported_boards_helper(laptops_known, "laptops"); + print_supported_boards_helper(laptops_known, "mobile devices"); #endif for (i = 0; i < PROGRAMMER_INVALID; i++) { const struct programmer_entry prog = programmer_table[i]; @@ -535,6 +535,7 @@ const struct board_info boards_known[] = { B("abit", "IP35 Pro", OK, NULL, NULL), B("abit", "IS-10", BAD, NULL, "Reported by deejkuba@aol.com to flashrom@coreboot.org, no public archive. Missing board enable and/or M50FW040 unlocking. May work now."), B("abit", "KN8 Ultra", OK, NULL, NULL), + B("abit", "KN9 Ultra", OK, NULL, NULL), B("abit", "NF-M2 nView", OK, NULL, NULL), B("abit", "NF-M2S", OK, NULL, NULL), B("abit", "NF7-S", OK, NULL, NULL), @@ -774,6 +775,7 @@ const struct board_info boards_known[] = { B("Elitegroup", "GeForce6100PM-M2 (V3.0)", OK, NULL, NULL), B("Elitegroup", "GeForce6100SM-M", OK, NULL, NULL), B("Elitegroup", "GeForce7050M-M (V2.0)", OK, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=865&MenuID=20&LanID=0", NULL), + B("Elitegroup", "GF7050VT-M", OK, NULL, NULL), B("Elitegroup", "GF7100PVT-M3 (V1.0)", OK, NULL, NULL), B("Elitegroup", "GF8200A", OK, NULL, NULL), B("Elitegroup", "K7S5A", OK, NULL, NULL), @@ -803,7 +805,8 @@ const struct board_info boards_known[] = { B("Foxconn", "P55MX", OK, "http://www.foxconnchannel.com/ProductDetail.aspx?T=motherboard&U=en-us0000474", "Needs the MFG jumper to be set correctly before flashing to enable the Flash Descriptor Override Strap."), B("Foxconn", "Q45M", BAD, "http://www.foxconnchannel.com/ProductDetail.aspx?T=Motherboard&U=en-us0000587", "Probing works (Hardware sequencing, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), B("Freetech", "P6F91i", OK, "http://web.archive.org/web/20010417035034/http://www.freetech.com/prod/P6F91i.html", NULL), - B("Fujitsu", "D3041-A1", OK, NULL, "Used in ESPRIMO P2560, contains an Atmel AT26DF081A."), + B("Fujitsu", "D2724-A1x", OK, NULL, "Used in ESPRIMO E5625."), + B("Fujitsu", "D3041-A1x", OK, NULL, "Used in ESPRIMO P2560, contains an Atmel AT26DF081A."), B("Fujitsu-Siemens", "CELSIUS W410", BAD, "ftp://ftp.ts.fujitsu.com/pub/mainboard-oem-sales/Products/Mainboards/Industrial&ExtendedLifetime/D3061&D3062/", "Mainboard model is D3062-A1. Probing works (Macronix MX25L6405, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), B("Fujitsu-Siemens", "ESPRIMO P5915", OK, "http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/professionalpc/ESPRIMO/P/EsprimoP5915-6.htm", "Mainboard model is D2312-A2."), B("GIGABYTE", "GA-2761GXDK", OK, "http://www.computerbase.de/news/hardware/mainboards/amd-systeme/2007/mai/gigabyte_dtx-mainboard/", NULL), @@ -1144,6 +1147,7 @@ const struct board_info laptops_known[] = { B("IBM/Lenovo", "ThinkPad 240", BAD, "http://www.stanford.edu/~bresnan//tp240.html", "Seems to (partially) work at first, but one block/sector cannot be written which then leaves you with a bricked laptop. Maybe this can be investigated and fixed in software later."), B("IBM/Lenovo", "3000 V100 TF05Cxx", OK, "http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop", NULL), //B("MSI", "GT60-2OD", OK, "http://www.msi.com/product/nb/GT60_2OD.html", NULL), requires layout patches + B("Teclast", "X98 Air 3G", OK, NULL, NULL), #endif {0}, diff --git a/print_wiki.c b/print_wiki.c index 2936dbf86..d2fb5e28d 100644 --- a/print_wiki.c +++ b/print_wiki.c @@ -133,15 +133,15 @@ static const char *test_state_to_template(enum test_state test_state) } #if CONFIG_INTERNAL == 1 -static const char laptop_intro[] = "\n== Supported laptops/notebooks ==\n\n\ -In general, flashing laptops is more difficult because laptops\n\n\ +static const char laptop_intro[] = "\n== Supported mobile devices (laptops, tablets etc.) ==\n\n\ +In general, flashing mobile devices is more difficult because they\n\n\ * often use the flash chip for stuff besides the BIOS,\n\ * often have special protection stuff which has to be handled by flashrom,\n\ * often use flash translation circuits which need drivers in flashrom.\n\n\ <div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \ background-color:#ff6666; align:right; border:1px solid #000000;\">\n\ '''IMPORTANT:''' At this point we recommend to '''not''' use flashrom on \ -untested laptops unless you have a means to recover from a flashing that goes \ +untested mobile devices unless you have a means to recover from a flashing that goes \ wrong (a working backup flash chip and/or good soldering skills).\n</div>\n"; static void print_supported_chipsets_wiki(int cols) @@ -275,10 +275,10 @@ static void print_supported_boards_wiki_helper(const char *devicetype, int cols, static void print_supported_boards_wiki(void) { printf("%s", board_intro); - print_supported_boards_wiki_helper("boards", 2, boards_known); + print_supported_boards_wiki_helper("mainboards", 2, boards_known); printf("%s", laptop_intro); - print_supported_boards_wiki_helper("laptops", 1, laptops_known); + print_supported_boards_wiki_helper("mobile devices", 1, laptops_known); } #endif |