From marcosfrm at gmail.com Sun Jul 1 02:23:55 2012 From: marcosfrm at gmail.com (Marcos Felipe Rasia de Mello) Date: Sat, 30 Jun 2012 21:23:55 -0300 Subject: [flashrom] help with static or standalone binary compile instructions In-Reply-To: References: Message-ID: 2012/6/30 Steven Williams : > I had a quick and probably dumb question, where in 'make' can I change the > parameters so flashrom will compile as a static or stand alone binary??I > found an old email where Gianluigi Tiesi > says(http://www.mail-archive.com/flashrom at flashrom.org/msg05104.html) to add > -static to the end of the cc list in his example but I cannot find anything > that resembles it in the current make file. I looked at the instructions for > the DOS compile but I was not sure if I needed to use this method and if I > could even add all the lib headers required to run flashrom. I am trying to > run flashrom on a thin client so I can install an updated version of Linux. > Right now they only run a custom Linux build that uses a 2.4 kernel and I > would like to have the system open to run an updated kernel and software. I > do believe a bootstrap or lilo configuration is in place but I will not know > for sure to modify it until I have the ability to read and write to the > bios. It would be great if this program was more standalone centric since a > full blown os is not always available. > > > So some pointers or advice would be awesome, thanks in advance! I'm using this and it works fine. --- Makefile.orig 2012-01-13 09:19:59.388190891 -0200 +++ Makefile 2012-01-13 09:21:49.489193337 -0200 @@ -531 +531 @@ - $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) + $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) -lz -static You'll need static libraries to link against. On Fedora they are in the following packages: glibc-static, zlib-static, pciutils-devel-static. Regards, Marcos From fercerpav at gmail.com Sun Jul 1 16:14:19 2012 From: fercerpav at gmail.com (Paul Fertser) Date: Sun, 01 Jul 2012 14:14:19 -0000 Subject: [flashrom] [PATCH] README: mention all the drivers that should be disabled on non-x86 Message-ID: <1881-2254-1-git-send-email-fercerpav@gmail.com> Currently README mentions some but not all options needed to get flashrom compiled on a libpci-less system. This patch adds all of them. Signed-off-by: Paul Fertser --- README | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README b/README index f88b3b5..88cc782 100644 --- a/README +++ b/README @@ -120,8 +120,9 @@ Processor architecture dependent features: On non-x86 architectures you have to disable a few programmers because they use port-based I/O which is not directly available on non-x86. Please add - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ - CONFIG_NICNATSEMI=no + CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_GFXNVIDIA=no CONFIG_SATASII=no \ + CONFIG_ATAHPT=no CONFIG_DRKAISER=no CONFIG_NICREALTEK=no CONFIG_NICNATSEMI=no \ + CONFIG_NICINTEL=no CONFIG_NICINTEL_SPI=no CONFIG_OGP_SPI=no CONFIG_SATAMV=no as parameters to the "make" invocation. Besides that, the internal programmer is only supported on x86 and MIPS. On other architectures, please add -- 1.7.10 From marcosfrm at gmail.com Sun Jul 1 16:45:18 2012 From: marcosfrm at gmail.com (Marcos Felipe Rasia de Mello) Date: Sun, 1 Jul 2012 11:45:18 -0300 Subject: [flashrom] help with static or standalone binary compile instructions In-Reply-To: References: Message-ID: 2012/7/1 Steven Williams : > Marcos, thanks for the quick response! I searched all over for that line > before, don't know how I missed it before :( In the svn make file as of > 7-28-2012 it is located at line 553. It compiled without error and it almost > executed. It was compiled with a 2.6 kernel but the machine I am trying to > run it on has a 2.4 kernel and it segfaulted. I am probably making a mistake > again or have overlooked a possible simple solution. I searched all over > google for a quick fix but found none. Any pointers on that? As a last > resort I think I am going to setup a debian 3.0 box to see if it will > compile and run. > Your libc requires a 2.6 kernel to run ("file flashrom" to see what version). With some pain you can build a separate toolchain targeting Linux 2.4, but probably the easiest option is set up an old distribution and compile flashrom there. Please use "reply to all" in your email client, otherwise your messages will not go to the mailing list. Regards, Marcos From c-d.hailfinger.devel.2006 at gmx.net Mon Jul 2 22:14:32 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Mon, 02 Jul 2012 22:14:32 +0200 Subject: [flashrom] [PATCH] README: mention all the drivers that should be disabled on non-x86 In-Reply-To: <1881-2254-1-git-send-email-fercerpav@gmail.com> References: <1881-2254-1-git-send-email-fercerpav@gmail.com> Message-ID: <4FF20128.4050108@gmx.net> Hi Paul, thanks for your patch. Am 2012-07-01 16:14:19 CEST schrieb Paul Fertser: > Currently README mentions some but not all options needed to get > flashrom compiled on a libpci-less system. This patch adds all of > them. AFAICS this section in the README is obsolete. All non-x86 programmers should be disabled by default if you simply run "make" on any non-x86 platform. If auto-disabling such programmers is broken on non-x86, we need to fix that. > Signed-off-by: Paul Fertser > --- > README | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/README b/README > index f88b3b5..88cc782 100644 > --- a/README > +++ b/README > @@ -120,8 +120,9 @@ Processor architecture dependent features: > > On non-x86 architectures you have to disable a few programmers because they > use port-based I/O which is not directly available on non-x86. Please add > - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ > - CONFIG_NICNATSEMI=no > + CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_GFXNVIDIA=no CONFIG_SATASII=no \ > + CONFIG_ATAHPT=no CONFIG_DRKAISER=no CONFIG_NICREALTEK=no CONFIG_NICNATSEMI=no \ > + CONFIG_NICINTEL=no CONFIG_NICINTEL_SPI=no CONFIG_OGP_SPI=no CONFIG_SATAMV=no > as parameters to the "make" invocation. > Besides that, the internal programmer is only supported on x86 and MIPS. On > other architectures, please add Regards, Carl-Daniel -- http://www.hailfinger.org/ From namedylan at gmail.com Tue Jul 3 17:25:13 2012 From: namedylan at gmail.com (Fengwei Zhang) Date: Tue, 3 Jul 2012 11:25:13 -0400 Subject: [flashrom] Board ASUS M2V-MX_SE: No EEPROM/flash device found when running flashrom in Windows XP Message-ID: <4A4CAB9D-9EA6-4D6C-9D83-E9F90CD627DC@gmail.com> All, I am trying to flash Coreboot BIOS in Windows XP SP3 environment. but I got No EEPROM/flash device found when running flashrom.exe. I have been successfully flashed BIOS in CentOS environment on the same machine by running ./flashrom -w coreboot.rom. Does anyone know why I get this error message? Regards, Fengwei From bblaauw at home.nl Tue Jul 3 18:23:04 2012 From: bblaauw at home.nl (Bernd Blaauw) Date: Tue, 03 Jul 2012 18:23:04 +0200 Subject: [flashrom] Board ASUS M2V-MX_SE: No EEPROM/flash device found when running flashrom in Windows XP In-Reply-To: <4A4CAB9D-9EA6-4D6C-9D83-E9F90CD627DC@gmail.com> References: <4A4CAB9D-9EA6-4D6C-9D83-E9F90CD627DC@gmail.com> Message-ID: <4FF31C68.8020401@home.nl> Op 3-7-2012 17:25, Fengwei Zhang schreef: > All, > > I am trying to flash Coreboot BIOS in Windows XP SP3 environment. but I got No EEPROM/flash device found when running flashrom.exe. > > I have been successfully flashed BIOS in CentOS environment on the same machine by running ./flashrom -w coreboot.rom. > > Does anyone know why I get this error message? I'm no expert on this, but I suppose: 1) it's required to run as administrator (rightclick the shortcut to CMD ("command prompt") and select to Run As Administrator. 2) it's nowadays required to specify which programmer you want to use when executing flashrom program: something like: flashrom -p internal -r savebios.bin likewise also when only reading (instead of dumping/saving), writing and erasing. Bernd From peter at stuge.se Tue Jul 3 21:01:23 2012 From: peter at stuge.se (Peter Stuge) Date: Tue, 3 Jul 2012 21:01:23 +0200 Subject: [flashrom] [coreboot] Board ASUS M2V-MX_SE: No EEPROM/flash device found when running flashrom in Windows XP In-Reply-To: <4A4CAB9D-9EA6-4D6C-9D83-E9F90CD627DC@gmail.com> References: <4A4CAB9D-9EA6-4D6C-9D83-E9F90CD627DC@gmail.com> Message-ID: <20120703190123.4653.qmail@stuge.se> Hi Fengwei, Fengwei Zhang wrote: > I am trying to flash Coreboot BIOS in Windows XP SP3 environment. > but I got No EEPROM/flash device found when running flashrom.exe. I believe flashrom may only support external flashers when running on Windows. This is because it is much more difficult to access the on-board flash chip in Windows than in Linux. > I have been successfully flashed BIOS in CentOS environment on the > same machine by running ./flashrom -w coreboot.rom. Maybe you can boot a Linux live-CD, or use that CentOS environment, to flash again? Kind regards //Peter From c-d.hailfinger.devel.2006 at gmx.net Thu Jul 5 21:24:36 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Thu, 05 Jul 2012 21:24:36 +0200 Subject: [flashrom] directio for flashrom Message-ID: <4FF5E9F4.4020309@gmx.net> Hi Jernej, I saw that you sent a pciutils/libpci patch to support your Direct IO driver on Windows. flashrom is a GPL'ed utility to read/write flash chips, e.g. the one storing BIOS/EFI on a mainboard. Right now, flashrom is quite limited on Windows: It doesn't support anything which needs MMIO/IOPort access. While it would be possible to use WinIo, the WinIo license seems to be a bit odd and may be incompatible with the GPL. Your Direct IO driver has the advantage of being GPL, but it is missing a key feature needed by flashrom: Mapping physical memory to the application (similar to MapPhysToLin in WinIo). flashrom needs uncached mappings of device memory regions, and cached mappings of RAM regions storing DMI info. I'm not sure whether NtMapViewOfSection would already be enough for this purpose, or if your Direct IO driver would have to be extended to offer such functionality. Regards, Carl-Daniel From coolwzq at 163.com Thu Jul 5 10:05:56 2012 From: coolwzq at 163.com (coolwzq) Date: Thu, 5 Jul 2012 16:05:56 +0800 Subject: [flashrom] flashrom can't support "Intel C202" + "W25Q64" Message-ID: <201207051605543595584@163.com> Hi Flashrom, flashrom v0.9.5.2-r1515 can't support "Intel C202" + "W25Q64", can you help me? Please see the attached file for more details. Thanks, Tom -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: C202_W25Q64.log Type: application/octet-stream Size: 21941 bytes Desc: not available URL: From c-d.hailfinger.devel.2006 at gmx.net Fri Jul 6 03:28:35 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Fri, 06 Jul 2012 03:28:35 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available Message-ID: <4FF63F43.5090603@gmx.net> If only one programmer driver is compiled in, make that driver the default. If more than one driver is compiled in, require --programmer specification at the command line. 3 results from a default flashrom configuration: compiler at p35:/sources/tmptrees/ready/flashrom-programmer_no_default> ./flashrom flashrom v0.9.5.2-r1547 on Linux 2.6.34.10-0.6-default (i686) Please select a programmer with --programmer . Valid choices are: internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, ft2232_spi, serprog, buspirate_spi, rayer_spi, pony_spi, nicintel, nicintel_spi, ogp_spi, satamv, linux_spi compiler at p35:/sources/tmptrees/ready/flashrom-programmer_no_default> ./flashrom -p foo flashrom v0.9.5.2-r1547 on Linux 2.6.34.10-0.6-default (i686) Error: Unknown programmer foo. Valid choices are: internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, ft2232_spi, serprog, buspirate_spi, rayer_spi, pony_spi, nicintel, nicintel_spi, ogp_spi, satamv, linux_spi Please run "flashrom --help" for usage info. compiler at p35:/sources/tmptrees/ready/flashrom-programmer_no_default> ./flashrom -p internal -p internal flashrom v0.9.5.2-r1547 on Linux 2.6.34.10-0.6-default (i686) Error: --programmer specified more than once. You can separate multiple parameters for a programmer with ",". Please see the man page for details. Please run "flashrom --help" for usage info. 1 result from a flashrom configuration with only dummy compiled in: compiler at p35:/sources/tmptrees/ready/flashrom-programmer_no_default> ./flashrom flashrom v0.9.5.2-r1547 on Linux 2.6.34.10-0.6-default (i686) Calibrating delay loop... OK. No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically. This patch represents rough consensus from IRC. I would like to require --programmer in all cases to make sure nobody gets bitten by two different single-programmer builds (e.g. dediprog and internal), but this patch is already a step in the right direction. Please check that the printed error messages make sense. I took the liberty of removing "flashrom is free software..." from the output to keep this mail readable. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-programmer_no_default/cli_classic.c =================================================================== --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) @@ -31,20 +31,19 @@ #include "flashchips.h" #include "programmer.h" -#if CONFIG_INTERNAL == 1 -static enum programmer default_programmer = PROGRAMMER_INTERNAL; -#elif CONFIG_DUMMY == 1 -static enum programmer default_programmer = PROGRAMMER_DUMMY; -#else -/* If neither internal nor dummy are selected, we must pick a sensible default. - * Since there is no reason to prefer a particular external programmer, we fail - * if more than one of them is selected. If only one is selected, it is clear - * that the user wants that one to become the default. +/* If only one programmer is compiled in, it is the default. + * In all other cases there is no default and the user has to specify the programmer with -p . */ +static enum programmer default_programmer = #if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 -#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. + PROGRAMMER_INVALID +#else +#if CONFIG_INTERNAL == 1 + PROGRAMMER_INTERNAL #endif -static enum programmer default_programmer = +#if CONFIG_DUMMY == 1 + PROGRAMMER_DUMMY +#endif #if CONFIG_NIC3COM == 1 PROGRAMMER_NIC3COM #endif @@ -96,8 +95,8 @@ #if CONFIG_LINUX_SPI == 1 PROGRAMMER_LINUX_SPI #endif +#endif ; -#endif static void cli_classic_usage(const char *name) { @@ -107,11 +106,11 @@ #endif "-E|-r |-w |-v ]\n" " [-c ] [-l ] [-o ]\n" - " [-i ] [-p [:]]\n\n"); + " [-i ] -p [:]\n\n"); printf("Please note that the command line interface for flashrom has " "changed between\n" - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" "Do not use flashrom in scripts or other automated tools " "without checking\n" "that your flashrom version won't interpret options in a " @@ -360,8 +359,8 @@ } } if (prog == PROGRAMMER_INVALID) { - fprintf(stderr, "Error: Unknown programmer " - "%s.\n", optarg); + fprintf(stderr, "Error: Unknown programmer %s. Valid choices are:\n", optarg); + list_programmers_linebreak(0, 80, 0); cli_classic_abort_usage(); } break; @@ -469,7 +468,15 @@ } if (prog == PROGRAMMER_INVALID) - prog = default_programmer; + if (default_programmer == PROGRAMMER_INVALID) { + /* More than one programmer compiled in, there is no default choice. */ + msg_perr("Please select a programmer with --programmer . Valid choices are:\n"); + list_programmers_linebreak(0, 80, 0); + ret = 1; + goto out; + } else { + prog = default_programmer; + } /* FIXME: Delay calibration should happen in programmer code. */ myusec_calibrate_delay(); -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Fri Jul 6 05:42:38 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 6 Jul 2012 05:42:38 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <4FF63F43.5090603@gmx.net> References: <4FF63F43.5090603@gmx.net> Message-ID: <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> On Fri, 06 Jul 2012 03:28:35 +0200 Carl-Daniel Hailfinger wrote: > If only one programmer driver is compiled in, make that driver the > default. If more than one driver is compiled in, require --programmer > specification at the command line. > > 3 results from a default flashrom configuration: > [?] > This patch represents rough consensus from IRC. I would like to require > --programmer in all cases to make sure nobody gets bitten by two > different single-programmer builds (e.g. dediprog and internal), but > this patch is already a step in the right direction. Unlikely situation, but i would ack such a patch too. OTOH >90% of the users would just require the internal programmer, but out of those 90%, 99% probably use pre-compiled versions with the default config... > Please check that the printed error messages make sense. I took the > liberty of removing "flashrom is free software..." from the output to > keep this mail readable. there is an easier way to get rid of that line than deleting it manually... just saying :) > Signed-off-by: Carl-Daniel Hailfinger > > Index: flashrom-programmer_no_default/cli_classic.c > =================================================================== > --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) > +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) > [?] > if (prog == PROGRAMMER_INVALID) > - prog = default_programmer; > + if (default_programmer == PROGRAMMER_INVALID) { > + /* More than one programmer compiled in, there is no default choice. */ > + msg_perr("Please select a programmer with --programmer . Valid choices are:\n"); ^ while i see your point (pun intended), the space is still wrong imho. What about "Please select a programmer with the --programmer parameter. Valid choices are:\n"? if the 80 column limit would be a problem (it is not afaics) then it could become... "Please select a programmer with the --programmer parameter.\nValid choices are: " that may look nicer anyway. Acked-by: Stefan Tauner iff 2 out of idwer, uwe, twice11 agree with it. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 6 05:58:21 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 6 Jul 2012 05:58:21 +0200 Subject: [flashrom] Intel C602 support In-Reply-To: References: <201206121618.q5CGI8t2013438@mail2.student.tuwien.ac.at> Message-ID: <201207060358.q663wMw4006362@mail2.student.tuwien.ac.at> On Thu, 28 Jun 2012 07:03:34 -0700 Greg Schardt wrote: > I apologize for the delay. likewise ;) > Here is the output: > > 00:1f.0 ISA bridge [0601]: Intel Corporation Patsburg LPC Controller [8086:1d41] (rev 06) > > Let me know if you need more information or would like me to test it. that one actually is already supported since september 2011, so the latest stable version should detect it and work correctly (as long as there are no locked regions). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 6 07:14:15 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 6 Jul 2012 07:14:15 +0200 Subject: [flashrom] add Numonyx/Micron N25Q128 In-Reply-To: References: Message-ID: <201207060514.q665EFPR026911@mail2.student.tuwien.ac.at> On Sat, 9 Jun 2012 14:51:15 +0200 frederic.temporelli at bull.net wrote: > Hello > > > Numonyx/Micron N25Q128 is used on new X9 motherboards from Supermicro (X9DRT, ...) > > Specs are availbale on Micron WWW site: > http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/N25Q_128_3_Volt_with_boot_sector.pdf > > Following patch add this chip to flashrom. Probe is OK. > Due to Manageability Engine, some work is required before being able to test READ/ERASE/WRITE... > > ================================================================================= > Signed-off-by: Frederic Temporelli > > diff -urN flashrom-0.9.5.2-r1540/flashchips.c flashrom-0.9.5.2-r1540-n25q128/flashchips.c > --- flashrom-0.9.5.2-r1540/flashchips.c 2012-05-20 23:32:32.000000000 +0000 > +++ flashrom-0.9.5.2-r1540-n25q128/flashchips.c 2012-06-09 14:41:07.064141076 +0000 > @@ -5453,6 +5453,37 @@ > ? ? ? ? }, > > ? ? ? ? { > + ? ? ? ? ? ? ? .vendor ? ? ? ? = "Numonyx", > + ? ? ? ? ? ? ? .name ? ? ? ? ? = "N25Q128", > + ? ? ? ? ? ? ? .bustype ? ? ? ?= BUS_SPI, > + ? ? ? ? ? ? ? .manufacture_id = ST_ID, > + ? ? ? ? ? ? ? .model_id ? ? ? = ST_N25Q128, > + ? ? ? ? ? ? ? .total_size ? ? = 16384, > + ? ? ? ? ? ? ? .page_size ? ? ?= 256, > + ? ? ? ? ? ? ? .feature_bits ? = FEATURE_WRSR_WREN | FEATURE_OTP, > + ? ? ? ? ? ? ? .tested ? ? ? ? = TEST_OK_PROBE, > + ? ? ? ? ? ? ? .probe ? ? ? ? ?= probe_spi_rdid, > + ? ? ? ? ? ? ? .probe_timing ? = TIMING_ZERO, > + ? ? ? ? ? ? ? .block_erasers ?= > + ? ? ? ? ? ? ? { > + ? ? ? ? ? ? ? ? ? ? ? { > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .eraseblocks = { {4 * 1024, 4096 } }, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .block_erase = spi_block_erase_20, > + ? ? ? ? ? ? ? ? ? ? ? }, { > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .eraseblocks = { {64 * 1024, 256} }, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .block_erase = spi_block_erase_d8, > + ? ? ? ? ? ? ? ? ? ? ? }, { > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .eraseblocks = { {16 * 1024 * 1024, 1} }, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .block_erase = spi_block_erase_c7, > + ? ? ? ? ? ? ? ? ? ? ? } > + ? ? ? ? ? ? ? }, > + ? ? ? ? ? ? ? .unlock ? ? ? ? = spi_disable_blockprotect, > + ? ? ? ? ? ? ? .write ? ? ? ? ?= spi_chip_write_256, > + ? ? ? ? ? ? ? .read ? ? ? ? ? = spi_chip_read, > + ? ? ? }, > + > + > + ? ? ? { > ? ? ? ? ? ? ? ? .vendor ? ? ? ? = "PMC", > ? ? ? ? ? ? ? ? .name ? ? ? ? ? = "Pm25LV010", > ? ? ? ? ? ? ? ? .bustype ? ? ? ?= BUS_SPI, > diff -urN flashrom-0.9.5.2-r1540/flashchips.h flashrom-0.9.5.2-r1540-n25q128/flashchips.h > --- flashrom-0.9.5.2-r1540/flashchips.h 2012-05-14 01:51:46.000000000 +0000 > +++ flashrom-0.9.5.2-r1540-n25q128/flashchips.h 2012-06-08 20:46:47.225385676 +0000 > @@ -587,6 +587,7 @@ > ?#define ST_M29W040B ? ? ? ? ? ?0xE3 > ?#define ST_M29W512B ? ? ? ? ? ?0x27 > ?#define ST_N25Q064 ? ? ? ? ? ? 0xBA17 > +#define ST_N25Q128 ? ? ? ? ? ? 0xBA18 ?/* also Numonyx N25Q128 */ > > ?#define SYNCMOS_MVC_ID ? ? ? ? 0x40 ? ?/* SyncMOS (SM) and Mosel Vitelic Corporation (MVC) */ > ?#define MVC_V29C51000T ? ? ? ? 0x00 > ================================================================================= hello and thanks for your patch! this chip is a bit complicated and we cant merge the patch as it is. they have used the same plane RDID for multiple variants of the chip. some attributes are not important for flashrom and can be ignored, but some are very important, namely the boot sector layout. quote from p.52: > The N25Q128 is available in the following architecture versions: > Bottom version, 64 KB uniform sectors plus 8 bottom boot sectors (each with 16 > subsectors), > Top version, 64 KB uniform sectors plus 8 top boot sectors (each with 16 subsectors) > Uniform version, 64 KB uniform sectors without any boot sectors and subsectors. the good news is that this differences can be detected by an extended RDID command in its 5th byte (1 manufacturer, 2 device, 1 length of the following extended data, the first EDID byte we want), see table 15. of this 5th byte we need to look at the first two bits to determine the architecture, see table 16. our current infrastructure (probe_spi_rdid_generic) cant handle that, but should... so we will plan a change, but please dont expect it to happen too soon. the bad news is that i am not even sure if the subsector erase commands work as flashrom expects. flashrom wants to use the same erase opcode for the hole address space, even for non-uniform layouts. this usually works fine, but afaics it is not specified in the datasheet what happens if one uses the subsector erase opcode on a non-subsector *on devices that actually have subsectors* (the emphasis stems from the fact that it *is* defined, that the subsector erase command is ignore by the uniform model: "Any Subsector Erase (SSE) instruction in devices with uniform architecture (meaning no boot sectors with subsectors) is rejected without having any effects on the device." (p. 98). other interesting bits of this chips: - bit#5 of the status register "is used in conjunction with the Block Protect (BP3, BP2, BP1, BP0) bits to determine if the protected area defined by the Block Protect bits starts from the top or the bottom of the memory array" - a flag status register that gives more info than the "legacy spi status register" - a non-volatile configuration register to configure dummy clock cycles, output driver strength and other stuff, and a volatile register that overrides the nvm settings the first two points can be somewhat ignored by us, the generic "write 0 to the status register" is good enough to unlock the device. regarding the ME: are you aware of my layout patches, that enable read, erase and verify on user-definable address ranges? see the patches from 2011-12-25 at http://patchwork.coreboot.org/project/flashrom/list/ -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Sat Jul 7 10:02:20 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sat, 7 Jul 2012 10:02:20 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <4FF63F43.5090603@gmx.net> References: <4FF63F43.5090603@gmx.net> Message-ID: <201207070802.q6782Kp5028594@mail2.student.tuwien.ac.at> On Fri, 06 Jul 2012 03:28:35 +0200 Carl-Daniel Hailfinger wrote: > if (prog == PROGRAMMER_INVALID) > - prog = default_programmer; > + if (default_programmer == PROGRAMMER_INVALID) { > + /* More than one programmer compiled in, there is no default choice. */ > + msg_perr("Please select a programmer with --programmer . Valid choices are:\n"); > + list_programmers_linebreak(0, 80, 0); > + ret = 1; > + goto out; > + } else { > + prog = default_programmer; > + } please add {} around the inner if, else gcc complains. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Sat Jul 7 10:25:33 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sat, 7 Jul 2012 10:25:33 +0200 Subject: [flashrom] [PATCH] Make make make and clean all utility tools too Message-ID: <1341649533-22457-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Happy day of redundancy day! Signed-off-by: Stefan Tauner --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 530fb83..d713254 100644 --- a/Makefile +++ b/Makefile @@ -270,6 +270,7 @@ CLI_OBJS = flashrom.o cli_classic.o cli_output.o print.o PROGRAMMER_OBJS = udelay.o programmer.o all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) + +make -C util/ich_descriptors_tool/ # Set the flashrom version string from the highest revision number # of the checked out flashrom files. @@ -569,6 +570,7 @@ TAROPTIONS = $(shell LC_ALL=C tar --version|grep -q GNU && echo "--owner=root -- # We don't use EXEC_SUFFIX here because we want to clean everything. clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d + +make -C util/ich_descriptors_tool/ clean distclean: clean rm -f .features .libdeps -- Kind regards, Stefan Tauner From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 7 14:47:01 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 07 Jul 2012 14:47:01 +0200 Subject: [flashrom] [PATCH] Make make make and clean all utility tools too In-Reply-To: <1341649533-22457-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1341649533-22457-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <4FF82FC5.6010202@gmx.net> Am 07.07.2012 10:25 schrieb Stefan Tauner: > Happy day of redundancy day! > > Signed-off-by: Stefan Tauner Sir, hats off to you, sir! Your brilliantly stated brilliant comment wins you one shippable internet, ready to be shipped over the net. Regards, Carl-Daniel From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 7 15:21:31 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 07 Jul 2012 15:21:31 +0200 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <4FEE4625.10606@gmx.net> References: <4FEE4625.10606@gmx.net> Message-ID: <4FF837DB.7010704@gmx.net> Move Mac OS X IOKit/DirectHW availability checks in the Makefile from compiler check to pciutils check. Add DOS libpci in the Makefile includes only if a PCI-based programmer was requested. Restrict mmap usage in ich_descriptors_tool to Unix style systems. Build ich_descriptors_tool with the correct .exe extension on DOS/Windows. Build ich_descriptors_tool by default. (Patch by Stefan Tauner) Update the README. I tested native compilation on Linux x86, cross-compilation on Linux for MinGW and DJGPP. Tests on OS X and non-x86 platforms appreciated. Simply running "make" with no other parameters should work on every platform/OS if you're compiling native code. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-portability-fixes/hwaccess.h =================================================================== --- flashrom-portability-fixes/hwaccess.h (Revision 1547) +++ flashrom-portability-fixes/hwaccess.h (Arbeitskopie) @@ -180,10 +180,6 @@ #include #endif -#if (defined(__MACH__) && defined(__APPLE__)) -#define __DARWIN__ -#endif - /* Clarification about OUTB/OUTW/OUTL argument order: * OUT[BWL](val, port) */ @@ -203,7 +199,7 @@ #define INW(x) __extension__ ({ u_int inw_tmp = (x); inw(inw_tmp); }) #define INL(x) __extension__ ({ u_int inl_tmp = (x); inl(inl_tmp); }) #else -#if defined(__DARWIN__) +#if defined(__MACH__) && defined(__APPLE__) /* Header is part of the DirectHW library. */ #include #define off64_t off_t @@ -303,7 +299,7 @@ #endif #endif -#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) +#if !(defined(__MACH__) && defined(__APPLE__)) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) typedef struct { uint32_t hi, lo; } msr_t; msr_t rdmsr(int addr); int wrmsr(int addr, msr_t msr); Index: flashrom-portability-fixes/os.h =================================================================== --- flashrom-portability-fixes/os.h (Revision 1547) +++ flashrom-portability-fixes/os.h (Arbeitskopie) @@ -26,7 +26,7 @@ #define __FLASHROM_OS__ "SunOS" // OS X #elif defined(__MACH__) && defined(__APPLE__) -#define __FLASHROM_OS__ "Darwin" +#define __FLASHROM_OS__ "OSX" // FreeBSD #elif defined(__FreeBSD__) #define __FLASHROM_OS__ "FreeBSD" Index: flashrom-portability-fixes/Makefile =================================================================== --- flashrom-portability-fixes/Makefile (Revision 1547) +++ flashrom-portability-fixes/Makefile (Arbeitskopie) @@ -53,27 +53,29 @@ # below uses CC itself. override TARGET_OS := $(strip $(shell LC_ALL=C $(CC) $(CPPFLAGS) -E os.h 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"')) -ifeq ($(TARGET_OS), Darwin) +ifeq ($(TARGET_OS), OSX) CPPFLAGS += -I/opt/local/include -I/usr/local/include -# DirectHW framework can be found in the DirectHW library. -LDFLAGS += -framework IOKit -framework DirectHW -L/opt/local/lib -L/usr/local/lib +LDFLAGS += -L/opt/local/lib -L/usr/local/lib endif + ifeq ($(TARGET_OS), FreeBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), OpenBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), DOS) EXEC_SUFFIX := .exe -CPPFLAGS += -I../libgetopt -I../libpci/include +CPPFLAGS += -I../libgetopt # DJGPP has odd uint*_t definitions which cause lots of format string warnings. CPPFLAGS += -Wno-format # FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt LIBS += ../libgetopt/libgetopt.a -# Bus Pirate and Serprog are not supported under DOS (missing serial support). +# Bus Pirate Serprog and PonyProg are not supported under DOS (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -84,6 +86,11 @@ else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -270,6 +277,7 @@ PROGRAMMER_OBJS = udelay.o programmer.o all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) + @+make -C util/ich_descriptors_tool/ EXEC_SUFFIX=$(EXEC_SUFFIX) # Set the flashrom version string from the highest revision number # of the checked out flashrom files. @@ -531,10 +539,19 @@ ifeq ($(TARGET_OS), OpenBSD) # For (i386|amd64)_iopl(2). LIBS += -l$(shell uname -m) +else +ifeq ($(TARGET_OS), OSX) +# DirectHW framework can be found in the DirectHW library. +LIBS += -framework IOKit -framework DirectHW +else +ifeq ($(TARGET_OS), DOS) +CPPFLAGS += -I../libpci/include endif endif endif endif +endif +endif ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' @@ -569,6 +586,7 @@ # We don't use EXEC_SUFFIX here because we want to clean everything. clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d + @+make -C util/ich_descriptors_tool/ clean EXEC_SUFFIX=$(EXEC_SUFFIX) distclean: clean rm -f .features .libdeps Index: flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (Revision 1547) +++ flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (Arbeitskopie) @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -33,6 +32,9 @@ #include #include #include "ich_descriptors.h" +#if defined(unix) || defined(__unix__) || defined(__unix) || (defined(__MACH__) && defined(__APPLE__)) +#include +#endif static void dump_file(const char *basename, const uint32_t *dump, unsigned int len, struct ich_desc_region *reg, unsigned int i) { @@ -161,16 +163,17 @@ if (len < 0) usage(argv, "Seeking to the end of the file failed"); +#if defined(unix) || defined(__unix__) || defined(__unix) || (defined(__MACH__) && defined(__APPLE__)) buf = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0); - if (buf == (void *) -1) { + if (buf == (void *) -1) +#endif + { /* fallback for stupid OSes like cygwin */ - int ret; buf = malloc(len); if (!buf) usage(argv, "Could not allocate memory"); lseek(fd, 0, SEEK_SET); - ret = read(fd, buf, len); - if (ret != len) + if (len != read(fd, buf, len)) usage(argv, "Seeking to the end of the file failed"); } printf("The flash image has a size of %d [0x%x] bytes.\n", len, len); Index: flashrom-portability-fixes/util/ich_descriptors_tool/Makefile =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (Revision 1547) +++ flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (Arbeitskopie) @@ -19,7 +19,7 @@ SHAREDOBJ = $(OBJATH)/$(notdir $(SHAREDSRC:%.c=%.o)) -all:$(PROGRAM) +all:$(PROGRAM)$(EXEC_SUFFIX) $(OBJ): $(OBJATH)/%.o : %.c $(CC) $(CFLAGS) -o $@ -c $< @@ -29,11 +29,11 @@ $(SHAREDOBJ): $(OBJATH)/%.o : $(SHAREDSRCDIR)/%.c $(CC) $(CFLAGS) -o $@ -c $< -$(PROGRAM): $(OBJ) $(SHAREDOBJ) - $(CC) -o $(PROGRAM) $(OBJ) $(SHAREDOBJ) +$(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ) + $(CC) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ) clean: - rm -f $(PROGRAM) + rm -f $(PROGRAM) $(PROGRAM).exe rm -rf $(DEPPATH) $(OBJATH) # Include the dependency files. Index: flashrom-portability-fixes/cbtable.c =================================================================== --- flashrom-portability-fixes/cbtable.c (Revision 1547) +++ flashrom-portability-fixes/cbtable.c (Arbeitskopie) @@ -211,7 +211,7 @@ struct lb_header *lb_table; struct lb_record *rec, *last; -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) /* This is a hack. DirectHW fails to map physical address 0x00000000. * Why? */ Index: flashrom-portability-fixes/physmap.c =================================================================== --- flashrom-portability-fixes/physmap.c (Revision 1547) +++ flashrom-portability-fixes/physmap.c (Arbeitskopie) @@ -128,7 +128,7 @@ void cleanup_cpu_msr(void) { } -#elif defined(__DARWIN__) +#elif defined(__MACH__) && defined(__APPLE__) #define MEM_DEV "DirectHW" @@ -467,7 +467,7 @@ #else -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) int setup_cpu_msr(int cpu) { // Always succeed for now Index: flashrom-portability-fixes/README =================================================================== --- flashrom-portability-fixes/README (Revision 1547) +++ flashrom-portability-fixes/README (Arbeitskopie) @@ -93,7 +93,7 @@ To compile and run on Darwin/Mac OS X: Install DirectHW from coresystems GmbH. - DirectHW is available at http://www.coresystems.de/en/directhw . + DirectHW is available at http://www.coreboot.org/DirectHW . To cross-compile on Linux for DOS: @@ -108,7 +108,7 @@ ../libpci should contain pciutils source and binaries. ../libgetopt should contain getopt.a from libgetopt. Run either (change settings where appropriate) - make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip OS_ARCH=DOS + make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip or (above settings hardcoded) make djgpp-dos You might have to add WARNERROR=no to the make command line. @@ -116,17 +116,24 @@ http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi7b.zip and make sure CWSDPMI.EXE is in the current directory. +To cross-compile on Linux for Windows: + + Get RPMs of the MinGW cross-compiler and install them: + mingw32-filesystem-52 + mingw32-cross-cpp-4.6.2 + mingw32-cross-binutils-2.22 + mingw32-cross-gcc-4.6.2 + mingw32-runtime-1.0.1 + mingw32-headers-1.0.1 + PCI-based programmers (internal etc.) are not supported on Windows. + Run (change settings where appropriate) + make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip + Processor architecture dependent features: - On non-x86 architectures you have to disable a few programmers because they - use port-based I/O which is not directly available on non-x86. Please add - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ - CONFIG_NICNATSEMI=no - as parameters to the "make" invocation. - Besides that, the internal programmer is only supported on x86 and MIPS. On - other architectures, please add - CONFIG_INTERNAL=no - as parameter to the "make" invocation. + On non-x86 architectures a few programmers don't work (yet) because they + use port-based I/O which is not directly available on non-x86. Those + programmers will be disabled automatically if you run "make". Installation ------------ -- http://www.hailfinger.org/ From niso at kth.se Sat Jul 7 22:57:52 2012 From: niso at kth.se (=?UTF-8?q?Niklas=20S=C3=B6derlund?=) Date: Sat, 7 Jul 2012 22:57:52 +0200 Subject: [flashrom] [PATCH] remove exit call from pcidev_init Message-ID: <1341694672-19019-1-git-send-email-niso@kth.se> If the function fails it returns 0. All callers have been made aware of this and are prepared to handle it. Signed-off-by: Niklas S?derlund --- atahpt.c | 2 ++ drkaiser.c | 2 ++ gfxnvidia.c | 2 ++ nic3com.c | 2 ++ nicintel.c | 7 +++---- nicintel_spi.c | 2 ++ nicnatsemi.c | 2 ++ nicrealtek.c | 2 ++ ogp_spi.c | 2 ++ pcidev.c | 6 +++--- satamv.c | 5 ++--- satasii.c | 3 ++- 12 files changed, 26 insertions(+), 11 deletions(-) diff --git a/atahpt.c b/atahpt.c index b692b88..4c1b13e 100644 --- a/atahpt.c +++ b/atahpt.c @@ -71,6 +71,8 @@ int atahpt_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); + if (!io_base_addr) + return 1; /* Enable flash access. */ reg32 = pci_read_long(pcidev_dev, REG_FLASH_ACCESS); diff --git a/drkaiser.c b/drkaiser.c index d4b6120..ffabf9b 100644 --- a/drkaiser.c +++ b/drkaiser.c @@ -71,6 +71,8 @@ int drkaiser_init(void) return 1; addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); + if (!addr) + return 1; /* Write magic register to enable flash write. */ rpci_write_word(pcidev_dev, PCI_MAGIC_DRKAISER_ADDR, diff --git a/gfxnvidia.c b/gfxnvidia.c index 457172d..fe2362a 100644 --- a/gfxnvidia.c +++ b/gfxnvidia.c @@ -95,6 +95,8 @@ int gfxnvidia_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); + if (!io_base_addr) + return 1; io_base_addr += 0x300000; msg_pinfo("Detected NVIDIA I/O base address: 0x%x.\n", io_base_addr); diff --git a/nic3com.c b/nic3com.c index 4df720f..27d9506 100644 --- a/nic3com.c +++ b/nic3com.c @@ -91,6 +91,8 @@ int nic3com_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); + if (!io_base_addr) + return 1; id = pcidev_dev->device_id; diff --git a/nicintel.c b/nicintel.c index f2d4529..7d6fa94 100644 --- a/nicintel.c +++ b/nicintel.c @@ -77,11 +77,10 @@ int nicintel_init(void) if (get_io_perms()) return 1; - /* No need to check for errors, pcidev_init() will not return in case - * of errors. - * FIXME: BAR2 is not available if the device uses the CardBus function. - */ + /* FIXME: BAR2 is not available if the device uses the CardBus function. */ addr = pcidev_init(PCI_BASE_ADDRESS_2, nics_intel); + if (!addr) + return 1; nicintel_bar = physmap("Intel NIC flash", addr, NICINTEL_MEMMAP_SIZE); if (nicintel_bar == ERROR_PTR) diff --git a/nicintel_spi.c b/nicintel_spi.c index 7eb3af3..af7347b 100644 --- a/nicintel_spi.c +++ b/nicintel_spi.c @@ -171,6 +171,8 @@ int nicintel_spi_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); + if (!io_base_addr) + return 1; nicintel_spibar = physmap("Intel Gigabit NIC w/ SPI flash", io_base_addr, 4096); diff --git a/nicnatsemi.c b/nicnatsemi.c index c39637a..d16984d 100644 --- a/nicnatsemi.c +++ b/nicnatsemi.c @@ -63,6 +63,8 @@ int nicnatsemi_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); + if (!io_base_addr) + return 1; if (register_shutdown(nicnatsemi_shutdown, NULL)) return 1; diff --git a/nicrealtek.c b/nicrealtek.c index f808e06..17a3172 100644 --- a/nicrealtek.c +++ b/nicrealtek.c @@ -65,6 +65,8 @@ int nicrealtek_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); + if (!io_base_addr) + return 1; if (register_shutdown(nicrealtek_shutdown, NULL)) return 1; diff --git a/ogp_spi.c b/ogp_spi.c index 8502847..dc62d7d 100644 --- a/ogp_spi.c +++ b/ogp_spi.c @@ -132,6 +132,8 @@ int ogp_spi_init(void) return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); + if (!io_base_addr) + return 1; ogp_spibar = physmap("OGP registers", io_base_addr, 4096); diff --git a/pcidev.c b/pcidev.c index e8b4dc1..c32027c 100644 --- a/pcidev.c +++ b/pcidev.c @@ -207,7 +207,7 @@ uintptr_t pcidev_init(int bar, const struct pcidev_status *devs) if (pcidev_bdf != NULL) { if ((msg = pci_filter_parse_slot(&filter, pcidev_bdf))) { msg_perr("Error: %s\n", msg); - exit(1); + return 0; } } free(pcidev_bdf); @@ -228,13 +228,13 @@ uintptr_t pcidev_init(int bar, const struct pcidev_status *devs) /* Only continue if exactly one supported PCI dev has been found. */ if (found == 0) { msg_perr("Error: No supported PCI device found.\n"); - exit(1); + return 0; } else if (found > 1) { msg_perr("Error: Multiple supported PCI devices found. " "Use 'flashrom -p xxxx:pci=bb:dd.f' \n" "to explicitly select the card with the given BDF " "(PCI bus, device, function).\n"); - exit(1); + return 0; } return curaddr; diff --git a/satamv.c b/satamv.c index 0b83a14..f23af3b 100644 --- a/satamv.c +++ b/satamv.c @@ -89,10 +89,9 @@ int satamv_init(void) return 1; /* BAR0 has all internal registers memory mapped. */ - /* No need to check for errors, pcidev_init() will not return in case - * of errors. - */ addr = pcidev_init(PCI_BASE_ADDRESS_0, satas_mv); + if (!addr) + return 1; mv_bar = physmap("Marvell 88SX7042 registers", addr, 0x20000); if (mv_bar == ERROR_PTR) diff --git a/satasii.c b/satasii.c index 75378be..ac70129 100644 --- a/satasii.c +++ b/satasii.c @@ -73,7 +73,8 @@ int satasii_init(void) if (get_io_perms()) return 1; - pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); + if (!pcidev_init(PCI_BASE_ADDRESS_0, satas_sii)) + return 1; id = pcidev_dev->device_id; -- 1.7.11.1 From niso at kth.se Sat Jul 7 22:57:20 2012 From: niso at kth.se (=?UTF-8?q?Niklas=20S=C3=B6derlund?=) Date: Sat, 7 Jul 2012 22:57:20 +0200 Subject: [flashrom] [PATCH] remove exit call from get_id_perms Message-ID: <1341694640-18934-1-git-send-email-niso@kth.se> In order to remove the exit call in the get_ip_perm function the function needs to return a value indicating success or failure. This patch adds such return value and make all callers check for it. Signed-off-by: Niklas S?derlund --- atahpt.c | 3 ++- drkaiser.c | 3 ++- gfxnvidia.c | 3 ++- hwaccess.c | 17 +++++++++++------ internal.c | 4 +++- nic3com.c | 3 ++- nicintel.c | 3 ++- nicintel_spi.c | 3 ++- nicnatsemi.c | 3 ++- nicrealtek.c | 3 ++- ogp_spi.c | 3 ++- programmer.h | 2 +- rayer_spi.c | 3 ++- satamv.c | 3 ++- satasii.c | 3 ++- 15 files changed, 39 insertions(+), 20 deletions(-) diff --git a/atahpt.c b/atahpt.c index 4234f6d..b692b88 100644 --- a/atahpt.c +++ b/atahpt.c @@ -67,7 +67,8 @@ int atahpt_init(void) { uint32_t reg32; - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); diff --git a/drkaiser.c b/drkaiser.c index 362db57..d4b6120 100644 --- a/drkaiser.c +++ b/drkaiser.c @@ -67,7 +67,8 @@ int drkaiser_init(void) { uint32_t addr; - get_io_perms(); + if (get_io_perms()) + return 1; addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); diff --git a/gfxnvidia.c b/gfxnvidia.c index b8750b3..457172d 100644 --- a/gfxnvidia.c +++ b/gfxnvidia.c @@ -91,7 +91,8 @@ int gfxnvidia_init(void) { uint32_t reg32; - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); diff --git a/hwaccess.c b/hwaccess.c index 571edd7..b54fbdf 100644 --- a/hwaccess.c +++ b/hwaccess.c @@ -44,11 +44,11 @@ static inline void sync_primitive(void) int io_fd; #endif -void get_io_perms(void) +int get_io_perms(void) { #if defined(__DJGPP__) || defined(__LIBPAYLOAD__) /* We have full permissions by default. */ - return; + return 0; #else #if defined (__sun) && (defined(__i386) || defined(__amd64)) if (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) != 0) { @@ -64,8 +64,10 @@ void get_io_perms(void) "and reboot, or reboot into \n"); msg_perr("single user mode.\n"); #endif - exit(1); + return 1; } + + return 0; #endif } @@ -88,8 +90,9 @@ static inline void sync_primitive(void) } /* PCI port I/O is not yet implemented on PowerPC. */ -void get_io_perms(void) +int get_io_perms(void) { + return 0; } /* PCI port I/O is not yet implemented on PowerPC. */ @@ -107,8 +110,9 @@ static inline void sync_primitive(void) } /* PCI port I/O is not yet implemented on MIPS. */ -void get_io_perms(void) +int get_io_perms(void) { + return 0; } /* PCI port I/O is not yet implemented on MIPS. */ @@ -122,8 +126,9 @@ static inline void sync_primitive(void) { } -void get_io_perms(void) +int get_io_perms(void) { + return 0; } void release_io_perms(void) diff --git a/internal.c b/internal.c index 75e526b..ec7cba1 100644 --- a/internal.c +++ b/internal.c @@ -225,7 +225,9 @@ int internal_init(void) } free(arg); - get_io_perms(); + if (get_io_perms()) + return 1; + if (register_shutdown(internal_shutdown, NULL)) return 1; diff --git a/nic3com.c b/nic3com.c index 473c7b1..4df720f 100644 --- a/nic3com.c +++ b/nic3com.c @@ -87,7 +87,8 @@ static int nic3com_shutdown(void *data) int nic3com_init(void) { - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); diff --git a/nicintel.c b/nicintel.c index 0415f46..f2d4529 100644 --- a/nicintel.c +++ b/nicintel.c @@ -74,7 +74,8 @@ int nicintel_init(void) /* Needed only for PCI accesses on some platforms. * FIXME: Refactor that into get_mem_perms/get_io_perms/get_pci_perms? */ - get_io_perms(); + if (get_io_perms()) + return 1; /* No need to check for errors, pcidev_init() will not return in case * of errors. diff --git a/nicintel_spi.c b/nicintel_spi.c index 4ff8554..7eb3af3 100644 --- a/nicintel_spi.c +++ b/nicintel_spi.c @@ -167,7 +167,8 @@ int nicintel_spi_init(void) { uint32_t tmp; - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); diff --git a/nicnatsemi.c b/nicnatsemi.c index eb2a7f8..c39637a 100644 --- a/nicnatsemi.c +++ b/nicnatsemi.c @@ -59,7 +59,8 @@ static int nicnatsemi_shutdown(void *data) int nicnatsemi_init(void) { - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); diff --git a/nicrealtek.c b/nicrealtek.c index 32aa434..f808e06 100644 --- a/nicrealtek.c +++ b/nicrealtek.c @@ -61,7 +61,8 @@ static int nicrealtek_shutdown(void *data) int nicrealtek_init(void) { - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); diff --git a/ogp_spi.c b/ogp_spi.c index 812420c..8502847 100644 --- a/ogp_spi.c +++ b/ogp_spi.c @@ -128,7 +128,8 @@ int ogp_spi_init(void) return 1; } - get_io_perms(); + if (get_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); diff --git a/programmer.h b/programmer.h index d60fc5d..47be768 100644 --- a/programmer.h +++ b/programmer.h @@ -300,7 +300,7 @@ struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device); struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, uint16_t card_vendor, uint16_t card_device); #endif -void get_io_perms(void); +int get_io_perms(void); void release_io_perms(void); #if CONFIG_INTERNAL == 1 extern int is_laptop; diff --git a/rayer_spi.c b/rayer_spi.c index 0011bc0..62f0e12 100644 --- a/rayer_spi.c +++ b/rayer_spi.c @@ -167,7 +167,8 @@ int rayer_spi_init(void) rayer_miso_bit = 4; } - get_io_perms(); + if (get_io_perms()) + return 1; /* Get the initial value before writing to any line. */ lpt_outbyte = INB(lpt_iobase); diff --git a/satamv.c b/satamv.c index e39385b..0b83a14 100644 --- a/satamv.c +++ b/satamv.c @@ -85,7 +85,8 @@ int satamv_init(void) uintptr_t addr; uint32_t tmp; - get_io_perms(); + if (get_io_perms()) + return 1; /* BAR0 has all internal registers memory mapped. */ /* No need to check for errors, pcidev_init() will not return in case diff --git a/satasii.c b/satasii.c index 387c605..75378be 100644 --- a/satasii.c +++ b/satasii.c @@ -70,7 +70,8 @@ int satasii_init(void) uint32_t addr; uint16_t reg_offset; - get_io_perms(); + if (get_io_perms()) + return 1; pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); -- 1.7.11.1 From tomasz.ostaszewski at interia.pl Tue Jul 10 19:24:21 2012 From: tomasz.ostaszewski at interia.pl (Tomasz Ostaszewski) Date: Tue, 10 Jul 2012 19:24:21 +0200 Subject: [flashrom] Flashrom on stock X60(s) Message-ID: Hi all. I want to flash on of my X60s with a coreboot using flashrom. I did search the flashrom list archive, and I found the "FAILED: MX25L1605 on Thinkpad X60s" (http://bit.ly/NetLop) and related "Lenovo T60 Type 8743-GZU - RAM Support? 3Gb or 4Gb" (http://bit.ly/Mfhi1W) threads. Despite what the heading says, those threads do treat about a successful flashing of a stock X60s with flahshrom utility. There is is almost a complete descripton of what to do, and what to use. However, for me there's one piece of the puzzle missing - the patch. Peter writes: "[..]You need the flashrom source, a small patch, and my bucts utility from http://git.stuge.se/?p=bucts.git" The flashrom is readily available from SVN, the bucts from git, but what are the patches and where to get them from? And, if worst comes to the worst and I brick my X60s, would I be able to resurrect it using a programmer and a SOIC-8 clip (http://bit.ly/Nj8Sdx)? Or rather (de)soldering would be necessary? Best regards, t. From Jason_Vannest at abercrombie.com Mon Jul 9 18:29:16 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Mon, 9 Jul 2012 12:29:16 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support Message-ID: After a brief email exchange with Stefan he suggested I post my request to this mailing list. So here I am... We tested flashrom on a number of our POS systems last year, (it was not the most current release if flashrom at the time, whatever SUSE have bundled in their RPMs) and it didn't seem to support any of the BIOS flash chips in our POS systems. However, after emailing Stefan I went back and complied and loaded up v0.9.5.2-r1515 and it looks like you guys have been very busy! There seems to only be one system that we use that is not auto detecting the flash chip. It is the 4800-783 mentioned in the subject of my email. We have a large number of IBM 4800-783 SurePOS 700 systems spread across several countries and it would be nice to have a way to remotely update the BIOS on them. I've attached the output from 'flashrom -V', 'lspci -nnvvvxxx', and 'superiotool -deV'. Stefan said this would be a good starting point for anyone that might be interested in taking a look. Please let me know if you think this could be easily added to flashrom. Thanks. Jason Vannest Information Technology - Store Systems Abercrombie & Fitch ======================= flashrom -V ======================= flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built with libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 1785M loops per second, 10 myus = 11 us, 100 myus = 100 us, 1000 myus = 995 us, 10000 myus = 9976 us, 4 myus = 5 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "IBM CORPORATION" DMI string system-product-name: "4800783" DMI string system-version: "4800783" DMI string baseboard-manufacturer: "IBM CORPORATION" DMI string baseboard-product-name: "P4M900/VT8251/DME1737" DMI string baseboard-version: "" DMI string chassis-type: "" DMI chassis-type is not specific enough. ======================= superiotool -deV ======================= superiotool r Probing for ALi Super I/O at 0x3f0... Failed. Returned data: id=0x0000, rev=0x00 Probing for ALi Super I/O at 0x370... Failed. Returned data: id=0xffff, rev=0xff Probing for Fintek Super I/O at 0x2e... Failed. Returned data: vid=0xffff, id=0xffff Probing for Fintek Super I/O at 0x4e... Failed. Returned data: vid=0xffff, id=0xffff Probing for Fintek Super I/O at 0x2e... Failed. Returned data: vid=0xffff, id=0xffff Probing for Fintek Super I/O at 0x4e... Failed. Returned data: vid=0xffff, id=0xffff Probing for ITE Super I/O (init=standard) at 0x25e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8502e) at 0x25e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8761e) at 0x25e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8228e) at 0x25e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=0x87,0x87) at 0x25e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=standard) at 0x2e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8502e) at 0x2e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8761e) at 0x2e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8228e) at 0x2e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=0x87,0x87) at 0x2e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=standard) at 0x4e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8502e) at 0x4e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8761e) at 0x4e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=it8228e) at 0x4e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=0x87,0x87) at 0x4e... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=legacy/it8661f) at 0x370... Failed. Returned data: id=0xffff, rev=0xf Probing for ITE Super I/O (init=legacy/it8671f) at 0x370... Failed. Returned data: id=0xffff, rev=0xf Probing for NSC Super I/O at 0x2e... Failed. Returned data: port=0xff, port+1=0xff Probing for NSC Super I/O at 0x4e... Failed. Returned data: port=0xff, port+1=0xff Probing for NSC Super I/O at 0x15c... Failed. Returned data: port=0xff, port+1=0xff Probing for NSC Super I/O at 0x164e... Failed. Returned data: port=0xff, port+1=0xff Probing for Nuvoton Super I/O at 0x164e... Failed. Returned data: chip_id=0xffff Probing for Nuvoton Super I/O (sid=0xfc) at 0x164e... Failed. Returned data: sid=0xff, id=0xffff, rev=0x00 Probing for Nuvoton Super I/O at 0x2e... Failed. Returned data: chip_id=0xffff Probing for Nuvoton Super I/O (sid=0xfc) at 0x2e... Failed. Returned data: sid=0xff, id=0xffff, rev=0x00 Probing for Nuvoton Super I/O at 0x4e... Failed. Returned data: chip_id=0xffff Probing for Nuvoton Super I/O (sid=0xfc) at 0x4e... Failed. Returned data: sid=0xff, id=0xffff, rev=0x00 Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x2e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x2e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x4e... Found SMSC DME1737 (id=0x78, rev=0x01) at 0x4e Register dump: idx 03 20 21 22 23 24 26 27 28 2a 2b 2c 2d 2e 2f val 00 78 01 31 00 44 4e 00 00 00 00 00 00 00 00 def RR 77 NA 00 RR 44 MM MM RR NA NA NA NA NA NA LDN 0x00 (Floppy) idx 30 60 61 70 74 f0 f1 f2 f4 f5 val 01 03 f0 06 02 0e 00 ff 00 00 def 00 03 f0 06 02 0e 00 ff 00 00 LDN 0x03 (Parallel port) idx 30 60 61 70 74 f0 f1 val 00 00 00 00 04 38 00 def 00 00 00 00 04 3c 00 LDN 0x04 (COM1) idx 30 60 61 70 f0 val 01 03 f8 04 00 def 00 00 00 00 00 LDN 0x05 (COM2) idx 30 60 61 70 f0 f1 f2 val 01 02 f8 03 00 02 03 def 00 00 00 00 00 02 03 LDN 0x07 (Keyboard) idx 30 70 72 f0 val 01 01 00 00 def 00 00 00 00 LDN 0x0a (Runtime registers) idx 30 60 61 62 63 f0 f1 f2 val 01 08 00 00 00 00 00 04 def 00 00 00 00 00 NA RR 04 No extra registers known for this chip. Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x4e... Failed. Returned data: id=0x00, rev=0x00 Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x162e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x162e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x164e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x164e... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x3f0... Failed. Returned data: id=0x00, rev=0x00 Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x3f0... Failed. Returned data: id=0x00, rev=0x00 Probing for SMSC Super I/O (idregs=0x20/0x21) at 0x370... Failed. Returned data: id=0xff, rev=0xff Probing for SMSC Super I/O (idregs=0x0d/0x0e) at 0x370... Failed. Returned data: id=0xff, rev=0xff Probing for Winbond Super I/O (init=0x88) at 0x2e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x89) at 0x2e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x86,0x86) at 0x2e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x87,0x87) at 0x2e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x88) at 0x4e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x89) at 0x4e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x86,0x86) at 0x4e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x87,0x87) at 0x4e... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x88) at 0x3f0... Failed. Returned data: id/oldid=0x00/0x00, rev=0x00 Probing for Winbond Super I/O (init=0x89) at 0x3f0... Failed. Returned data: id/oldid=0x00/0x00, rev=0x00 Probing for Winbond Super I/O (init=0x86,0x86) at 0x3f0... Failed. Returned data: id/oldid=0x00/0x00, rev=0x00 Probing for Winbond Super I/O (init=0x87,0x87) at 0x3f0... Failed. Returned data: id/oldid=0x00/0x00, rev=0x00 Probing for Winbond Super I/O (init=0x88) at 0x370... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x89) at 0x370... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x86,0x86) at 0x370... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x87,0x87) at 0x370... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x88) at 0x250... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x89) at 0x250... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x86,0x86) at 0x250... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for Winbond Super I/O (init=0x87,0x87) at 0x250... Failed. Returned data: id/oldid=0xff/0x0f, rev=0xff Probing for VIA Super I/O at 0x3f0... PCI device 1106:0686 not found. Probing for Server Engines Super I/O at 0x2e... Failed. Returned data: id=0xffff, rev=0xff ======================= lspci -nnvvvxxx ======================= 00:00.0 Host bridge [0600]: VIA Technologies, Inc. CN896/VN896/P4M900 Host Bridge [1106:0364] Subsystem: VIA Technologies, Inc. CN896/VN896/P4M900 Host Bridge [1106:0364] Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [70] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Kernel modules: shpchp 00: 06 11 98 b1 07 00 30 02 00 00 04 06 10 00 01 00 10: 00 00 00 00 00 00 00 00 00 01 01 00 a0 a0 20 02 20: 00 dd f0 de 00 c0 f0 cf 00 00 00 00 00 00 00 00 30: 00 00 00 00 70 00 00 00 00 00 00 00 00 00 0c 00 40: 93 c3 e2 44 30 72 00 00 00 00 00 00 00 00 00 00 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70: 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 80: 0e 70 35 00 07 02 00 1f 00 00 00 00 28 00 00 00 90: 80 00 00 00 00 08 01 00 00 00 00 00 00 00 00 00 a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b0: 80 63 08 00 00 00 00 00 00 00 1f c4 00 04 00 00 c0: 08 00 0b ff 00 00 00 00 00 00 00 00 00 00 00 00 d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:02.0 PCI bridge [0604]: VIA Technologies, Inc. CN896/VN896/P4M900 PCI to PCI Bridge Controller [1106:a364] (rev 80) (prog-if 00 [Normal decode]) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us ExtTag- RBE+ FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us ClockPM- Suprise+ LLActRep+ BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surpise+ Slot # 0, PowerLimit 150.000000; Interlock- NoCompl- SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg- Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock- SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet- Interlock- Changed: MRL- PresDet- LinkState- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [68] Power Management version 2 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [70] Message Signalled Interrupts: Mask+ 64bit+ Count=1/1 Enable- Address: 0000000000000000 Data: 0000 Masking: 00000001 Pending: 00000000 Capabilities: [88] HyperTransport: MSI Mapping Enable- Fixed+ Capabilities: [98] Subsystem: VIA Technologies, Inc. Device [1106:c323] Capabilities: [100] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSVoil- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+ AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Capabilities: [140] Virtual Channel Capabilities: [180] Root Complex Link Kernel driver in use: pcieport Kernel modules: shpchp 00: 06 11 64 a3 07 00 10 00 80 00 04 06 10 00 01 00 10: 00 00 00 00 00 00 00 00 00 02 02 00 90 90 00 00 20: c0 df c0 df b1 df b1 df 00 00 00 00 00 00 00 00 30: 00 00 00 00 40 00 00 00 00 00 00 00 05 01 04 00 40: 10 68 41 01 01 80 00 00 30 08 10 00 01 3d 18 00 50: 00 00 01 10 60 4b 00 00 00 00 00 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 01 70 22 c8 00 00 00 00 70: 05 88 80 01 00 00 00 00 00 00 00 00 00 00 00 00 80: 01 00 00 00 00 00 00 00 08 98 02 a8 00 00 00 00 90: 00 00 00 00 00 00 00 00 0d 00 00 00 06 11 23 c3 a0: 10 14 30 fc 7e ff 7f ac 00 00 00 00 00 00 00 00 b0: 12 1b 41 81 00 00 21 00 00 00 00 00 00 00 00 00 c0: 03 00 25 00 44 44 44 44 44 44 44 44 00 00 00 00 d0: 50 20 00 00 00 00 00 00 00 00 00 00 08 00 02 a8 e0: 0c 08 24 95 08 00 00 00 04 a5 48 00 00 00 00 00 f0: 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00:03.0 PCI bridge [0604]: VIA Technologies, Inc. CN896/VN896/P4M900 PCI to PCI Bridge Controller [1106:c364] (rev 80) (prog-if 00 [Normal decode]) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us ExtTag- RBE+ FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 128 bytes, MaxReadReq 128 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <1us ClockPM- Suprise+ LLActRep+ BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+ BWMgmt- ABWMgmt- SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surpise+ Slot # 0, PowerLimit 150.000000; Interlock- NoCompl- SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg- Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock- SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock- Changed: MRL- PresDet+ LinkState- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [68] Power Management version 2 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [70] Message Signalled Interrupts: Mask+ 64bit+ Count=1/1 Enable- Address: 0000000000000000 Data: 0000 Masking: 00000000 Pending: 00000000 Capabilities: [88] HyperTransport: MSI Mapping Enable- Fixed+ Capabilities: [98] Subsystem: VIA Technologies, Inc. Device [1106:c323] Capabilities: [100] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSVoil- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+ AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Capabilities: [140] Virtual Channel Capabilities: [180] Root Complex Link Kernel driver in use: pcieport Kernel modules: shpchp 00: 06 11 64 c3 07 00 10 00 80 00 04 06 10 00 81 00 10: 00 00 00 00 00 00 00 00 00 03 03 00 b0 b0 00 00 20: e0 df e0 df d1 df d1 df 00 00 00 00 00 00 00 00 30: 00 00 00 00 40 00 00 00 00 00 00 00 05 01 04 00 40: 10 68 41 01 01 80 00 00 10 08 10 00 11 3c 18 01 50: 40 00 11 30 60 4b 00 00 00 00 48 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 01 70 22 c8 00 00 00 00 70: 05 88 80 01 00 00 00 00 00 00 00 00 00 00 00 00 80: 00 00 00 00 00 00 00 00 08 98 02 a8 00 00 00 00 90: 00 00 00 00 00 00 00 00 0d 00 00 00 06 11 23 c3 a0: 10 14 70 7c 5c ff 7f ac 00 00 00 00 00 00 00 00 b0: 3b 58 40 81 00 00 01 00 00 00 00 00 00 00 00 00 c0: 03 00 27 8a 44 44 00 00 00 00 00 00 00 00 00 00 d0: 50 20 00 00 02 00 00 00 00 00 00 00 08 00 02 a8 e0: 00 01 04 95 48 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00:0f.0 IDE interface [0101]: VIA Technologies, Inc. VT8251 Serial ATA Controller [1106:5287] (rev 20) (prog-if 8f [Master SecP SecO PriP PriO]) Subsystem: VIA Technologies, Inc. Device [1106:3349] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- 00: 06 11 7a 28 07 00 00 20 00 01 04 06 00 00 01 00 10: 00 00 00 00 00 00 00 00 00 04 04 00 70 80 00 02 20: a0 df a0 df 91 df 91 df 00 00 00 00 00 00 00 00 30: 00 00 00 00 60 00 00 00 00 00 00 00 00 00 04 00 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60: 08 70 02 a8 00 00 00 00 00 00 00 00 00 00 00 00 70: 0d 00 00 00 06 11 7a 28 00 00 00 00 00 00 00 00 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01:00.0 VGA compatible controller [0300]: VIA Technologies, Inc. CN896/VN896/P4M900 [Chrome 9 HC] [1106:3371] (rev 01) (prog-if 00 [VGA controller]) Subsystem: VIA Technologies, Inc. CN896/VN896/P4M900 [Chrome 9 HC] [1106:3371] Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- [disabled] Capabilities: [48] Power Management version 3 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=1 PME- Capabilities: [50] Vital Product Data Capabilities: [58] Vendor Specific Information Capabilities: [e8] Message Signalled Interrupts: Mask- 64bit+ Count=1/1 Enable- Address: ffffdf77fffffffc Data: dfcc Capabilities: [d0] Express (v1) Endpoint, MSI 00 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 128 bytes, MaxReadReq 4096 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s, Latency L0 <4us, L1 <64us ClockPM- Suprise- LLActRep- BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- Capabilities: [100] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSVoil- CESta: RxErr+ BadTLP- BadDLLP+ Rollover- Timeout- NonFatalErr+ CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+ AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn- Capabilities: [13c] Virtual Channel Capabilities: [160] Device Serial Number 47-53-3f-fe-ff-64-1a-00 Capabilities: [16c] Power Budgeting Kernel driver in use: tg3 Kernel modules: tg3 00: e4 14 7b 16 06 00 10 00 02 00 00 02 10 00 00 00 10: 04 00 ef df 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 14 10 83 03 30: 00 00 ff ff 48 00 00 00 00 00 00 00 05 01 00 00 40: 00 00 00 00 00 00 00 00 01 50 03 c0 08 20 00 64 50: 03 58 f4 00 ff ff ff df 09 e8 78 00 51 3c fa 2f 60: 00 00 00 00 00 00 00 00 98 02 02 a0 00 00 18 76 70: f2 10 00 00 c0 00 00 00 04 58 00 00 00 00 00 00 80: 00 00 00 02 00 00 00 00 34 00 13 04 82 70 08 fc 90: 19 ba 00 01 01 00 00 00 00 00 00 00 4a 01 00 00 a0: 00 00 00 00 82 00 00 00 00 00 00 00 cc 00 00 00 b0: 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 c0: 00 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 d0: 10 00 01 00 a0 8f 58 02 00 50 10 00 11 64 03 00 e0: 40 01 11 10 00 00 00 00 05 d0 80 00 fc ff ff ff f0: 77 df ff ff cc df 00 00 00 00 00 00 00 00 00 00 04:0b.0 System peripheral [0880]: IBM Device [1014:0295] (rev 10) Subsystem: IBM Device [1014:0296] Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 unlimited ExtTag- RBE- FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <128ns, L1 <1us ClockPM- Suprise- LLActRep- BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt- SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surpise+ Slot # 6, PowerLimit 25.000000; Interlock- NoCompl- SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg- Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock- SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock- Changed: MRL- PresDet+ LinkState- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [68] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [70] Message Signalled Interrupts: Mask- 64bit+ Count=1/1 Enable- Address: 0000000000000000 Data: 0000 Capabilities: [88] HyperTransport: MSI Mapping Enable- Fixed+ Capabilities: [90] Subsystem: VIA Technologies, Inc. VT8251 PCIE Root Port [1106:287c] Capabilities: [100] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UEMsk: DLP+ SDES- TLP+ FCP+ CmpltTO+ CmpltAbrt+ UnxCmplt+ RxOF+ MalfTLP+ ECRC+ UnsupReq+ ACSVoil- UESvrt: DLP+ SDES- TLP+ FCP+ CmpltTO+ CmpltAbrt+ UnxCmplt+ RxOF+ MalfTLP+ ECRC+ UnsupReq+ ACSVoil- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CESta: RxErr+ BadTLP+ BadDLLP+ Rollover+ Timeout+ NonFatalErr- AERCap: First Error Pointer: 00, GenCap- CGenEn+ ChkCap- ChkEn+ Capabilities: [140] Virtual Channel Capabilities: [180] Root Complex Link Kernel driver in use: pcieport Kernel modules: shpchp 00: 06 11 7c 28 07 00 10 00 00 00 04 06 00 00 81 00 10: 00 00 00 00 00 00 00 00 80 81 81 00 60 60 00 00 20: b0 bf b0 bf e0 bf e0 bf 00 00 00 00 00 00 00 00 30: 00 00 00 00 40 00 00 00 00 00 00 00 0b 01 04 00 40: 10 68 41 01 01 0e 00 00 20 04 10 00 11 1c 00 01 50: 00 00 01 00 e0 0c 30 00 00 00 48 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 01 70 02 c8 00 00 00 00 70: 05 88 80 00 00 00 00 00 00 00 00 00 00 00 00 00 80: 00 00 00 00 00 00 00 00 08 90 02 a8 00 00 00 00 90: 0d 00 00 00 06 11 7c 28 00 00 00 00 00 00 00 00 a0: 01 14 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 b0: 3b 59 40 81 00 00 03 00 00 00 00 00 00 00 00 00 c0: 03 40 01 00 44 44 00 00 00 00 00 00 00 00 00 00 d0: 50 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 0c 0d 94 48 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 80:00.1 PCI bridge [0604]: VIA Technologies, Inc. VT8251 PCIE Root Port [1106:287d] (prog-if 00 [Normal decode]) Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- TAbort- Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn- Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 unlimited ExtTag- RBE- FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- LnkCap: Port #2, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <128ns, L1 <1us ClockPM- Suprise- LLActRep- BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt- SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surpise+ Slot # 7, PowerLimit 25.000000; Interlock- NoCompl- SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg- Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock- SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock- Changed: MRL- PresDet+ LinkState- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [68] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=0 PME- Capabilities: [70] Message Signalled Interrupts: Mask- 64bit+ Count=1/1 Enable- Address: 0000000000000000 Data: 0000 Capabilities: [88] HyperTransport: MSI Mapping Enable- Fixed+ Capabilities: [90] Subsystem: VIA Technologies, Inc. VT8251 PCIE Root Port [1106:287d] Capabilities: [100] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSVoil- UEMsk: DLP+ SDES- TLP+ FCP+ CmpltTO+ CmpltAbrt+ UnxCmplt+ RxOF+ MalfTLP+ ECRC+ UnsupReq+ ACSVoil- UESvrt: DLP+ SDES- TLP+ FCP+ CmpltTO+ CmpltAbrt+ UnxCmplt+ RxOF+ MalfTLP+ ECRC+ UnsupReq+ ACSVoil- CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CESta: RxErr+ BadTLP+ BadDLLP+ Rollover+ Timeout+ NonFatalErr- AERCap: First Error Pointer: 00, GenCap- CGenEn+ ChkCap- ChkEn+ Capabilities: [140] Virtual Channel Capabilities: [180] Root Complex Link Kernel driver in use: pcieport Kernel modules: shpchp 00: 06 11 7d 28 07 00 10 00 00 00 04 06 00 00 81 00 10: 00 00 00 00 00 00 00 00 80 82 82 00 50 50 00 00 20: d0 bf d0 bf c0 bf c0 bf 00 00 00 00 00 00 00 00 30: 00 00 00 00 40 00 00 00 00 00 00 00 0b 03 04 00 40: 10 68 41 01 01 0e 00 00 20 00 10 00 11 1c 00 02 50: 00 00 01 00 e0 0c 38 00 00 00 48 00 00 00 00 00 60: 00 00 00 00 00 00 00 00 01 70 02 c8 00 00 00 00 70: 05 88 80 00 00 00 00 00 00 00 00 00 00 00 00 00 80: 00 00 00 00 00 00 00 00 08 90 02 a8 00 00 00 00 90: 0d 00 00 00 06 11 7d 28 00 00 00 00 00 00 00 00 a0: 01 14 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 b0: 3b 59 40 81 00 00 03 00 00 00 00 00 00 00 00 00 c0: 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 d0: 50 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 0c 00 02 00 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80:01.0 Audio device [0403]: VIA Technologies, Inc. VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) [1106:3288] Subsystem: Realtek Semiconductor Co., Ltd. Device [10ec:0262] Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- Capabilities: [130] Root Complex Link Kernel driver in use: HDA Intel Kernel modules: snd-hda-intel 00: 06 11 88 32 06 00 10 00 00 00 03 04 10 00 00 00 10: 00 c0 ff bf 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 ec 10 62 02 30: 00 00 00 00 50 00 00 00 00 00 00 00 0a 01 00 00 40: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50: 01 60 42 c8 00 00 00 00 00 00 00 00 00 00 00 00 60: 05 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70: 10 00 91 00 00 00 00 00 00 00 30 00 00 00 00 00 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -------------- next part -------------- An HTML attachment was scrubbed... URL: From roysjosh at gmail.com Tue Jul 10 20:26:36 2012 From: roysjosh at gmail.com (Joshua Roys) Date: Tue, 10 Jul 2012 14:26:36 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: Message-ID: <4FFC73DC.9010007@gmail.com> On 07/09/2012 12:29 PM, Jason_Vannest at abercrombie.com wrote: > ======================= > flashrom -V > ======================= > flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built > with libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], > little endian > flashrom is free software, get the source code at > http://www.flashrom.org > > Calibrating delay loop... OS timer resolution is 1 usecs, 1785M loops > per second, 10 myus = 11 us, 100 myus = 100 us, 1000 myus = 995 us, > 10000 myus = 9976 us, 4 myus = 5 us, OK. > Initializing internal programmer > No coreboot table found. > DMI string system-manufacturer: "IBM CORPORATION" > DMI string system-product-name: "4800783" > DMI string system-version: "4800783" > DMI string baseboard-manufacturer: "IBM CORPORATION" > DMI string baseboard-product-name: "P4M900/VT8251/DME1737" > DMI string baseboard-version: "" > DMI string chassis-type: "" > DMI chassis-type is not specific enough. Hello Jason, Can you please add the following to the `flashrom -V` command and re-run it? -p internal:laptop=this_is_not_a_laptop Thanks, Josh From Jason_Vannest at abercrombie.com Tue Jul 10 22:26:22 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Tue, 10 Jul 2012 16:26:22 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <4FFC73DC.9010007@gmail.com> References: <4FFC73DC.9010007@gmail.com> Message-ID: Output from "./flashrom -V -p internal:laptop=this_is_not_a_laptop " flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built with libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 1774M loops per second, 10 myus = 10 us, 100 myus = 102 us, 1000 myus = 1009 us, 10000 myus = 9982 us, 4 myus = 5 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "IBM CORPORATION" DMI string system-product-name: "4800783" DMI string system-version: "4800783" DMI string baseboard-manufacturer: "IBM CORPORATION" DMI string baseboard-product-name: "P4M900/VT8251/DME1737" DMI string baseboard-version: "" DMI string chassis-type: "" DMI chassis-type is not specific enough. The following protocols are supported: Non-SPI. Probing for AMD Am29F010A/B, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F016D, 2048 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F080B, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BB, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BT, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BT, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BB, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BT, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV081B, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C512, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C010A, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49BV512, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49F020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49F002(N), 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49F002(N)T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Catalyst CAT28F512, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for Bright BM29F040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for EMST F49B002UA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F010, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004BC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004TC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F400BC, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for Fujitsu MBM29F400TC, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for Hyundai HY29F002T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Hyundai HY29F002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Hyundai HY29F040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F001BN/BX-B, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F001BN/BX-T, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F002BC/BL/BV/BX-T, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F008S3/S5/SC, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-T, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-T, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001B, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001T, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29LV040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51000B, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51000T, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51400B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51400T, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29LC51000, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29LC51001, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29LC51002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm29F002T, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm29F002B, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV010, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LH28F008BJT-BTLZ1, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST28SF040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29EE010, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29LE010, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29EE020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29LE020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39SF512, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for SST SST39SF010A, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39SF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39SF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39VF512, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for SST SST39VF010, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39VF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39VF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST39VF080, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F002T/NT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F400BB, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for ST M29F400BT, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for ST M29W010B, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W512B, 64 kB: probe_jedec_common: id1 0xea, id2 0x30, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51001B, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51001T, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51002T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51004B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51004T, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {S,V}29C31004B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {S,V}29C31004T, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for TI TMS29F002RB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for TI TMS29F002RT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012-old, 128 kB: Old Winbond W29* probe method disabled because the probing sequence puts the AMIC A49LF040A in a funky state. Use 'flashrom -c W29C010(M)/W29C011A/W29EE011/W29EE012-old' if you have a board with such a chip. Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012, 128 kB: probe_jedec_common: id1 0x00, id2 0x10, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W29C020(C)/W29C022, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W29C040/P, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39L040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49F002U/N, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49F020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically. Jason Vannest Information Technology - Store Systems Abercrombie & Fitch 614-283-6363 (desk) From: Joshua Roys To: Jason_Vannest at abercrombie.com, Cc: flashrom at flashrom.org Date: 07/10/2012 02:26 PM Subject: Re: [flashrom] IBM SurePOS 700 4800-783 support On 07/09/2012 12:29 PM, Jason_Vannest at abercrombie.com wrote: > ======================= > flashrom -V > ======================= > flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built > with libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], > little endian > flashrom is free software, get the source code at > http://www.flashrom.org > > Calibrating delay loop... OS timer resolution is 1 usecs, 1785M loops > per second, 10 myus = 11 us, 100 myus = 100 us, 1000 myus = 995 us, > 10000 myus = 9976 us, 4 myus = 5 us, OK. > Initializing internal programmer > No coreboot table found. > DMI string system-manufacturer: "IBM CORPORATION" > DMI string system-product-name: "4800783" > DMI string system-version: "4800783" > DMI string baseboard-manufacturer: "IBM CORPORATION" > DMI string baseboard-product-name: "P4M900/VT8251/DME1737" > DMI string baseboard-version: "" > DMI string chassis-type: "" > DMI chassis-type is not specific enough. Hello Jason, Can you please add the following to the `flashrom -V` command and re-run it? -p internal:laptop=this_is_not_a_laptop Thanks, Josh -------------- next part -------------- An HTML attachment was scrubbed... URL: From vidwer at gmail.com Tue Jul 10 22:52:55 2012 From: vidwer at gmail.com (Idwer Vollering) Date: Tue, 10 Jul 2012 22:52:55 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: <4FFC73DC.9010007@gmail.com> Message-ID: 2012/7/10 > Output from "./flashrom -V -p internal:laptop=this_is_not_a_laptop " > > flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built with > libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], little > endian > flashrom is free software, get the source code at http://www.flashrom.org > > Calibrating delay loop... OS timer resolution is 1 usecs, 1774M loops per > second, 10 myus = 10 us, 100 myus = 102 us, 1000 myus = 1009 us, 10000 myus > = 9982 us, 4 myus = 5 us, OK. > Initializing internal programmer > No coreboot table found. > DMI string system-manufacturer: "IBM CORPORATION" > DMI string system-product-name: "4800783" > DMI string system-version: "4800783" > DMI string baseboard-manufacturer: "IBM CORPORATION" > DMI string baseboard-product-name: "P4M900/VT8251/DME1737" > DMI string baseboard-version: "" > DMI string chassis-type: "" > DMI chassis-type is not specific enough. > The following protocols are supported: Non-SPI. So the chipset in your POS machine is, at the moment, not recognized by flashrom. > > No EEPROM/flash device found. > Note: flashrom can never write if the flash chip isn't found automatically. > According to this IBM web page [1] there is a "Service Processor Renesas H8S2116" [2] present. [1] http://www-01.ibm.com/support/docview.wss?uid=pos1R1003969 [2] http://documentation.renesas.com/doc/products/mpumcu/rej09b0255_h8s2116hm.pdf -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jason_Vannest at abercrombie.com Wed Jul 11 00:11:05 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Tue, 10 Jul 2012 18:11:05 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: <4FFC73DC.9010007@gmail.com> Message-ID: Sorry if this is a flashrom noob question. But I want to make sure that I understand correctly what your saying. It sounds like this Renesas H8S2116 controller is something that nobody on the flashrom dev team has worked on yet? >From reading your very fine and very detailed web site (congrats on that BTW), specifically the section on adding support for laptops " http://www.flashrom.org/Laptops" it sounds like a little bit of a challenge to add support for a new chipset like this? Is that a correct assumption on my part? We've spoken with IBM and of course all of their current stuff is DOS based / bootable from USB key. Of course for a fee they would be willing to help us out and develop a Linux based program to update the BIOS..... Does anyone have thoughts on how much time and effort it would take to do this? IBM is hardly ever the cheapest solution, so I'm guessing we would more likely find a more reasonable price from the Open Source community.... Thanks again for your assistance. Jason Vannest Information Technology - Store Systems Abercrombie & Fitch 614-283-6363 (desk) From: Idwer Vollering To: Jason_Vannest at abercrombie.com, Cc: flashrom at flashrom.org Date: 07/10/2012 04:52 PM Subject: Re: [flashrom] IBM SurePOS 700 4800-783 support 2012/7/10 Output from "./flashrom -V -p internal:laptop=this_is_not_a_laptop " flashrom v0.9.5.2-r1515 on Linux 2.6.32.12-0.7-default (i686), built with libpci 3.1.7, GCC 4.5.1 20101208 [gcc-4_5-branch revision 167585], little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 1774M loops per second, 10 myus = 10 us, 100 myus = 102 us, 1000 myus = 1009 us, 10000 myus = 9982 us, 4 myus = 5 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "IBM CORPORATION" DMI string system-product-name: "4800783" DMI string system-version: "4800783" DMI string baseboard-manufacturer: "IBM CORPORATION" DMI string baseboard-product-name: "P4M900/VT8251/DME1737" DMI string baseboard-version: "" DMI string chassis-type: "" DMI chassis-type is not specific enough. The following protocols are supported: Non-SPI. So the chipset in your POS machine is, at the moment, not recognized by flashrom. No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically. According to this IBM web page [1] there is a "Service Processor Renesas H8S2116" [2] present. [1] http://www-01.ibm.com/support/docview.wss?uid=pos1R1003969 [2] http://documentation.renesas.com/doc/products/mpumcu/rej09b0255_h8s2116hm.pdf -------------- next part -------------- An HTML attachment was scrubbed... URL: From c-d.hailfinger.devel.2006 at gmx.net Wed Jul 11 00:49:17 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Wed, 11 Jul 2012 00:49:17 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: <4FFC73DC.9010007@gmail.com> Message-ID: <4FFCB16D.3010202@gmx.net> Hi Jason, your chipset is definitely not supported yet. One of our developers just asked VIA for a datasheet of your chipset, and if we're lucky, we might have more info soon (few days). In the meantime, it would be very helpful if you could open one of those machines and check which flash chip it uses. As a general rule, flash chips usually come either in a 32-pin PLCC package (almost square, 11.5mm x 14mm, pins on all 4 sides of the chip, model number contains 29,39 or 49) or an 8-pin DIP/SOIC package (rectangular, roughly 9 mm x 6 mm or smaller, model number contains 25 or 45). Most of the time, the flash chip has some sticker on top (peel it off to read the model number etched into the chip). A few photos of flash chips are here: http://www.flashrom.org/Technology#PLCC32:_Plastic_Leaded_Chip_Carrier.2C_32_pins If you can't find the flash chip, just upload a high-res photo of the mainboard somewhere and mail the link for that photo to our list. We're usually pretty good at spotting those things. Any further development will be against the latest flashrom source code from subversion. http://www.flashrom.org/Downloads has more info on how to get it. By the way, you can log all output (including warnings etc.) to a file with the --output parameter. This comes in handy if you don't want to cut-n-paste flashrom output from a terminal. ./flashrom -V -p internal:laptop=this_is_not_a_laptop --output logfile.txt Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Wed Jul 11 01:32:00 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Wed, 11 Jul 2012 01:32:00 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: <4FFC73DC.9010007@gmail.com> Message-ID: <4FFCBB70.3050300@gmx.net> Am 11.07.2012 00:11 schrieb Jason_Vannest at abercrombie.com: > Sorry if this is a flashrom noob question. But I want to make sure that I > understand correctly what your saying. The question is valid. > It sounds like this Renesas H8S2116 controller is something that nobody on > the flashrom dev team has worked on yet? I think a few of us have already worked with Renesas H8 series controllers, so at least in theory this sounds doable. > From reading your very fine and very detailed web site (congrats on that > BTW), specifically the section on adding support for laptops " > http://www.flashrom.org/Laptops" it sounds like a little bit of a > challenge to add support for a new chipset like this? Is that a correct > assumption on my part? Yes and no. It's a bit more complicated. If the Renesas H8S2116 is between the southbridge and the flash chip, adding flashrom support for the SurePOS might be a bit of a challenge. If the Renesas controller is not in that particular data path, there's a good chance we can simply ignore it. The unsupported chipset we were talking about is the VIA VT8251, and it seems we might already have code for it, we're just waiting for the matching VIA datasheet to confirm this. > We've spoken with IBM and of course all of their current stuff is DOS > based / bootable from USB key. Of course for a fee they would be willing > to help us out and develop a Linux based program to update the BIOS..... It might be helpful for us if IBM can answer some questions about the hardware, but that's not a hard requirement. We have some quite sharp scalpels for analyzing hardware and software. > Does anyone have thoughts on how much time and effort it would take to do > this? IBM is hardly ever the cheapest solution, so I'm guessing we would > more likely find a more reasonable price from the Open Source > community.... I'd venture a guess that we can do this before IBM can even give you a quote. That said, all of us have day jobs or study somewhere and we work on flashrom in our spare time. We're in the process of setting up a flashrom nonprofit, so besides the option of paying one of our developers there hopefully will be the option of making a tax-deductible contribution to our nonprofit. We're happy to help you solve this challenge. If you have any further questions, just ask. Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Wed Jul 11 09:01:48 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Wed, 11 Jul 2012 09:01:48 +0200 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <4FF837DB.7010704@gmx.net> References: <4FEE4625.10606@gmx.net> <4FF837DB.7010704@gmx.net> Message-ID: <4FFD24DC.7030707@gmx.net> New version, more improvements. Move Mac OS X IOKit/DirectHW availability checks in the Makefile from compiler check to pciutils check. Add DOS libpci in the Makefile includes only if a PCI-based programmer was requested. Restrict mmap usage in ich_descriptors_tool to Unix style systems. Build ich_descriptors_tool with the correct .exe extension on DOS/Windows. Build ich_descriptors_tool by default. (Patch by Stefan Tauner) Print the Windows version instead of "unknown machine" on Windows. Don't #define our own __DARWIN__, use the standard OS X detection method. Update the README. I tested native compilation on Linux x86, cross-compilation on Linux for MinGW and DJGPP, and cross-compilation for Linux-arm. Tests on OS X and non-x86 platforms appreciated. Simply running "make" with no other parameters should work on every platform/OS if you're compiling native code. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-portability-fixes/hwaccess.h =================================================================== --- flashrom-portability-fixes/hwaccess.h (Revision 1547) +++ flashrom-portability-fixes/hwaccess.h (Arbeitskopie) @@ -180,10 +180,6 @@ #include #endif -#if (defined(__MACH__) && defined(__APPLE__)) -#define __DARWIN__ -#endif - /* Clarification about OUTB/OUTW/OUTL argument order: * OUT[BWL](val, port) */ @@ -203,7 +199,7 @@ #define INW(x) __extension__ ({ u_int inw_tmp = (x); inw(inw_tmp); }) #define INL(x) __extension__ ({ u_int inl_tmp = (x); inl(inl_tmp); }) #else -#if defined(__DARWIN__) +#if defined(__MACH__) && defined(__APPLE__) /* Header is part of the DirectHW library. */ #include #define off64_t off_t @@ -303,7 +299,7 @@ #endif #endif -#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) +#if !(defined(__MACH__) && defined(__APPLE__)) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) typedef struct { uint32_t hi, lo; } msr_t; msr_t rdmsr(int addr); int wrmsr(int addr, msr_t msr); Index: flashrom-portability-fixes/Makefile =================================================================== --- flashrom-portability-fixes/Makefile (Revision 1547) +++ flashrom-portability-fixes/Makefile (Arbeitskopie) @@ -20,6 +20,12 @@ PROGRAM = flashrom +############################################################################### +# Defaults for the toolchain. + +# If you want to cross-compile, just run +# make CC=i586-pc-msdosdjgpp-gcc +# You may have to specify STRIP/AR/RANLIB as well. CC ?= gcc STRIP ?= strip INSTALL = install @@ -31,12 +37,17 @@ AR ?= ar RANLIB ?= ranlib +# If your compiler spits out excessive warnings, run make WARNERROR=no +# You shouldn't need this flag. WARNERROR ?= yes ifeq ($(WARNERROR), yes) CFLAGS += -Werror endif +############################################################################### +# General OS/architecture specific settings. + # HOST_OS is only used to work around local toolchain issues. HOST_OS ?= $(shell uname) ifeq ($(HOST_OS), MINGW32_NT-5.1) @@ -47,7 +58,7 @@ STRIP_ARGS = -s endif -# Determine the destination processor architecture. +# Determine the destination OS. # IMPORTANT: The following line must be placed before TARGET_OS is ever used # (of course), but should come after any lines setting CC because the line # below uses CC itself. @@ -55,25 +66,27 @@ ifeq ($(TARGET_OS), Darwin) CPPFLAGS += -I/opt/local/include -I/usr/local/include -# DirectHW framework can be found in the DirectHW library. -LDFLAGS += -framework IOKit -framework DirectHW -L/opt/local/lib -L/usr/local/lib +LDFLAGS += -L/opt/local/lib -L/usr/local/lib endif + ifeq ($(TARGET_OS), FreeBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), OpenBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), DOS) EXEC_SUFFIX := .exe -CPPFLAGS += -I../libgetopt -I../libpci/include +CPPFLAGS += -I../libgetopt # DJGPP has odd uint*_t definitions which cause lots of format string warnings. CPPFLAGS += -Wno-format # FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt LIBS += ../libgetopt/libgetopt.a -# Bus Pirate and Serprog are not supported under DOS (missing serial support). +# Bus Pirate, Serprog and PonyProg are not supported under DOS (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -84,6 +97,11 @@ else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -258,18 +276,31 @@ endif endif +############################################################################### +# Flash chip drivers and bus support infrastructure. + CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \ sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o \ a25.o at25.o opaque.o sfdp.o en29lv640b.o -LIB_OBJS = layout.o +############################################################################### +# Library code. -CLI_OBJS = flashrom.o cli_classic.o cli_output.o print.o +LIB_OBJS = layout.o flashrom.o +############################################################################### +# Frontend related stuff. + +CLI_OBJS = cli_classic.o cli_output.o print.o + +############################################################################### +# Programmer drivers and programmer support infrastructure. + PROGRAMMER_OBJS = udelay.o programmer.o all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) + @+make -C util/ich_descriptors_tool/ EXEC_SUFFIX=$(EXEC_SUFFIX) # Set the flashrom version string from the highest revision number # of the checked out flashrom files. @@ -531,10 +562,19 @@ ifeq ($(TARGET_OS), OpenBSD) # For (i386|amd64)_iopl(2). LIBS += -l$(shell uname -m) +else +ifeq ($(TARGET_OS), Darwin) +# DirectHW framework can be found in the DirectHW library. +LIBS += -framework IOKit -framework DirectHW +else +ifeq ($(TARGET_OS), DOS) +CPPFLAGS += -I../libpci/include endif endif endif endif +endif +endif ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' @@ -569,6 +609,7 @@ # We don't use EXEC_SUFFIX here because we want to clean everything. clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d + @+make -C util/ich_descriptors_tool/ clean EXEC_SUFFIX=$(EXEC_SUFFIX) distclean: clean rm -f .features .libdeps Index: flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (Revision 1547) +++ flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (Arbeitskopie) @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -33,6 +32,9 @@ #include #include #include "ich_descriptors.h" +#if defined(unix) || defined(__unix__) || defined(__unix) || (defined(__MACH__) && defined(__APPLE__)) +#include +#endif static void dump_file(const char *basename, const uint32_t *dump, unsigned int len, struct ich_desc_region *reg, unsigned int i) { @@ -161,16 +163,17 @@ if (len < 0) usage(argv, "Seeking to the end of the file failed"); +#if defined(unix) || defined(__unix__) || defined(__unix) || (defined(__MACH__) && defined(__APPLE__)) buf = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0); - if (buf == (void *) -1) { + if (buf == (void *) -1) +#endif + { /* fallback for stupid OSes like cygwin */ - int ret; buf = malloc(len); if (!buf) usage(argv, "Could not allocate memory"); lseek(fd, 0, SEEK_SET); - ret = read(fd, buf, len); - if (ret != len) + if (len != read(fd, buf, len)) usage(argv, "Seeking to the end of the file failed"); } printf("The flash image has a size of %d [0x%x] bytes.\n", len, len); Index: flashrom-portability-fixes/util/ich_descriptors_tool/Makefile =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (Revision 1547) +++ flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (Arbeitskopie) @@ -19,7 +19,7 @@ SHAREDOBJ = $(OBJATH)/$(notdir $(SHAREDSRC:%.c=%.o)) -all:$(PROGRAM) +all:$(PROGRAM)$(EXEC_SUFFIX) $(OBJ): $(OBJATH)/%.o : %.c $(CC) $(CFLAGS) -o $@ -c $< @@ -29,11 +29,11 @@ $(SHAREDOBJ): $(OBJATH)/%.o : $(SHAREDSRCDIR)/%.c $(CC) $(CFLAGS) -o $@ -c $< -$(PROGRAM): $(OBJ) $(SHAREDOBJ) - $(CC) -o $(PROGRAM) $(OBJ) $(SHAREDOBJ) +$(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ) + $(CC) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ) clean: - rm -f $(PROGRAM) + rm -f $(PROGRAM) $(PROGRAM).exe rm -rf $(DEPPATH) $(OBJATH) # Include the dependency files. Index: flashrom-portability-fixes/cbtable.c =================================================================== --- flashrom-portability-fixes/cbtable.c (Revision 1547) +++ flashrom-portability-fixes/cbtable.c (Arbeitskopie) @@ -211,7 +211,7 @@ struct lb_header *lb_table; struct lb_record *rec, *last; -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) /* This is a hack. DirectHW fails to map physical address 0x00000000. * Why? */ Index: flashrom-portability-fixes/physmap.c =================================================================== --- flashrom-portability-fixes/physmap.c (Revision 1547) +++ flashrom-portability-fixes/physmap.c (Arbeitskopie) @@ -128,7 +128,7 @@ void cleanup_cpu_msr(void) { } -#elif defined(__DARWIN__) +#elif defined(__MACH__) && defined(__APPLE__) #define MEM_DEV "DirectHW" @@ -467,7 +467,7 @@ #else -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) int setup_cpu_msr(int cpu) { // Always succeed for now Index: flashrom-portability-fixes/flashrom.c =================================================================== --- flashrom-portability-fixes/flashrom.c (Revision 1547) +++ flashrom-portability-fixes/flashrom.c (Arbeitskopie) @@ -1485,10 +1485,35 @@ void print_sysinfo(void) { -#if HAVE_UTSNAME == 1 +#ifdef _WIN32 + SYSTEM_INFO si; + OSVERSIONINFOEX osvi; + + memset(&si, 0, sizeof(SYSTEM_INFO)); + memset(&osvi, 0, sizeof(OSVERSIONINFOEX)); + msg_ginfo(" on Windows"); + /* Tell Windows which version of the structure we want. */ + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if (GetVersionEx((OSVERSIONINFO*) &osvi)) + msg_ginfo(" unknown version"); + else + msg_ginfo(" %lu.%lu", osvi.dwMajorVersion, osvi.dwMinorVersion); + GetSystemInfo(&si); + switch (si.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + msg_ginfo(" x86_64"); + break; + case PROCESSOR_ARCHITECTURE_INTEL: + msg_ginfo(" x86"); + break; + default: + msg_ginfo(" unknown arch"); + break; + } +#elif HAVE_UTSNAME == 1 struct utsname osinfo; + uname(&osinfo); - msg_ginfo(" on %s %s (%s)", osinfo.sysname, osinfo.release, osinfo.machine); #else Index: flashrom-portability-fixes/README =================================================================== --- flashrom-portability-fixes/README (Revision 1547) +++ flashrom-portability-fixes/README (Arbeitskopie) @@ -93,14 +93,18 @@ To compile and run on Darwin/Mac OS X: Install DirectHW from coresystems GmbH. - DirectHW is available at http://www.coresystems.de/en/directhw . + DirectHW is available at http://www.coreboot.org/DirectHW . To cross-compile on Linux for DOS: - Get RPMs of the cross compiler from the DJGPP site and install them: + Get packages of the DJGPP cross compiler and install them: + djgpp-filesystem djgpp-gcc djgpp-cpp djgpp-runtime djgpp-binutils + As an alternative, the DJGPP web site offers packages for download as well: djcross-binutils-2.19.1-10ap.i386.rpm djcross-gcc-4.3.2-8ap.i686.rpm djcrx-2.04pre_20090725-13ap.i386.rpm + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *djgpp*). Download pciutils 3.1.5 and apply http://assembler.cz/flashrom/pciutils.patch Download and compile http://assembler.cz/flashrom/libgetopt/ Compile pciutils, see README.DJGPP for instructions. @@ -108,7 +112,7 @@ ../libpci should contain pciutils source and binaries. ../libgetopt should contain getopt.a from libgetopt. Run either (change settings where appropriate) - make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip OS_ARCH=DOS + make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip or (above settings hardcoded) make djgpp-dos You might have to add WARNERROR=no to the make command line. @@ -116,17 +120,22 @@ http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi7b.zip and make sure CWSDPMI.EXE is in the current directory. +To cross-compile on Linux for Windows: + + Get packages of the MinGW cross compiler and install them: + mingw32-filesystem mingw32-cross-cpp mingw32-cross-binutils mingw32-cross-gcc + mingw32-runtime mingw32-headers + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *mingw*). + PCI-based programmers (internal etc.) are not supported on Windows. + Run (change CC= and STRIP= settings where appropriate) + make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip + Processor architecture dependent features: - On non-x86 architectures you have to disable a few programmers because they - use port-based I/O which is not directly available on non-x86. Please add - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ - CONFIG_NICNATSEMI=no - as parameters to the "make" invocation. - Besides that, the internal programmer is only supported on x86 and MIPS. On - other architectures, please add - CONFIG_INTERNAL=no - as parameter to the "make" invocation. + On non-x86 architectures a few programmers don't work (yet) because they + use port-based I/O which is not directly available on non-x86. Those + programmers will be disabled automatically if you run "make". Installation ------------ Index: flashrom-portability-fixes/programmer.h =================================================================== --- flashrom-portability-fixes/programmer.h (Revision 1547) +++ flashrom-portability-fixes/programmer.h (Arbeitskopie) @@ -636,7 +636,7 @@ #endif /* serial.c */ -#if _WIN32 +#ifdef _WIN32 typedef HANDLE fdtype; #else typedef int fdtype; -- http://www.hailfinger.org/ From frederic.temporelli at bull.net Wed Jul 11 16:10:49 2012 From: frederic.temporelli at bull.net (frederic.temporelli at bull.net) Date: Wed, 11 Jul 2012 16:10:49 +0200 Subject: [flashrom] add Numonyx/Micron N25Q128 In-Reply-To: <201207060514.q665EFPR026911@mail2.student.tuwien.ac.at> References: <201207060514.q665EFPR026911@mail2.student.tuwien.ac.at> Message-ID: Hello Stefan, Thanks for the comments about N25Q128... (my patch was based on N25Q64) I'll try to have a look to the layout feature (but currently I'm very busy). the main idea is to unlock the regions from the ME Document with datails about ME messages for X79/C600 are Intel Restricted... :-( But seems that ME messages (HMRFPO and others) used in Maho Bay and Chief River platform are the same, and "BIOS Writers Guide" for these systems (document 490124) is only "Intel Confidential" (and HMRFPO is described in this document...) I hope that Intel will soon set all these documents available to everybody... note: there are lot of work to do... first, there's only one IOCTL developed in mei driver (mei driver may be the best way to interact with ME...) Other topic (may be more related to layout feature): currently, when using flashrom for BIOS upgrade, Serial Numbers and some other information in DMI are overwritten... (seen on Supermicro motherboards) I don't have details, but it may be nice to investigate this issue... Best regards -- Fred De : Stefan Tauner A : frederic.temporelli at bull.net Cc : flashrom at flashrom.org Date : 07/06/2012 08:02 AM Objet : Re: [flashrom] add Numonyx/Micron N25Q128 On Sat, 9 Jun 2012 14:51:15 +0200 frederic.temporelli at bull.net wrote: > Hello > > > Numonyx/Micron N25Q128 is used on new X9 motherboards from Supermicro (X9DRT, ...) > > Specs are availbale on Micron WWW site: > http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/N25Q_128_3_Volt_with_boot_sector.pdf > > Following patch add this chip to flashrom. Probe is OK. > Due to Manageability Engine, some work is required before being able to test READ/ERASE/WRITE... > > ================================================================================= > Signed-off-by: Frederic Temporelli > > diff -urN flashrom-0.9.5.2-r1540/flashchips.c flashrom-0.9.5.2-r1540-n25q128/flashchips.c > --- flashrom-0.9.5.2-r1540/flashchips.c 2012-05-20 23:32:32.000000000 +0000 > +++ flashrom-0.9.5.2-r1540-n25q128/flashchips.c 2012-06-09 14:41:07.064141076 +0000 > @@ -5453,6 +5453,37 @@ > }, > > { > + .vendor = "Numonyx", > + .name = "N25Q128", > + .bustype = BUS_SPI, > + .manufacture_id = ST_ID, > + .model_id = ST_N25Q128, > + .total_size = 16384, > + .page_size = 256, > + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, > + .tested = TEST_OK_PROBE, > + .probe = probe_spi_rdid, > + .probe_timing = TIMING_ZERO, > + .block_erasers = > + { > + { > + .eraseblocks = { {4 * 1024, 4096 } }, > + .block_erase = spi_block_erase_20, > + }, { > + .eraseblocks = { {64 * 1024, 256} }, > + .block_erase = spi_block_erase_d8, > + }, { > + .eraseblocks = { {16 * 1024 * 1024, 1} }, > + .block_erase = spi_block_erase_c7, > + } > + }, > + .unlock = spi_disable_blockprotect, > + .write = spi_chip_write_256, > + .read = spi_chip_read, > + }, > + > + > + { > .vendor = "PMC", > .name = "Pm25LV010", > .bustype = BUS_SPI, > diff -urN flashrom-0.9.5.2-r1540/flashchips.h flashrom-0.9.5.2-r1540-n25q128/flashchips.h > --- flashrom-0.9.5.2-r1540/flashchips.h 2012-05-14 01:51:46.000000000 +0000 > +++ flashrom-0.9.5.2-r1540-n25q128/flashchips.h 2012-06-08 20:46:47.225385676 +0000 > @@ -587,6 +587,7 @@ > #define ST_M29W040B 0xE3 > #define ST_M29W512B 0x27 > #define ST_N25Q064 0xBA17 > +#define ST_N25Q128 0xBA18 /* also Numonyx N25Q128 */ > > #define SYNCMOS_MVC_ID 0x40 /* SyncMOS (SM) and Mosel Vitelic Corporation (MVC) */ > #define MVC_V29C51000T 0x00 > ================================================================================= hello and thanks for your patch! this chip is a bit complicated and we cant merge the patch as it is. they have used the same plane RDID for multiple variants of the chip. some attributes are not important for flashrom and can be ignored, but some are very important, namely the boot sector layout. quote from p.52: > The N25Q128 is available in the following architecture versions: > Bottom version, 64 KB uniform sectors plus 8 bottom boot sectors (each with 16 > subsectors), > Top version, 64 KB uniform sectors plus 8 top boot sectors (each with 16 subsectors) > Uniform version, 64 KB uniform sectors without any boot sectors and subsectors. the good news is that this differences can be detected by an extended RDID command in its 5th byte (1 manufacturer, 2 device, 1 length of the following extended data, the first EDID byte we want), see table 15. of this 5th byte we need to look at the first two bits to determine the architecture, see table 16. our current infrastructure (probe_spi_rdid_generic) cant handle that, but should... so we will plan a change, but please dont expect it to happen too soon. the bad news is that i am not even sure if the subsector erase commands work as flashrom expects. flashrom wants to use the same erase opcode for the hole address space, even for non-uniform layouts. this usually works fine, but afaics it is not specified in the datasheet what happens if one uses the subsector erase opcode on a non-subsector *on devices that actually have subsectors* (the emphasis stems from the fact that it *is* defined, that the subsector erase command is ignore by the uniform model: "Any Subsector Erase (SSE) instruction in devices with uniform architecture (meaning no boot sectors with subsectors) is rejected without having any effects on the device." (p. 98). other interesting bits of this chips: - bit#5 of the status register "is used in conjunction with the Block Protect (BP3, BP2, BP1, BP0) bits to determine if the protected area defined by the Block Protect bits starts from the top or the bottom of the memory array" - a flag status register that gives more info than the "legacy spi status register" - a non-volatile configuration register to configure dummy clock cycles, output driver strength and other stuff, and a volatile register that overrides the nvm settings the first two points can be somewhat ignored by us, the generic "write 0 to the status register" is good enough to unlock the device. regarding the ME: are you aware of my layout patches, that enable read, erase and verify on user-definable address ranges? see the patches from 2011-12-25 at http://patchwork.coreboot.org/project/flashrom/list/ -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jason_Vannest at abercrombie.com Thu Jul 12 00:14:20 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Wed, 11 Jul 2012 18:14:20 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <4FFCB16D.3010202@gmx.net> References: <4FFC73DC.9010007@gmail.com> <4FFCB16D.3010202@gmx.net> Message-ID: Looks like it has a set of: SST 49LF080A 33-4C-NHE 0949188-B chips seated right next to the F2116TE20V, H8S/2116V. If I'm reading the flashrom site correctly this is one of the flash chips that flashrom has support for already. So that might be a plus. Jason Vannest Information Technology - Store Systems Abercrombie & Fitch 614-283-6363 (desk) From: Carl-Daniel Hailfinger To: Jason_Vannest at abercrombie.com, Cc: flashrom at flashrom.org Date: 07/10/2012 06:49 PM Subject: Re: [flashrom] IBM SurePOS 700 4800-783 support Hi Jason, your chipset is definitely not supported yet. One of our developers just asked VIA for a datasheet of your chipset, and if we're lucky, we might have more info soon (few days). In the meantime, it would be very helpful if you could open one of those machines and check which flash chip it uses. As a general rule, flash chips usually come either in a 32-pin PLCC package (almost square, 11.5mm x 14mm, pins on all 4 sides of the chip, model number contains 29,39 or 49) or an 8-pin DIP/SOIC package (rectangular, roughly 9 mm x 6 mm or smaller, model number contains 25 or 45). Most of the time, the flash chip has some sticker on top (peel it off to read the model number etched into the chip). A few photos of flash chips are here: http://www.flashrom.org/Technology#PLCC32:_Plastic_Leaded_Chip_Carrier.2C_32_pins If you can't find the flash chip, just upload a high-res photo of the mainboard somewhere and mail the link for that photo to our list. We're usually pretty good at spotting those things. Any further development will be against the latest flashrom source code from subversion. http://www.flashrom.org/Downloads has more info on how to get it. By the way, you can log all output (including warnings etc.) to a file with the --output parameter. This comes in handy if you don't want to cut-n-paste flashrom output from a terminal. ./flashrom -V -p internal:laptop=this_is_not_a_laptop --output logfile.txt Regards, Carl-Daniel -- http://www.hailfinger.org/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jason_Vannest at abercrombie.com Thu Jul 12 00:17:19 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Wed, 11 Jul 2012 18:17:19 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <4FFCBB70.3050300@gmx.net> References: <4FFC73DC.9010007@gmail.com> <4FFCBB70.3050300@gmx.net> Message-ID: > I'd venture a guess that we can do this before IBM can > even give you a quote. What kind of information would you want? I have pretty solid connections with IBM I may be able to get questions answered about this. Jason -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 12 22:35:35 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 12 Jul 2012 22:35:35 +0200 Subject: [flashrom] FAILED: xw9400 In-Reply-To: CAC3SVaYmB9+cvu9F7adTVSX4oYmyJdDG7CaAqVOwScEHMDToEw@mail.gmail.com Message-ID: <201207122035.q6CKZZF9004161@mail2.student.tuwien.ac.at> Hi! Your original mail is too big to post and will be processed by an administrator. If you have made a backup of the previous bios please try to write that back. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From roxmail at list.ru Fri Jul 13 20:12:02 2012 From: roxmail at list.ru (Roman Elshin) Date: Fri, 13 Jul 2012 22:12:02 +0400 Subject: [flashrom] AT25DF321A with ASRock 880G Pro3 MB Message-ID: <1342203122.3126.16.camel@Lenovo> It looks like support for this flash part work correctly in flashrom (it is not native flash for this mb). -------------- next part -------------- flashrom v0.9.5.2-r1547 on Linux 3.5.0-rc5 (i686) flashrom is free software, get the source code at http://www.flashrom.org flashrom was built with libpci 3.0.0, GCC 4.4.3, little endian Command line (1 args): flashrom -VE Calibrating delay loop... OS timer resolution is 1 usecs, 933M loops per second, 10 myus = 10 us, 100 myus = 100 us, 1000 myus = 995 us, 10000 myus = 10046 us, 4 myus = 4 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: "ASRock" DMI string baseboard-product-name: "880G Pro3" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=0, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=1, DropOneClkOnRd=0 NormSpeed is 16.5 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Chip status register is 10 Found Atmel flash chip "AT25DF321A" (4096 kB, SPI) at physical address 0xffc00000. Ignoring security lockdown (if present) Ignoring status register byte 2 Chip status register is 10 Chip status register: Sector Protection Register Lock (SRPL) is not set Chip status register: Bit 6 is not set Chip status register: Erase/Program Error (EPE) is not set Chip status register: WP# pin (WPP) is not asserted Chip status register: Software Protection Status (SWP): no sectors are protected Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Unknown SFDP-capable chip, 0 kB: No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Atmel flash chip "AT25DF321A" (4096 kB, SPI). This chip may contain one-time programmable memory. flashrom cannot read and may never be able to write it, hence it may not be able to completely clone the contents of this chip (see man page for details). === This flash part has status UNTESTED for operations: READ ERASE WRITE The test status of this chip may have been updated in the latest development version of flashrom. If you are running the latest development version, please email a report to flashrom at flashrom.org if any of the above operations work correctly for you with this flash part. Please include the flashrom output with the additional -V option for all operations you tested (-V, -Vr, -VE, -Vw), and mention which mainboard or programmer you tested. Please mention your board in the subject line. Thanks for your help! Ignoring security lockdown (if present) Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:E, 0x001000-0x001fff:E, 0x002000-0x002fff:E, 0x003000-0x003fff:E, 0x004000-0x004fff:E, 0x005000-0x005fff:E, 0x006000-0x006fff:E, 0x007000-0x007fff:E, 0x008000-0x008fff:E, 0x009000-0x009fff:E, 0x00a000-0x00afff:E, 0x00b000-0x00bfff:E, 0x00c000-0x00cfff:E, 0x00d000-0x00dfff:E, 0x00e000-0x00efff:E, 0x00f000-0x00ffff:E, 0x010000-0x010fff:E, 0x011000-0x011fff:E, 0x012000-0x012fff:E, 0x013000-0x013fff:E, 0x014000-0x014fff:E, 0x015000-0x015fff:E, 0x016000-0x016fff:E, 0x017000-0x017fff:E, 0x018000-0x018fff:E, 0x019000-0x019fff:E, 0x01a000-0x01afff:E, 0x01b000-0x01bfff:E, 0x01c000-0x01cfff:E, 0x01d000-0x01dfff:E, 0x01e000-0x01efff:E, 0x01f000-0x01ffff:E, 0x020000-0x020fff:E, 0x021000-0x021fff:E, 0x022000-0x022fff:E, 0x023000-0x023fff:E, 0x024000-0x024fff:E, 0x025000-0x025fff:E, 0x026000-0x026fff:E, 0x027000-0x027fff:E, 0x028000-0x028fff:E, 0x029000-0x029fff:E, 0x02a000-0x02afff:E, 0x02b000-0x02bfff:E, 0x02c000-0x02cfff:E, 0x02d000-0x02dfff:E, 0x02e000-0x02efff:E, 0x02f000-0x02ffff:E, 0x030000-0x030fff:E, 0x031000-0x031fff:E, 0x032000-0x032fff:E, 0x033000-0x033fff:E, 0x034000-0x034fff:E, 0x035000-0x035fff:E, 0x036000-0x036fff:E, 0x037000-0x037fff:E, 0x038000-0x038fff:E, 0x039000-0x039fff:E, 0x03a000-0x03afff:E, 0x03b000-0x03bfff:E, 0x03c000-0x03cfff:E, 0x03d000-0x03dfff:E, 0x03e000-0x03efff:E, 0x03f000-0x03ffff:E, 0x040000-0x040fff:E, 0x041000-0x041fff:E, 0x042000-0x042fff:E, 0x043000-0x043fff:E, 0x044000-0x044fff:E, 0x045000-0x045fff:E, 0x046000-0x046fff:E, 0x047000-0x047fff:E, 0x048000-0x048fff:E, 0x049000-0x049fff:E, 0x04a000-0x04afff:E, 0x04b000-0x04bfff:E, 0x04c000-0x04cfff:E, 0x04d000-0x04dfff:E, 0x04e000-0x04efff:E, 0x04f000-0x04ffff:E, 0x050000-0x050fff:E, 0x051000-0x051fff:E, 0x052000-0x052fff:E, 0x053000-0x053fff:E, 0x054000-0x054fff:E, 0x055000-0x055fff:E, 0x056000-0x056fff:E, 0x057000-0x057fff:E, 0x058000-0x058fff:E, 0x059000-0x059fff:E, 0x05a000-0x05afff:E, 0x05b000-0x05bfff:E, 0x05c000-0x05cfff:E, 0x05d000-0x05dfff:E, 0x05e000-0x05efff:E, 0x05f000-0x05ffff:E, 0x060000-0x060fff:E, 0x061000-0x061fff:E, 0x062000-0x062fff:E, 0x063000-0x063fff:E, 0x064000-0x064fff:E, 0x065000-0x065fff:E, 0x066000-0x066fff:E, 0x067000-0x067fff:E, 0x068000-0x068fff:E, 0x069000-0x069fff:E, 0x06a000-0x06afff:E, 0x06b000-0x06bfff:E, 0x06c000-0x06cfff:E, 0x06d000-0x06dfff:E, 0x06e000-0x06efff:E, 0x06f000-0x06ffff:E, 0x070000-0x070fff:E, 0x071000-0x071fff:E, 0x072000-0x072fff:E, 0x073000-0x073fff:E, 0x074000-0x074fff:E, 0x075000-0x075fff:E, 0x076000-0x076fff:E, 0x077000-0x077fff:E, 0x078000-0x078fff:E, 0x079000-0x079fff:E, 0x07a000-0x07afff:E, 0x07b000-0x07bfff:E, 0x07c000-0x07cfff:E, 0x07d000-0x07dfff:E, 0x07e000-0x07efff:E, 0x07f000-0x07ffff:E, 0x080000-0x080fff:E, 0x081000-0x081fff:E, 0x082000-0x082fff:E, 0x083000-0x083fff:E, 0x084000-0x084fff:E, 0x085000-0x085fff:E, 0x086000-0x086fff:E, 0x087000-0x087fff:E, 0x088000-0x088fff:E, 0x089000-0x089fff:E, 0x08a000-0x08afff:E, 0x08b000-0x08bfff:E, 0x08c000-0x08cfff:E, 0x08d000-0x08dfff:E, 0x08e000-0x08efff:E, 0x08f000-0x08ffff:E, 0x090000-0x090fff:E, 0x091000-0x091fff:E, 0x092000-0x092fff:E, 0x093000-0x093fff:E, 0x094000-0x094fff:E, 0x095000-0x095fff:E, 0x096000-0x096fff:E, 0x097000-0x097fff:E, 0x098000-0x098fff:E, 0x099000-0x099fff:E, 0x09a000-0x09afff:E, 0x09b000-0x09bfff:E, 0x09c000-0x09cfff:E, 0x09d000-0x09dfff:E, 0x09e000-0x09efff:E, 0x09f000-0x09ffff:E, 0x0a0000-0x0a0fff:E, 0x0a1000-0x0a1fff:E, 0x0a2000-0x0a2fff:E, 0x0a3000-0x0a3fff:E, 0x0a4000-0x0a4fff:E, 0x0a5000-0x0a5fff:E, 0x0a6000-0x0a6fff:E, 0x0a7000-0x0a7fff:E, 0x0a8000-0x0a8fff:E, 0x0a9000-0x0a9fff:E, 0x0aa000-0x0aafff:E, 0x0ab000-0x0abfff:E, 0x0ac000-0x0acfff:E, 0x0ad000-0x0adfff:E, 0x0ae000-0x0aefff:E, 0x0af000-0x0affff:E, 0x0b0000-0x0b0fff:E, 0x0b1000-0x0b1fff:E, 0x0b2000-0x0b2fff:E, 0x0b3000-0x0b3fff:E, 0x0b4000-0x0b4fff:E, 0x0b5000-0x0b5fff:E, 0x0b6000-0x0b6fff:E, 0x0b7000-0x0b7fff:E, 0x0b8000-0x0b8fff:E, 0x0b9000-0x0b9fff:E, 0x0ba000-0x0bafff:E, 0x0bb000-0x0bbfff:E, 0x0bc000-0x0bcfff:E, 0x0bd000-0x0bdfff:E, 0x0be000-0x0befff:E, 0x0bf000-0x0bffff:E, 0x0c0000-0x0c0fff:E, 0x0c1000-0x0c1fff:E, 0x0c2000-0x0c2fff:E, 0x0c3000-0x0c3fff:E, 0x0c4000-0x0c4fff:E, 0x0c5000-0x0c5fff:E, 0x0c6000-0x0c6fff:E, 0x0c7000-0x0c7fff:E, 0x0c8000-0x0c8fff:E, 0x0c9000-0x0c9fff:E, 0x0ca000-0x0cafff:E, 0x0cb000-0x0cbfff:E, 0x0cc000-0x0ccfff:E, 0x0cd000-0x0cdfff:E, 0x0ce000-0x0cefff:E, 0x0cf000-0x0cffff:E, 0x0d0000-0x0d0fff:E, 0x0d1000-0x0d1fff:E, 0x0d2000-0x0d2fff:E, 0x0d3000-0x0d3fff:E, 0x0d4000-0x0d4fff:E, 0x0d5000-0x0d5fff:E, 0x0d6000-0x0d6fff:E, 0x0d7000-0x0d7fff:E, 0x0d8000-0x0d8fff:E, 0x0d9000-0x0d9fff:E, 0x0da000-0x0dafff:E, 0x0db000-0x0dbfff:E, 0x0dc000-0x0dcfff:E, 0x0dd000-0x0ddfff:E, 0x0de000-0x0defff:E, 0x0df000-0x0dffff:E, 0x0e0000-0x0e0fff:E, 0x0e1000-0x0e1fff:E, 0x0e2000-0x0e2fff:E, 0x0e3000-0x0e3fff:E, 0x0e4000-0x0e4fff:E, 0x0e5000-0x0e5fff:E, 0x0e6000-0x0e6fff:E, 0x0e7000-0x0e7fff:E, 0x0e8000-0x0e8fff:E, 0x0e9000-0x0e9fff:E, 0x0ea000-0x0eafff:E, 0x0eb000-0x0ebfff:E, 0x0ec000-0x0ecfff:E, 0x0ed000-0x0edfff:E, 0x0ee000-0x0eefff:E, 0x0ef000-0x0effff:E, 0x0f0000-0x0f0fff:E, 0x0f1000-0x0f1fff:E, 0x0f2000-0x0f2fff:E, 0x0f3000-0x0f3fff:E, 0x0f4000-0x0f4fff:E, 0x0f5000-0x0f5fff:E, 0x0f6000-0x0f6fff:E, 0x0f7000-0x0f7fff:E, 0x0f8000-0x0f8fff:E, 0x0f9000-0x0f9fff:E, 0x0fa000-0x0fafff:E, 0x0fb000-0x0fbfff:E, 0x0fc000-0x0fcfff:E, 0x0fd000-0x0fdfff:E, 0x0fe000-0x0fefff:E, 0x0ff000-0x0fffff:E, 0x100000-0x100fff:E, 0x101000-0x101fff:E, 0x102000-0x102fff:E, 0x103000-0x103fff:E, 0x104000-0x104fff:E, 0x105000-0x105fff:E, 0x106000-0x106fff:E, 0x107000-0x107fff:E, 0x108000-0x108fff:E, 0x109000-0x109fff:E, 0x10a000-0x10afff:E, 0x10b000-0x10bfff:E, 0x10c000-0x10cfff:E, 0x10d000-0x10dfff:E, 0x10e000-0x10efff:E, 0x10f000-0x10ffff:E, 0x110000-0x110fff:E, 0x111000-0x111fff:E, 0x112000-0x112fff:E, 0x113000-0x113fff:E, 0x114000-0x114fff:E, 0x115000-0x115fff:E, 0x116000-0x116fff:E, 0x117000-0x117fff:E, 0x118000-0x118fff:E, 0x119000-0x119fff:E, 0x11a000-0x11afff:E, 0x11b000-0x11bfff:E, 0x11c000-0x11cfff:E, 0x11d000-0x11dfff:E, 0x11e000-0x11efff:E, 0x11f000-0x11ffff:E, 0x120000-0x120fff:E, 0x121000-0x121fff:E, 0x122000-0x122fff:E, 0x123000-0x123fff:E, 0x124000-0x124fff:E, 0x125000-0x125fff:E, 0x126000-0x126fff:E, 0x127000-0x127fff:E, 0x128000-0x128fff:E, 0x129000-0x129fff:E, 0x12a000-0x12afff:E, 0x12b000-0x12bfff:E, 0x12c000-0x12cfff:E, 0x12d000-0x12dfff:E, 0x12e000-0x12efff:E, 0x12f000-0x12ffff:E, 0x130000-0x130fff:E, 0x131000-0x131fff:E, 0x132000-0x132fff:E, 0x133000-0x133fff:E, 0x134000-0x134fff:E, 0x135000-0x135fff:E, 0x136000-0x136fff:E, 0x137000-0x137fff:E, 0x138000-0x138fff:E, 0x139000-0x139fff:E, 0x13a000-0x13afff:E, 0x13b000-0x13bfff:E, 0x13c000-0x13cfff:E, 0x13d000-0x13dfff:E, 0x13e000-0x13efff:E, 0x13f000-0x13ffff:E, 0x140000-0x140fff:E, 0x141000-0x141fff:E, 0x142000-0x142fff:E, 0x143000-0x143fff:E, 0x144000-0x144fff:E, 0x145000-0x145fff:E, 0x146000-0x146fff:E, 0x147000-0x147fff:E, 0x148000-0x148fff:E, 0x149000-0x149fff:E, 0x14a000-0x14afff:E, 0x14b000-0x14bfff:E, 0x14c000-0x14cfff:E, 0x14d000-0x14dfff:E, 0x14e000-0x14efff:E, 0x14f000-0x14ffff:E, 0x150000-0x150fff:E, 0x151000-0x151fff:E, 0x152000-0x152fff:E, 0x153000-0x153fff:E, 0x154000-0x154fff:E, 0x155000-0x155fff:E, 0x156000-0x156fff:E, 0x157000-0x157fff:E, 0x158000-0x158fff:E, 0x159000-0x159fff:E, 0x15a000-0x15afff:E, 0x15b000-0x15bfff:E, 0x15c000-0x15cfff:E, 0x15d000-0x15dfff:E, 0x15e000-0x15efff:E, 0x15f000-0x15ffff:E, 0x160000-0x160fff:E, 0x161000-0x161fff:E, 0x162000-0x162fff:E, 0x163000-0x163fff:E, 0x164000-0x164fff:E, 0x165000-0x165fff:E, 0x166000-0x166fff:E, 0x167000-0x167fff:E, 0x168000-0x168fff:E, 0x169000-0x169fff:E, 0x16a000-0x16afff:E, 0x16b000-0x16bfff:E, 0x16c000-0x16cfff:E, 0x16d000-0x16dfff:E, 0x16e000-0x16efff:E, 0x16f000-0x16ffff:E, 0x170000-0x170fff:E, 0x171000-0x171fff:E, 0x172000-0x172fff:E, 0x173000-0x173fff:E, 0x174000-0x174fff:E, 0x175000-0x175fff:E, 0x176000-0x176fff:E, 0x177000-0x177fff:E, 0x178000-0x178fff:E, 0x179000-0x179fff:E, 0x17a000-0x17afff:E, 0x17b000-0x17bfff:E, 0x17c000-0x17cfff:E, 0x17d000-0x17dfff:E, 0x17e000-0x17efff:E, 0x17f000-0x17ffff:E, 0x180000-0x180fff:E, 0x181000-0x181fff:E, 0x182000-0x182fff:E, 0x183000-0x183fff:E, 0x184000-0x184fff:E, 0x185000-0x185fff:E, 0x186000-0x186fff:E, 0x187000-0x187fff:E, 0x188000-0x188fff:E, 0x189000-0x189fff:E, 0x18a000-0x18afff:E, 0x18b000-0x18bfff:E, 0x18c000-0x18cfff:E, 0x18d000-0x18dfff:E, 0x18e000-0x18efff:E, 0x18f000-0x18ffff:E, 0x190000-0x190fff:E, 0x191000-0x191fff:E, 0x192000-0x192fff:E, 0x193000-0x193fff:E, 0x194000-0x194fff:E, 0x195000-0x195fff:E, 0x196000-0x196fff:E, 0x197000-0x197fff:E, 0x198000-0x198fff:E, 0x199000-0x199fff:E, 0x19a000-0x19afff:E, 0x19b000-0x19bfff:E, 0x19c000-0x19cfff:E, 0x19d000-0x19dfff:E, 0x19e000-0x19efff:E, 0x19f000-0x19ffff:E, 0x1a0000-0x1a0fff:E, 0x1a1000-0x1a1fff:E, 0x1a2000-0x1a2fff:E, 0x1a3000-0x1a3fff:E, 0x1a4000-0x1a4fff:E, 0x1a5000-0x1a5fff:E, 0x1a6000-0x1a6fff:E, 0x1a7000-0x1a7fff:E, 0x1a8000-0x1a8fff:E, 0x1a9000-0x1a9fff:E, 0x1aa000-0x1aafff:E, 0x1ab000-0x1abfff:E, 0x1ac000-0x1acfff:E, 0x1ad000-0x1adfff:E, 0x1ae000-0x1aefff:E, 0x1af000-0x1affff:E, 0x1b0000-0x1b0fff:E, 0x1b1000-0x1b1fff:E, 0x1b2000-0x1b2fff:E, 0x1b3000-0x1b3fff:E, 0x1b4000-0x1b4fff:E, 0x1b5000-0x1b5fff:E, 0x1b6000-0x1b6fff:E, 0x1b7000-0x1b7fff:E, 0x1b8000-0x1b8fff:E, 0x1b9000-0x1b9fff:E, 0x1ba000-0x1bafff:E, 0x1bb000-0x1bbfff:E, 0x1bc000-0x1bcfff:E, 0x1bd000-0x1bdfff:E, 0x1be000-0x1befff:E, 0x1bf000-0x1bffff:E, 0x1c0000-0x1c0fff:E, 0x1c1000-0x1c1fff:E, 0x1c2000-0x1c2fff:E, 0x1c3000-0x1c3fff:E, 0x1c4000-0x1c4fff:E, 0x1c5000-0x1c5fff:E, 0x1c6000-0x1c6fff:E, 0x1c7000-0x1c7fff:E, 0x1c8000-0x1c8fff:E, 0x1c9000-0x1c9fff:E, 0x1ca000-0x1cafff:E, 0x1cb000-0x1cbfff:E, 0x1cc000-0x1ccfff:E, 0x1cd000-0x1cdfff:E, 0x1ce000-0x1cefff:E, 0x1cf000-0x1cffff:E, 0x1d0000-0x1d0fff:E, 0x1d1000-0x1d1fff:E, 0x1d2000-0x1d2fff:E, 0x1d3000-0x1d3fff:E, 0x1d4000-0x1d4fff:E, 0x1d5000-0x1d5fff:E, 0x1d6000-0x1d6fff:E, 0x1d7000-0x1d7fff:E, 0x1d8000-0x1d8fff:E, 0x1d9000-0x1d9fff:E, 0x1da000-0x1dafff:E, 0x1db000-0x1dbfff:E, 0x1dc000-0x1dcfff:E, 0x1dd000-0x1ddfff:E, 0x1de000-0x1defff:E, 0x1df000-0x1dffff:E, 0x1e0000-0x1e0fff:E, 0x1e1000-0x1e1fff:E, 0x1e2000-0x1e2fff:E, 0x1e3000-0x1e3fff:E, 0x1e4000-0x1e4fff:E, 0x1e5000-0x1e5fff:E, 0x1e6000-0x1e6fff:E, 0x1e7000-0x1e7fff:E, 0x1e8000-0x1e8fff:E, 0x1e9000-0x1e9fff:E, 0x1ea000-0x1eafff:E, 0x1eb000-0x1ebfff:E, 0x1ec000-0x1ecfff:E, 0x1ed000-0x1edfff:E, 0x1ee000-0x1eefff:E, 0x1ef000-0x1effff:E, 0x1f0000-0x1f0fff:E, 0x1f1000-0x1f1fff:E, 0x1f2000-0x1f2fff:E, 0x1f3000-0x1f3fff:E, 0x1f4000-0x1f4fff:E, 0x1f5000-0x1f5fff:E, 0x1f6000-0x1f6fff:E, 0x1f7000-0x1f7fff:E, 0x1f8000-0x1f8fff:E, 0x1f9000-0x1f9fff:E, 0x1fa000-0x1fafff:E, 0x1fb000-0x1fbfff:E, 0x1fc000-0x1fcfff:E, 0x1fd000-0x1fdfff:E, 0x1fe000-0x1fefff:E, 0x1ff000-0x1fffff:E, 0x200000-0x200fff:E, 0x201000-0x201fff:E, 0x202000-0x202fff:E, 0x203000-0x203fff:E, 0x204000-0x204fff:E, 0x205000-0x205fff:E, 0x206000-0x206fff:E, 0x207000-0x207fff:E, 0x208000-0x208fff:E, 0x209000-0x209fff:E, 0x20a000-0x20afff:E, 0x20b000-0x20bfff:E, 0x20c000-0x20cfff:E, 0x20d000-0x20dfff:E, 0x20e000-0x20efff:E, 0x20f000-0x20ffff:E, 0x210000-0x210fff:E, 0x211000-0x211fff:E, 0x212000-0x212fff:E, 0x213000-0x213fff:E, 0x214000-0x214fff:E, 0x215000-0x215fff:E, 0x216000-0x216fff:E, 0x217000-0x217fff:E, 0x218000-0x218fff:E, 0x219000-0x219fff:E, 0x21a000-0x21afff:E, 0x21b000-0x21bfff:E, 0x21c000-0x21cfff:E, 0x21d000-0x21dfff:E, 0x21e000-0x21efff:E, 0x21f000-0x21ffff:E, 0x220000-0x220fff:E, 0x221000-0x221fff:E, 0x222000-0x222fff:E, 0x223000-0x223fff:E, 0x224000-0x224fff:E, 0x225000-0x225fff:E, 0x226000-0x226fff:E, 0x227000-0x227fff:E, 0x228000-0x228fff:E, 0x229000-0x229fff:E, 0x22a000-0x22afff:E, 0x22b000-0x22bfff:E, 0x22c000-0x22cfff:E, 0x22d000-0x22dfff:E, 0x22e000-0x22efff:E, 0x22f000-0x22ffff:E, 0x230000-0x230fff:E, 0x231000-0x231fff:E, 0x232000-0x232fff:E, 0x233000-0x233fff:E, 0x234000-0x234fff:E, 0x235000-0x235fff:E, 0x236000-0x236fff:E, 0x237000-0x237fff:E, 0x238000-0x238fff:E, 0x239000-0x239fff:E, 0x23a000-0x23afff:E, 0x23b000-0x23bfff:E, 0x23c000-0x23cfff:E, 0x23d000-0x23dfff:E, 0x23e000-0x23efff:E, 0x23f000-0x23ffff:E, 0x240000-0x240fff:E, 0x241000-0x241fff:E, 0x242000-0x242fff:E, 0x243000-0x243fff:E, 0x244000-0x244fff:E, 0x245000-0x245fff:E, 0x246000-0x246fff:E, 0x247000-0x247fff:E, 0x248000-0x248fff:E, 0x249000-0x249fff:E, 0x24a000-0x24afff:E, 0x24b000-0x24bfff:E, 0x24c000-0x24cfff:E, 0x24d000-0x24dfff:E, 0x24e000-0x24efff:E, 0x24f000-0x24ffff:E, 0x250000-0x250fff:E, 0x251000-0x251fff:E, 0x252000-0x252fff:E, 0x253000-0x253fff:E, 0x254000-0x254fff:E, 0x255000-0x255fff:E, 0x256000-0x256fff:E, 0x257000-0x257fff:E, 0x258000-0x258fff:E, 0x259000-0x259fff:E, 0x25a000-0x25afff:E, 0x25b000-0x25bfff:E, 0x25c000-0x25cfff:E, 0x25d000-0x25dfff:E, 0x25e000-0x25efff:E, 0x25f000-0x25ffff:E, 0x260000-0x260fff:E, 0x261000-0x261fff:E, 0x262000-0x262fff:E, 0x263000-0x263fff:E, 0x264000-0x264fff:E, 0x265000-0x265fff:E, 0x266000-0x266fff:E, 0x267000-0x267fff:E, 0x268000-0x268fff:E, 0x269000-0x269fff:E, 0x26a000-0x26afff:E, 0x26b000-0x26bfff:E, 0x26c000-0x26cfff:E, 0x26d000-0x26dfff:E, 0x26e000-0x26efff:E, 0x26f000-0x26ffff:E, 0x270000-0x270fff:E, 0x271000-0x271fff:E, 0x272000-0x272fff:E, 0x273000-0x273fff:E, 0x274000-0x274fff:E, 0x275000-0x275fff:E, 0x276000-0x276fff:E, 0x277000-0x277fff:E, 0x278000-0x278fff:E, 0x279000-0x279fff:E, 0x27a000-0x27afff:E, 0x27b000-0x27bfff:E, 0x27c000-0x27cfff:E, 0x27d000-0x27dfff:E, 0x27e000-0x27efff:E, 0x27f000-0x27ffff:E, 0x280000-0x280fff:E, 0x281000-0x281fff:E, 0x282000-0x282fff:E, 0x283000-0x283fff:E, 0x284000-0x284fff:E, 0x285000-0x285fff:E, 0x286000-0x286fff:E, 0x287000-0x287fff:E, 0x288000-0x288fff:E, 0x289000-0x289fff:E, 0x28a000-0x28afff:E, 0x28b000-0x28bfff:E, 0x28c000-0x28cfff:E, 0x28d000-0x28dfff:E, 0x28e000-0x28efff:E, 0x28f000-0x28ffff:E, 0x290000-0x290fff:E, 0x291000-0x291fff:E, 0x292000-0x292fff:E, 0x293000-0x293fff:E, 0x294000-0x294fff:E, 0x295000-0x295fff:E, 0x296000-0x296fff:E, 0x297000-0x297fff:E, 0x298000-0x298fff:E, 0x299000-0x299fff:E, 0x29a000-0x29afff:E, 0x29b000-0x29bfff:E, 0x29c000-0x29cfff:E, 0x29d000-0x29dfff:E, 0x29e000-0x29efff:E, 0x29f000-0x29ffff:E, 0x2a0000-0x2a0fff:E, 0x2a1000-0x2a1fff:E, 0x2a2000-0x2a2fff:E, 0x2a3000-0x2a3fff:E, 0x2a4000-0x2a4fff:E, 0x2a5000-0x2a5fff:E, 0x2a6000-0x2a6fff:E, 0x2a7000-0x2a7fff:E, 0x2a8000-0x2a8fff:E, 0x2a9000-0x2a9fff:E, 0x2aa000-0x2aafff:E, 0x2ab000-0x2abfff:E, 0x2ac000-0x2acfff:E, 0x2ad000-0x2adfff:E, 0x2ae000-0x2aefff:E, 0x2af000-0x2affff:E, 0x2b0000-0x2b0fff:E, 0x2b1000-0x2b1fff:E, 0x2b2000-0x2b2fff:E, 0x2b3000-0x2b3fff:E, 0x2b4000-0x2b4fff:E, 0x2b5000-0x2b5fff:E, 0x2b6000-0x2b6fff:E, 0x2b7000-0x2b7fff:E, 0x2b8000-0x2b8fff:E, 0x2b9000-0x2b9fff:E, 0x2ba000-0x2bafff:E, 0x2bb000-0x2bbfff:E, 0x2bc000-0x2bcfff:E, 0x2bd000-0x2bdfff:E, 0x2be000-0x2befff:E, 0x2bf000-0x2bffff:E, 0x2c0000-0x2c0fff:E, 0x2c1000-0x2c1fff:E, 0x2c2000-0x2c2fff:E, 0x2c3000-0x2c3fff:E, 0x2c4000-0x2c4fff:E, 0x2c5000-0x2c5fff:E, 0x2c6000-0x2c6fff:E, 0x2c7000-0x2c7fff:E, 0x2c8000-0x2c8fff:E, 0x2c9000-0x2c9fff:E, 0x2ca000-0x2cafff:E, 0x2cb000-0x2cbfff:E, 0x2cc000-0x2ccfff:E, 0x2cd000-0x2cdfff:E, 0x2ce000-0x2cefff:E, 0x2cf000-0x2cffff:E, 0x2d0000-0x2d0fff:E, 0x2d1000-0x2d1fff:E, 0x2d2000-0x2d2fff:E, 0x2d3000-0x2d3fff:E, 0x2d4000-0x2d4fff:E, 0x2d5000-0x2d5fff:E, 0x2d6000-0x2d6fff:E, 0x2d7000-0x2d7fff:E, 0x2d8000-0x2d8fff:E, 0x2d9000-0x2d9fff:E, 0x2da000-0x2dafff:E, 0x2db000-0x2dbfff:E, 0x2dc000-0x2dcfff:E, 0x2dd000-0x2ddfff:E, 0x2de000-0x2defff:E, 0x2df000-0x2dffff:E, 0x2e0000-0x2e0fff:E, 0x2e1000-0x2e1fff:E, 0x2e2000-0x2e2fff:E, 0x2e3000-0x2e3fff:E, 0x2e4000-0x2e4fff:E, 0x2e5000-0x2e5fff:E, 0x2e6000-0x2e6fff:E, 0x2e7000-0x2e7fff:E, 0x2e8000-0x2e8fff:E, 0x2e9000-0x2e9fff:E, 0x2ea000-0x2eafff:E, 0x2eb000-0x2ebfff:E, 0x2ec000-0x2ecfff:E, 0x2ed000-0x2edfff:E, 0x2ee000-0x2eefff:E, 0x2ef000-0x2effff:E, 0x2f0000-0x2f0fff:E, 0x2f1000-0x2f1fff:E, 0x2f2000-0x2f2fff:E, 0x2f3000-0x2f3fff:E, 0x2f4000-0x2f4fff:E, 0x2f5000-0x2f5fff:E, 0x2f6000-0x2f6fff:E, 0x2f7000-0x2f7fff:E, 0x2f8000-0x2f8fff:E, 0x2f9000-0x2f9fff:E, 0x2fa000-0x2fafff:E, 0x2fb000-0x2fbfff:E, 0x2fc000-0x2fcfff:E, 0x2fd000-0x2fdfff:E, 0x2fe000-0x2fefff:E, 0x2ff000-0x2fffff:E, 0x300000-0x300fff:E, 0x301000-0x301fff:E, 0x302000-0x302fff:E, 0x303000-0x303fff:E, 0x304000-0x304fff:E, 0x305000-0x305fff:E, 0x306000-0x306fff:E, 0x307000-0x307fff:E, 0x308000-0x308fff:E, 0x309000-0x309fff:E, 0x30a000-0x30afff:E, 0x30b000-0x30bfff:E, 0x30c000-0x30cfff:E, 0x30d000-0x30dfff:E, 0x30e000-0x30efff:E, 0x30f000-0x30ffff:E, 0x310000-0x310fff:E, 0x311000-0x311fff:E, 0x312000-0x312fff:E, 0x313000-0x313fff:E, 0x314000-0x314fff:E, 0x315000-0x315fff:E, 0x316000-0x316fff:E, 0x317000-0x317fff:E, 0x318000-0x318fff:E, 0x319000-0x319fff:E, 0x31a000-0x31afff:E, 0x31b000-0x31bfff:E, 0x31c000-0x31cfff:E, 0x31d000-0x31dfff:E, 0x31e000-0x31efff:E, 0x31f000-0x31ffff:E, 0x320000-0x320fff:E, 0x321000-0x321fff:E, 0x322000-0x322fff:E, 0x323000-0x323fff:E, 0x324000-0x324fff:E, 0x325000-0x325fff:E, 0x326000-0x326fff:E, 0x327000-0x327fff:E, 0x328000-0x328fff:E, 0x329000-0x329fff:E, 0x32a000-0x32afff:E, 0x32b000-0x32bfff:E, 0x32c000-0x32cfff:E, 0x32d000-0x32dfff:E, 0x32e000-0x32efff:E, 0x32f000-0x32ffff:E, 0x330000-0x330fff:E, 0x331000-0x331fff:E, 0x332000-0x332fff:E, 0x333000-0x333fff:E, 0x334000-0x334fff:E, 0x335000-0x335fff:E, 0x336000-0x336fff:E, 0x337000-0x337fff:E, 0x338000-0x338fff:E, 0x339000-0x339fff:E, 0x33a000-0x33afff:E, 0x33b000-0x33bfff:E, 0x33c000-0x33cfff:E, 0x33d000-0x33dfff:E, 0x33e000-0x33efff:E, 0x33f000-0x33ffff:E, 0x340000-0x340fff:E, 0x341000-0x341fff:E, 0x342000-0x342fff:E, 0x343000-0x343fff:E, 0x344000-0x344fff:E, 0x345000-0x345fff:E, 0x346000-0x346fff:E, 0x347000-0x347fff:E, 0x348000-0x348fff:E, 0x349000-0x349fff:E, 0x34a000-0x34afff:E, 0x34b000-0x34bfff:E, 0x34c000-0x34cfff:E, 0x34d000-0x34dfff:E, 0x34e000-0x34efff:E, 0x34f000-0x34ffff:E, 0x350000-0x350fff:E, 0x351000-0x351fff:E, 0x352000-0x352fff:E, 0x353000-0x353fff:E, 0x354000-0x354fff:E, 0x355000-0x355fff:E, 0x356000-0x356fff:E, 0x357000-0x357fff:E, 0x358000-0x358fff:E, 0x359000-0x359fff:E, 0x35a000-0x35afff:E, 0x35b000-0x35bfff:E, 0x35c000-0x35cfff:E, 0x35d000-0x35dfff:E, 0x35e000-0x35efff:E, 0x35f000-0x35ffff:E, 0x360000-0x360fff:E, 0x361000-0x361fff:E, 0x362000-0x362fff:E, 0x363000-0x363fff:E, 0x364000-0x364fff:E, 0x365000-0x365fff:E, 0x366000-0x366fff:E, 0x367000-0x367fff:E, 0x368000-0x368fff:E, 0x369000-0x369fff:E, 0x36a000-0x36afff:E, 0x36b000-0x36bfff:E, 0x36c000-0x36cfff:E, 0x36d000-0x36dfff:E, 0x36e000-0x36efff:E, 0x36f000-0x36ffff:E, 0x370000-0x370fff:E, 0x371000-0x371fff:E, 0x372000-0x372fff:E, 0x373000-0x373fff:E, 0x374000-0x374fff:E, 0x375000-0x375fff:E, 0x376000-0x376fff:E, 0x377000-0x377fff:E, 0x378000-0x378fff:E, 0x379000-0x379fff:E, 0x37a000-0x37afff:E, 0x37b000-0x37bfff:E, 0x37c000-0x37cfff:E, 0x37d000-0x37dfff:E, 0x37e000-0x37efff:E, 0x37f000-0x37ffff:E, 0x380000-0x380fff:E, 0x381000-0x381fff:E, 0x382000-0x382fff:E, 0x383000-0x383fff:E, 0x384000-0x384fff:E, 0x385000-0x385fff:E, 0x386000-0x386fff:E, 0x387000-0x387fff:E, 0x388000-0x388fff:E, 0x389000-0x389fff:E, 0x38a000-0x38afff:E, 0x38b000-0x38bfff:E, 0x38c000-0x38cfff:E, 0x38d000-0x38dfff:E, 0x38e000-0x38efff:E, 0x38f000-0x38ffff:E, 0x390000-0x390fff:E, 0x391000-0x391fff:E, 0x392000-0x392fff:E, 0x393000-0x393fff:E, 0x394000-0x394fff:E, 0x395000-0x395fff:E, 0x396000-0x396fff:E, 0x397000-0x397fff:E, 0x398000-0x398fff:E, 0x399000-0x399fff:E, 0x39a000-0x39afff:E, 0x39b000-0x39bfff:E, 0x39c000-0x39cfff:E, 0x39d000-0x39dfff:E, 0x39e000-0x39efff:E, 0x39f000-0x39ffff:E, 0x3a0000-0x3a0fff:E, 0x3a1000-0x3a1fff:E, 0x3a2000-0x3a2fff:E, 0x3a3000-0x3a3fff:E, 0x3a4000-0x3a4fff:E, 0x3a5000-0x3a5fff:E, 0x3a6000-0x3a6fff:E, 0x3a7000-0x3a7fff:E, 0x3a8000-0x3a8fff:E, 0x3a9000-0x3a9fff:E, 0x3aa000-0x3aafff:E, 0x3ab000-0x3abfff:E, 0x3ac000-0x3acfff:E, 0x3ad000-0x3adfff:E, 0x3ae000-0x3aefff:E, 0x3af000-0x3affff:E, 0x3b0000-0x3b0fff:E, 0x3b1000-0x3b1fff:E, 0x3b2000-0x3b2fff:E, 0x3b3000-0x3b3fff:E, 0x3b4000-0x3b4fff:E, 0x3b5000-0x3b5fff:E, 0x3b6000-0x3b6fff:E, 0x3b7000-0x3b7fff:E, 0x3b8000-0x3b8fff:E, 0x3b9000-0x3b9fff:E, 0x3ba000-0x3bafff:E, 0x3bb000-0x3bbfff:E, 0x3bc000-0x3bcfff:E, 0x3bd000-0x3bdfff:E, 0x3be000-0x3befff:E, 0x3bf000-0x3bffff:E, 0x3c0000-0x3c0fff:E, 0x3c1000-0x3c1fff:E, 0x3c2000-0x3c2fff:E, 0x3c3000-0x3c3fff:E, 0x3c4000-0x3c4fff:E, 0x3c5000-0x3c5fff:E, 0x3c6000-0x3c6fff:E, 0x3c7000-0x3c7fff:E, 0x3c8000-0x3c8fff:E, 0x3c9000-0x3c9fff:E, 0x3ca000-0x3cafff:E, 0x3cb000-0x3cbfff:E, 0x3cc000-0x3ccfff:E, 0x3cd000-0x3cdfff:E, 0x3ce000-0x3cefff:E, 0x3cf000-0x3cffff:E, 0x3d0000-0x3d0fff:E, 0x3d1000-0x3d1fff:E, 0x3d2000-0x3d2fff:E, 0x3d3000-0x3d3fff:E, 0x3d4000-0x3d4fff:E, 0x3d5000-0x3d5fff:E, 0x3d6000-0x3d6fff:E, 0x3d7000-0x3d7fff:E, 0x3d8000-0x3d8fff:E, 0x3d9000-0x3d9fff:E, 0x3da000-0x3dafff:E, 0x3db000-0x3dbfff:E, 0x3dc000-0x3dcfff:E, 0x3dd000-0x3ddfff:E, 0x3de000-0x3defff:E, 0x3df000-0x3dffff:E, 0x3e0000-0x3e0fff:E, 0x3e1000-0x3e1fff:E, 0x3e2000-0x3e2fff:E, 0x3e3000-0x3e3fff:E, 0x3e4000-0x3e4fff:E, 0x3e5000-0x3e5fff:E, 0x3e6000-0x3e6fff:E, 0x3e7000-0x3e7fff:E, 0x3e8000-0x3e8fff:E, 0x3e9000-0x3e9fff:E, 0x3ea000-0x3eafff:E, 0x3eb000-0x3ebfff:E, 0x3ec000-0x3ecfff:E, 0x3ed000-0x3edfff:E, 0x3ee000-0x3eefff:E, 0x3ef000-0x3effff:E, 0x3f0000-0x3f0fff:E, 0x3f1000-0x3f1fff:E, 0x3f2000-0x3f2fff:E, 0x3f3000-0x3f3fff:E, 0x3f4000-0x3f4fff:E, 0x3f5000-0x3f5fff:E, 0x3f6000-0x3f6fff:E, 0x3f7000-0x3f7fff:E, 0x3f8000-0x3f8fff:E, 0x3f9000-0x3f9fff:E, 0x3fa000-0x3fafff:E, 0x3fb000-0x3fbfff:E, 0x3fc000-0x3fcfff:E, 0x3fd000-0x3fdfff:E, 0x3fe000-0x3fefff:E, 0x3ff000-0x3fffff:E Erase/write done. -------------- next part -------------- flashrom v0.9.5.2-r1547 on Linux 3.5.0-rc5 (i686) flashrom is free software, get the source code at http://www.flashrom.org flashrom was built with libpci 3.0.0, GCC 4.4.3, little endian Command line (2 args): flashrom -Vr orig_1.40_1.rom Calibrating delay loop... OS timer resolution is 1 usecs, 936M loops per second, 10 myus = 10 us, 100 myus = 100 us, 1000 myus = 1012 us, 10000 myus = 9998 us, 4 myus = 4 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: "ASRock" DMI string baseboard-product-name: "880G Pro3" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=0, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=1, DropOneClkOnRd=0 NormSpeed is 16.5 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Chip status register is 10 Found Atmel flash chip "AT25DF321A" (4096 kB, SPI) at physical address 0xffc00000. Ignoring security lockdown (if present) Ignoring status register byte 2 Chip status register is 10 Chip status register: Sector Protection Register Lock (SRPL) is not set Chip status register: Bit 6 is not set Chip status register: Erase/Program Error (EPE) is not set Chip status register: WP# pin (WPP) is not asserted Chip status register: Software Protection Status (SWP): no sectors are protected Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Unknown SFDP-capable chip, 0 kB: No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0xf6, id2 0x8c, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xf6, id2 0x8c, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0xf6, id2 0x8c, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xf6, id2 0x8c, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0x08, id2 0x8a, id1 is normal flash content, id2 is normal flash content Found Atmel flash chip "AT25DF321A" (4096 kB, SPI). This chip may contain one-time programmable memory. flashrom cannot read and may never be able to write it, hence it may not be able to completely clone the contents of this chip (see man page for details). === This flash part has status UNTESTED for operations: READ ERASE WRITE The test status of this chip may have been updated in the latest development version of flashrom. If you are running the latest development version, please email a report to flashrom at flashrom.org if any of the above operations work correctly for you with this flash part. Please include the flashrom output with the additional -V option for all operations you tested (-V, -Vr, -VE, -Vw), and mention which mainboard or programmer you tested. Please mention your board in the subject line. Thanks for your help! Ignoring security lockdown (if present) Reading flash... done. -------------- next part -------------- flashrom v0.9.5.2-r1547 on Linux 3.5.0-rc5 (i686) flashrom is free software, get the source code at http://www.flashrom.org flashrom was built with libpci 3.0.0, GCC 4.4.3, little endian Command line (2 args): flashrom -Vw orig_1.40.rom Calibrating delay loop... OS timer resolution is 1 usecs, 937M loops per second, 10 myus = 10 us, 100 myus = 100 us, 1000 myus = 999 us, 10000 myus = 10000 us, 4 myus = 4 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: "ASRock" DMI string baseboard-product-name: "880G Pro3" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=0, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=1, DropOneClkOnRd=0 NormSpeed is 16.5 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Chip status register is 10 Found Atmel flash chip "AT25DF321A" (4096 kB, SPI) at physical address 0xffc00000. Ignoring security lockdown (if present) Ignoring status register byte 2 Chip status register is 10 Chip status register: Sector Protection Register Lock (SRPL) is not set Chip status register: Bit 6 is not set Chip status register: Erase/Program Error (EPE) is not set Chip status register: WP# pin (WPP) is not asserted Chip status register: Software Protection Status (SWP): no sectors are protected Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x0, id2 0x0 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Unknown SFDP-capable chip, 0 kB: No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0x1f, id2 0x4701 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0x0, id2 0x0 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Atmel flash chip "AT25DF321A" (4096 kB, SPI). This chip may contain one-time programmable memory. flashrom cannot read and may never be able to write it, hence it may not be able to completely clone the contents of this chip (see man page for details). === This flash part has status UNTESTED for operations: READ ERASE WRITE The test status of this chip may have been updated in the latest development version of flashrom. If you are running the latest development version, please email a report to flashrom at flashrom.org if any of the above operations work correctly for you with this flash part. Please include the flashrom output with the additional -V option for all operations you tested (-V, -Vr, -VE, -Vw), and mention which mainboard or programmer you tested. Please mention your board in the subject line. Thanks for your help! Ignoring security lockdown (if present) Flash image seems to be a legacy BIOS. Disabling coreboot-related checks. Reading old flash chip contents... done. Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:W, 0x001000-0x001fff:W, 0x002000-0x002fff:W, 0x003000-0x003fff:W, 0x004000-0x004fff:W, 0x005000-0x005fff:W, 0x006000-0x006fff:W, 0x007000-0x007fff:W, 0x008000-0x008fff:W, 0x009000-0x009fff:W, 0x00a000-0x00afff:W, 0x00b000-0x00bfff:S, 0x00c000-0x00cfff:S, 0x00d000-0x00dfff:S, 0x00e000-0x00efff:S, 0x00f000-0x00ffff:W, 0x010000-0x010fff:S, 0x011000-0x011fff:S, 0x012000-0x012fff:S, 0x013000-0x013fff:S, 0x014000-0x014fff:S, 0x015000-0x015fff:S, 0x016000-0x016fff:S, 0x017000-0x017fff:S, 0x018000-0x018fff:S, 0x019000-0x019fff:S, 0x01a000-0x01afff:S, 0x01b000-0x01bfff:S, 0x01c000-0x01cfff:S, 0x01d000-0x01dfff:S, 0x01e000-0x01efff:S, 0x01f000-0x01ffff:S, 0x020000-0x020fff:W, 0x021000-0x021fff:W, 0x022000-0x022fff:W, 0x023000-0x023fff:W, 0x024000-0x024fff:W, 0x025000-0x025fff:W, 0x026000-0x026fff:W, 0x027000-0x027fff:W, 0x028000-0x028fff:W, 0x029000-0x029fff:W, 0x02a000-0x02afff:W, 0x02b000-0x02bfff:W, 0x02c000-0x02cfff:W, 0x02d000-0x02dfff:W, 0x02e000-0x02efff:W, 0x02f000-0x02ffff:W, 0x030000-0x030fff:W, 0x031000-0x031fff:W, 0x032000-0x032fff:W, 0x033000-0x033fff:W, 0x034000-0x034fff:W, 0x035000-0x035fff:W, 0x036000-0x036fff:W, 0x037000-0x037fff:W, 0x038000-0x038fff:W, 0x039000-0x039fff:W, 0x03a000-0x03afff:W, 0x03b000-0x03bfff:W, 0x03c000-0x03cfff:W, 0x03d000-0x03dfff:W, 0x03e000-0x03efff:W, 0x03f000-0x03ffff:W, 0x040000-0x040fff:W, 0x041000-0x041fff:W, 0x042000-0x042fff:W, 0x043000-0x043fff:W, 0x044000-0x044fff:W, 0x045000-0x045fff:W, 0x046000-0x046fff:W, 0x047000-0x047fff:W, 0x048000-0x048fff:W, 0x049000-0x049fff:W, 0x04a000-0x04afff:W, 0x04b000-0x04bfff:W, 0x04c000-0x04cfff:W, 0x04d000-0x04dfff:W, 0x04e000-0x04efff:W, 0x04f000-0x04ffff:W, 0x050000-0x050fff:W, 0x051000-0x051fff:W, 0x052000-0x052fff:W, 0x053000-0x053fff:W, 0x054000-0x054fff:W, 0x055000-0x055fff:W, 0x056000-0x056fff:W, 0x057000-0x057fff:W, 0x058000-0x058fff:W, 0x059000-0x059fff:W, 0x05a000-0x05afff:W, 0x05b000-0x05bfff:W, 0x05c000-0x05cfff:W, 0x05d000-0x05dfff:W, 0x05e000-0x05efff:W, 0x05f000-0x05ffff:W, 0x060000-0x060fff:W, 0x061000-0x061fff:W, 0x062000-0x062fff:W, 0x063000-0x063fff:W, 0x064000-0x064fff:W, 0x065000-0x065fff:W, 0x066000-0x066fff:W, 0x067000-0x067fff:W, 0x068000-0x068fff:W, 0x069000-0x069fff:W, 0x06a000-0x06afff:W, 0x06b000-0x06bfff:W, 0x06c000-0x06cfff:W, 0x06d000-0x06dfff:W, 0x06e000-0x06efff:W, 0x06f000-0x06ffff:W, 0x070000-0x070fff:W, 0x071000-0x071fff:W, 0x072000-0x072fff:W, 0x073000-0x073fff:W, 0x074000-0x074fff:W, 0x075000-0x075fff:W, 0x076000-0x076fff:W, 0x077000-0x077fff:W, 0x078000-0x078fff:W, 0x079000-0x079fff:W, 0x07a000-0x07afff:W, 0x07b000-0x07bfff:W, 0x07c000-0x07cfff:W, 0x07d000-0x07dfff:W, 0x07e000-0x07efff:W, 0x07f000-0x07ffff:W, 0x080000-0x080fff:W, 0x081000-0x081fff:W, 0x082000-0x082fff:W, 0x083000-0x083fff:W, 0x084000-0x084fff:W, 0x085000-0x085fff:W, 0x086000-0x086fff:W, 0x087000-0x087fff:W, 0x088000-0x088fff:W, 0x089000-0x089fff:W, 0x08a000-0x08afff:W, 0x08b000-0x08bfff:W, 0x08c000-0x08cfff:W, 0x08d000-0x08dfff:W, 0x08e000-0x08efff:W, 0x08f000-0x08ffff:W, 0x090000-0x090fff:W, 0x091000-0x091fff:W, 0x092000-0x092fff:W, 0x093000-0x093fff:W, 0x094000-0x094fff:W, 0x095000-0x095fff:W, 0x096000-0x096fff:W, 0x097000-0x097fff:W, 0x098000-0x098fff:W, 0x099000-0x099fff:W, 0x09a000-0x09afff:W, 0x09b000-0x09bfff:W, 0x09c000-0x09cfff:W, 0x09d000-0x09dfff:W, 0x09e000-0x09efff:W, 0x09f000-0x09ffff:W, 0x0a0000-0x0a0fff:W, 0x0a1000-0x0a1fff:W, 0x0a2000-0x0a2fff:W, 0x0a3000-0x0a3fff:W, 0x0a4000-0x0a4fff:W, 0x0a5000-0x0a5fff:W, 0x0a6000-0x0a6fff:W, 0x0a7000-0x0a7fff:W, 0x0a8000-0x0a8fff:W, 0x0a9000-0x0a9fff:W, 0x0aa000-0x0aafff:W, 0x0ab000-0x0abfff:W, 0x0ac000-0x0acfff:W, 0x0ad000-0x0adfff:W, 0x0ae000-0x0aefff:W, 0x0af000-0x0affff:W, 0x0b0000-0x0b0fff:W, 0x0b1000-0x0b1fff:W, 0x0b2000-0x0b2fff:W, 0x0b3000-0x0b3fff:W, 0x0b4000-0x0b4fff:W, 0x0b5000-0x0b5fff:W, 0x0b6000-0x0b6fff:W, 0x0b7000-0x0b7fff:W, 0x0b8000-0x0b8fff:W, 0x0b9000-0x0b9fff:W, 0x0ba000-0x0bafff:W, 0x0bb000-0x0bbfff:W, 0x0bc000-0x0bcfff:W, 0x0bd000-0x0bdfff:W, 0x0be000-0x0befff:W, 0x0bf000-0x0bffff:W, 0x0c0000-0x0c0fff:W, 0x0c1000-0x0c1fff:W, 0x0c2000-0x0c2fff:W, 0x0c3000-0x0c3fff:W, 0x0c4000-0x0c4fff:W, 0x0c5000-0x0c5fff:W, 0x0c6000-0x0c6fff:W, 0x0c7000-0x0c7fff:W, 0x0c8000-0x0c8fff:W, 0x0c9000-0x0c9fff:W, 0x0ca000-0x0cafff:W, 0x0cb000-0x0cbfff:W, 0x0cc000-0x0ccfff:W, 0x0cd000-0x0cdfff:W, 0x0ce000-0x0cefff:W, 0x0cf000-0x0cffff:W, 0x0d0000-0x0d0fff:W, 0x0d1000-0x0d1fff:W, 0x0d2000-0x0d2fff:W, 0x0d3000-0x0d3fff:W, 0x0d4000-0x0d4fff:W, 0x0d5000-0x0d5fff:W, 0x0d6000-0x0d6fff:W, 0x0d7000-0x0d7fff:W, 0x0d8000-0x0d8fff:W, 0x0d9000-0x0d9fff:W, 0x0da000-0x0dafff:W, 0x0db000-0x0dbfff:W, 0x0dc000-0x0dcfff:W, 0x0dd000-0x0ddfff:W, 0x0de000-0x0defff:W, 0x0df000-0x0dffff:W, 0x0e0000-0x0e0fff:W, 0x0e1000-0x0e1fff:W, 0x0e2000-0x0e2fff:W, 0x0e3000-0x0e3fff:W, 0x0e4000-0x0e4fff:W, 0x0e5000-0x0e5fff:W, 0x0e6000-0x0e6fff:W, 0x0e7000-0x0e7fff:W, 0x0e8000-0x0e8fff:W, 0x0e9000-0x0e9fff:W, 0x0ea000-0x0eafff:W, 0x0eb000-0x0ebfff:W, 0x0ec000-0x0ecfff:W, 0x0ed000-0x0edfff:W, 0x0ee000-0x0eefff:W, 0x0ef000-0x0effff:W, 0x0f0000-0x0f0fff:W, 0x0f1000-0x0f1fff:W, 0x0f2000-0x0f2fff:W, 0x0f3000-0x0f3fff:W, 0x0f4000-0x0f4fff:W, 0x0f5000-0x0f5fff:W, 0x0f6000-0x0f6fff:W, 0x0f7000-0x0f7fff:W, 0x0f8000-0x0f8fff:W, 0x0f9000-0x0f9fff:W, 0x0fa000-0x0fafff:W, 0x0fb000-0x0fbfff:W, 0x0fc000-0x0fcfff:W, 0x0fd000-0x0fdfff:W, 0x0fe000-0x0fefff:W, 0x0ff000-0x0fffff:W, 0x100000-0x100fff:W, 0x101000-0x101fff:W, 0x102000-0x102fff:W, 0x103000-0x103fff:W, 0x104000-0x104fff:W, 0x105000-0x105fff:W, 0x106000-0x106fff:W, 0x107000-0x107fff:W, 0x108000-0x108fff:W, 0x109000-0x109fff:W, 0x10a000-0x10afff:W, 0x10b000-0x10bfff:W, 0x10c000-0x10cfff:W, 0x10d000-0x10dfff:W, 0x10e000-0x10efff:W, 0x10f000-0x10ffff:W, 0x110000-0x110fff:W, 0x111000-0x111fff:W, 0x112000-0x112fff:W, 0x113000-0x113fff:W, 0x114000-0x114fff:W, 0x115000-0x115fff:W, 0x116000-0x116fff:W, 0x117000-0x117fff:W, 0x118000-0x118fff:W, 0x119000-0x119fff:W, 0x11a000-0x11afff:W, 0x11b000-0x11bfff:W, 0x11c000-0x11cfff:W, 0x11d000-0x11dfff:W, 0x11e000-0x11efff:W, 0x11f000-0x11ffff:W, 0x120000-0x120fff:W, 0x121000-0x121fff:W, 0x122000-0x122fff:W, 0x123000-0x123fff:W, 0x124000-0x124fff:W, 0x125000-0x125fff:W, 0x126000-0x126fff:W, 0x127000-0x127fff:W, 0x128000-0x128fff:W, 0x129000-0x129fff:W, 0x12a000-0x12afff:W, 0x12b000-0x12bfff:W, 0x12c000-0x12cfff:W, 0x12d000-0x12dfff:W, 0x12e000-0x12efff:W, 0x12f000-0x12ffff:W, 0x130000-0x130fff:W, 0x131000-0x131fff:W, 0x132000-0x132fff:W, 0x133000-0x133fff:W, 0x134000-0x134fff:W, 0x135000-0x135fff:W, 0x136000-0x136fff:W, 0x137000-0x137fff:W, 0x138000-0x138fff:W, 0x139000-0x139fff:W, 0x13a000-0x13afff:W, 0x13b000-0x13bfff:W, 0x13c000-0x13cfff:W, 0x13d000-0x13dfff:W, 0x13e000-0x13efff:W, 0x13f000-0x13ffff:W, 0x140000-0x140fff:W, 0x141000-0x141fff:W, 0x142000-0x142fff:W, 0x143000-0x143fff:W, 0x144000-0x144fff:W, 0x145000-0x145fff:W, 0x146000-0x146fff:W, 0x147000-0x147fff:W, 0x148000-0x148fff:W, 0x149000-0x149fff:W, 0x14a000-0x14afff:W, 0x14b000-0x14bfff:W, 0x14c000-0x14cfff:W, 0x14d000-0x14dfff:W, 0x14e000-0x14efff:W, 0x14f000-0x14ffff:W, 0x150000-0x150fff:W, 0x151000-0x151fff:W, 0x152000-0x152fff:W, 0x153000-0x153fff:W, 0x154000-0x154fff:W, 0x155000-0x155fff:W, 0x156000-0x156fff:W, 0x157000-0x157fff:W, 0x158000-0x158fff:W, 0x159000-0x159fff:W, 0x15a000-0x15afff:W, 0x15b000-0x15bfff:W, 0x15c000-0x15cfff:W, 0x15d000-0x15dfff:W, 0x15e000-0x15efff:W, 0x15f000-0x15ffff:W, 0x160000-0x160fff:W, 0x161000-0x161fff:W, 0x162000-0x162fff:W, 0x163000-0x163fff:W, 0x164000-0x164fff:W, 0x165000-0x165fff:W, 0x166000-0x166fff:W, 0x167000-0x167fff:W, 0x168000-0x168fff:W, 0x169000-0x169fff:W, 0x16a000-0x16afff:W, 0x16b000-0x16bfff:W, 0x16c000-0x16cfff:W, 0x16d000-0x16dfff:W, 0x16e000-0x16efff:W, 0x16f000-0x16ffff:W, 0x170000-0x170fff:W, 0x171000-0x171fff:W, 0x172000-0x172fff:W, 0x173000-0x173fff:W, 0x174000-0x174fff:W, 0x175000-0x175fff:W, 0x176000-0x176fff:W, 0x177000-0x177fff:W, 0x178000-0x178fff:W, 0x179000-0x179fff:W, 0x17a000-0x17afff:W, 0x17b000-0x17bfff:W, 0x17c000-0x17cfff:W, 0x17d000-0x17dfff:W, 0x17e000-0x17efff:W, 0x17f000-0x17ffff:W, 0x180000-0x180fff:W, 0x181000-0x181fff:W, 0x182000-0x182fff:W, 0x183000-0x183fff:W, 0x184000-0x184fff:W, 0x185000-0x185fff:W, 0x186000-0x186fff:W, 0x187000-0x187fff:W, 0x188000-0x188fff:W, 0x189000-0x189fff:W, 0x18a000-0x18afff:W, 0x18b000-0x18bfff:W, 0x18c000-0x18cfff:W, 0x18d000-0x18dfff:W, 0x18e000-0x18efff:W, 0x18f000-0x18ffff:W, 0x190000-0x190fff:W, 0x191000-0x191fff:W, 0x192000-0x192fff:W, 0x193000-0x193fff:W, 0x194000-0x194fff:W, 0x195000-0x195fff:W, 0x196000-0x196fff:W, 0x197000-0x197fff:W, 0x198000-0x198fff:W, 0x199000-0x199fff:W, 0x19a000-0x19afff:W, 0x19b000-0x19bfff:W, 0x19c000-0x19cfff:W, 0x19d000-0x19dfff:W, 0x19e000-0x19efff:W, 0x19f000-0x19ffff:W, 0x1a0000-0x1a0fff:W, 0x1a1000-0x1a1fff:W, 0x1a2000-0x1a2fff:W, 0x1a3000-0x1a3fff:W, 0x1a4000-0x1a4fff:W, 0x1a5000-0x1a5fff:W, 0x1a6000-0x1a6fff:W, 0x1a7000-0x1a7fff:W, 0x1a8000-0x1a8fff:W, 0x1a9000-0x1a9fff:W, 0x1aa000-0x1aafff:W, 0x1ab000-0x1abfff:W, 0x1ac000-0x1acfff:W, 0x1ad000-0x1adfff:W, 0x1ae000-0x1aefff:W, 0x1af000-0x1affff:W, 0x1b0000-0x1b0fff:W, 0x1b1000-0x1b1fff:W, 0x1b2000-0x1b2fff:W, 0x1b3000-0x1b3fff:W, 0x1b4000-0x1b4fff:W, 0x1b5000-0x1b5fff:W, 0x1b6000-0x1b6fff:W, 0x1b7000-0x1b7fff:W, 0x1b8000-0x1b8fff:W, 0x1b9000-0x1b9fff:W, 0x1ba000-0x1bafff:W, 0x1bb000-0x1bbfff:W, 0x1bc000-0x1bcfff:W, 0x1bd000-0x1bdfff:W, 0x1be000-0x1befff:W, 0x1bf000-0x1bffff:W, 0x1c0000-0x1c0fff:W, 0x1c1000-0x1c1fff:W, 0x1c2000-0x1c2fff:W, 0x1c3000-0x1c3fff:W, 0x1c4000-0x1c4fff:W, 0x1c5000-0x1c5fff:W, 0x1c6000-0x1c6fff:W, 0x1c7000-0x1c7fff:W, 0x1c8000-0x1c8fff:W, 0x1c9000-0x1c9fff:W, 0x1ca000-0x1cafff:W, 0x1cb000-0x1cbfff:W, 0x1cc000-0x1ccfff:W, 0x1cd000-0x1cdfff:W, 0x1ce000-0x1cefff:W, 0x1cf000-0x1cffff:W, 0x1d0000-0x1d0fff:W, 0x1d1000-0x1d1fff:W, 0x1d2000-0x1d2fff:W, 0x1d3000-0x1d3fff:W, 0x1d4000-0x1d4fff:W, 0x1d5000-0x1d5fff:W, 0x1d6000-0x1d6fff:W, 0x1d7000-0x1d7fff:W, 0x1d8000-0x1d8fff:W, 0x1d9000-0x1d9fff:W, 0x1da000-0x1dafff:W, 0x1db000-0x1dbfff:W, 0x1dc000-0x1dcfff:W, 0x1dd000-0x1ddfff:W, 0x1de000-0x1defff:W, 0x1df000-0x1dffff:W, 0x1e0000-0x1e0fff:W, 0x1e1000-0x1e1fff:W, 0x1e2000-0x1e2fff:W, 0x1e3000-0x1e3fff:W, 0x1e4000-0x1e4fff:W, 0x1e5000-0x1e5fff:W, 0x1e6000-0x1e6fff:W, 0x1e7000-0x1e7fff:W, 0x1e8000-0x1e8fff:W, 0x1e9000-0x1e9fff:W, 0x1ea000-0x1eafff:W, 0x1eb000-0x1ebfff:W, 0x1ec000-0x1ecfff:W, 0x1ed000-0x1edfff:W, 0x1ee000-0x1eefff:W, 0x1ef000-0x1effff:W, 0x1f0000-0x1f0fff:W, 0x1f1000-0x1f1fff:W, 0x1f2000-0x1f2fff:W, 0x1f3000-0x1f3fff:W, 0x1f4000-0x1f4fff:W, 0x1f5000-0x1f5fff:W, 0x1f6000-0x1f6fff:W, 0x1f7000-0x1f7fff:W, 0x1f8000-0x1f8fff:W, 0x1f9000-0x1f9fff:W, 0x1fa000-0x1fafff:W, 0x1fb000-0x1fbfff:W, 0x1fc000-0x1fcfff:W, 0x1fd000-0x1fdfff:W, 0x1fe000-0x1fefff:W, 0x1ff000-0x1fffff:W, 0x200000-0x200fff:W, 0x201000-0x201fff:W, 0x202000-0x202fff:W, 0x203000-0x203fff:W, 0x204000-0x204fff:W, 0x205000-0x205fff:W, 0x206000-0x206fff:W, 0x207000-0x207fff:W, 0x208000-0x208fff:W, 0x209000-0x209fff:W, 0x20a000-0x20afff:W, 0x20b000-0x20bfff:W, 0x20c000-0x20cfff:W, 0x20d000-0x20dfff:W, 0x20e000-0x20efff:W, 0x20f000-0x20ffff:W, 0x210000-0x210fff:W, 0x211000-0x211fff:W, 0x212000-0x212fff:W, 0x213000-0x213fff:W, 0x214000-0x214fff:W, 0x215000-0x215fff:W, 0x216000-0x216fff:W, 0x217000-0x217fff:W, 0x218000-0x218fff:W, 0x219000-0x219fff:W, 0x21a000-0x21afff:W, 0x21b000-0x21bfff:W, 0x21c000-0x21cfff:W, 0x21d000-0x21dfff:W, 0x21e000-0x21efff:W, 0x21f000-0x21ffff:W, 0x220000-0x220fff:W, 0x221000-0x221fff:W, 0x222000-0x222fff:W, 0x223000-0x223fff:W, 0x224000-0x224fff:W, 0x225000-0x225fff:W, 0x226000-0x226fff:W, 0x227000-0x227fff:W, 0x228000-0x228fff:W, 0x229000-0x229fff:W, 0x22a000-0x22afff:W, 0x22b000-0x22bfff:W, 0x22c000-0x22cfff:W, 0x22d000-0x22dfff:W, 0x22e000-0x22efff:W, 0x22f000-0x22ffff:W, 0x230000-0x230fff:W, 0x231000-0x231fff:W, 0x232000-0x232fff:W, 0x233000-0x233fff:W, 0x234000-0x234fff:W, 0x235000-0x235fff:W, 0x236000-0x236fff:W, 0x237000-0x237fff:W, 0x238000-0x238fff:W, 0x239000-0x239fff:W, 0x23a000-0x23afff:W, 0x23b000-0x23bfff:W, 0x23c000-0x23cfff:W, 0x23d000-0x23dfff:W, 0x23e000-0x23efff:W, 0x23f000-0x23ffff:W, 0x240000-0x240fff:W, 0x241000-0x241fff:W, 0x242000-0x242fff:W, 0x243000-0x243fff:W, 0x244000-0x244fff:W, 0x245000-0x245fff:W, 0x246000-0x246fff:W, 0x247000-0x247fff:W, 0x248000-0x248fff:W, 0x249000-0x249fff:W, 0x24a000-0x24afff:W, 0x24b000-0x24bfff:W, 0x24c000-0x24cfff:W, 0x24d000-0x24dfff:W, 0x24e000-0x24efff:W, 0x24f000-0x24ffff:W, 0x250000-0x250fff:W, 0x251000-0x251fff:W, 0x252000-0x252fff:W, 0x253000-0x253fff:W, 0x254000-0x254fff:W, 0x255000-0x255fff:W, 0x256000-0x256fff:W, 0x257000-0x257fff:W, 0x258000-0x258fff:W, 0x259000-0x259fff:W, 0x25a000-0x25afff:W, 0x25b000-0x25bfff:W, 0x25c000-0x25cfff:W, 0x25d000-0x25dfff:W, 0x25e000-0x25efff:W, 0x25f000-0x25ffff:W, 0x260000-0x260fff:W, 0x261000-0x261fff:W, 0x262000-0x262fff:W, 0x263000-0x263fff:W, 0x264000-0x264fff:W, 0x265000-0x265fff:W, 0x266000-0x266fff:W, 0x267000-0x267fff:W, 0x268000-0x268fff:W, 0x269000-0x269fff:W, 0x26a000-0x26afff:W, 0x26b000-0x26bfff:W, 0x26c000-0x26cfff:W, 0x26d000-0x26dfff:W, 0x26e000-0x26efff:W, 0x26f000-0x26ffff:W, 0x270000-0x270fff:W, 0x271000-0x271fff:W, 0x272000-0x272fff:W, 0x273000-0x273fff:W, 0x274000-0x274fff:W, 0x275000-0x275fff:W, 0x276000-0x276fff:W, 0x277000-0x277fff:W, 0x278000-0x278fff:W, 0x279000-0x279fff:W, 0x27a000-0x27afff:W, 0x27b000-0x27bfff:W, 0x27c000-0x27cfff:W, 0x27d000-0x27dfff:W, 0x27e000-0x27efff:W, 0x27f000-0x27ffff:W, 0x280000-0x280fff:W, 0x281000-0x281fff:S, 0x282000-0x282fff:S, 0x283000-0x283fff:S, 0x284000-0x284fff:S, 0x285000-0x285fff:S, 0x286000-0x286fff:S, 0x287000-0x287fff:S, 0x288000-0x288fff:S, 0x289000-0x289fff:S, 0x28a000-0x28afff:S, 0x28b000-0x28bfff:S, 0x28c000-0x28cfff:S, 0x28d000-0x28dfff:S, 0x28e000-0x28efff:S, 0x28f000-0x28ffff:S, 0x290000-0x290fff:S, 0x291000-0x291fff:S, 0x292000-0x292fff:S, 0x293000-0x293fff:S, 0x294000-0x294fff:S, 0x295000-0x295fff:S, 0x296000-0x296fff:S, 0x297000-0x297fff:S, 0x298000-0x298fff:S, 0x299000-0x299fff:S, 0x29a000-0x29afff:S, 0x29b000-0x29bfff:S, 0x29c000-0x29cfff:S, 0x29d000-0x29dfff:S, 0x29e000-0x29efff:S, 0x29f000-0x29ffff:S, 0x2a0000-0x2a0fff:S, 0x2a1000-0x2a1fff:S, 0x2a2000-0x2a2fff:S, 0x2a3000-0x2a3fff:S, 0x2a4000-0x2a4fff:S, 0x2a5000-0x2a5fff:S, 0x2a6000-0x2a6fff:S, 0x2a7000-0x2a7fff:S, 0x2a8000-0x2a8fff:S, 0x2a9000-0x2a9fff:S, 0x2aa000-0x2aafff:S, 0x2ab000-0x2abfff:S, 0x2ac000-0x2acfff:S, 0x2ad000-0x2adfff:S, 0x2ae000-0x2aefff:S, 0x2af000-0x2affff:S, 0x2b0000-0x2b0fff:S, 0x2b1000-0x2b1fff:S, 0x2b2000-0x2b2fff:S, 0x2b3000-0x2b3fff:S, 0x2b4000-0x2b4fff:S, 0x2b5000-0x2b5fff:S, 0x2b6000-0x2b6fff:S, 0x2b7000-0x2b7fff:S, 0x2b8000-0x2b8fff:S, 0x2b9000-0x2b9fff:S, 0x2ba000-0x2bafff:S, 0x2bb000-0x2bbfff:S, 0x2bc000-0x2bcfff:S, 0x2bd000-0x2bdfff:S, 0x2be000-0x2befff:S, 0x2bf000-0x2bffff:S, 0x2c0000-0x2c0fff:S, 0x2c1000-0x2c1fff:S, 0x2c2000-0x2c2fff:S, 0x2c3000-0x2c3fff:S, 0x2c4000-0x2c4fff:S, 0x2c5000-0x2c5fff:S, 0x2c6000-0x2c6fff:S, 0x2c7000-0x2c7fff:S, 0x2c8000-0x2c8fff:S, 0x2c9000-0x2c9fff:S, 0x2ca000-0x2cafff:S, 0x2cb000-0x2cbfff:S, 0x2cc000-0x2ccfff:S, 0x2cd000-0x2cdfff:S, 0x2ce000-0x2cefff:S, 0x2cf000-0x2cffff:S, 0x2d0000-0x2d0fff:S, 0x2d1000-0x2d1fff:S, 0x2d2000-0x2d2fff:S, 0x2d3000-0x2d3fff:S, 0x2d4000-0x2d4fff:S, 0x2d5000-0x2d5fff:S, 0x2d6000-0x2d6fff:S, 0x2d7000-0x2d7fff:S, 0x2d8000-0x2d8fff:S, 0x2d9000-0x2d9fff:S, 0x2da000-0x2dafff:S, 0x2db000-0x2dbfff:S, 0x2dc000-0x2dcfff:S, 0x2dd000-0x2ddfff:S, 0x2de000-0x2defff:S, 0x2df000-0x2dffff:S, 0x2e0000-0x2e0fff:S, 0x2e1000-0x2e1fff:S, 0x2e2000-0x2e2fff:S, 0x2e3000-0x2e3fff:S, 0x2e4000-0x2e4fff:S, 0x2e5000-0x2e5fff:S, 0x2e6000-0x2e6fff:S, 0x2e7000-0x2e7fff:S, 0x2e8000-0x2e8fff:S, 0x2e9000-0x2e9fff:S, 0x2ea000-0x2eafff:S, 0x2eb000-0x2ebfff:S, 0x2ec000-0x2ecfff:S, 0x2ed000-0x2edfff:S, 0x2ee000-0x2eefff:S, 0x2ef000-0x2effff:S, 0x2f0000-0x2f0fff:S, 0x2f1000-0x2f1fff:S, 0x2f2000-0x2f2fff:S, 0x2f3000-0x2f3fff:S, 0x2f4000-0x2f4fff:S, 0x2f5000-0x2f5fff:S, 0x2f6000-0x2f6fff:S, 0x2f7000-0x2f7fff:S, 0x2f8000-0x2f8fff:S, 0x2f9000-0x2f9fff:S, 0x2fa000-0x2fafff:S, 0x2fb000-0x2fbfff:S, 0x2fc000-0x2fcfff:S, 0x2fd000-0x2fdfff:S, 0x2fe000-0x2fefff:S, 0x2ff000-0x2fffff:S, 0x300000-0x300fff:S, 0x301000-0x301fff:S, 0x302000-0x302fff:S, 0x303000-0x303fff:S, 0x304000-0x304fff:S, 0x305000-0x305fff:S, 0x306000-0x306fff:S, 0x307000-0x307fff:S, 0x308000-0x308fff:S, 0x309000-0x309fff:S, 0x30a000-0x30afff:S, 0x30b000-0x30bfff:S, 0x30c000-0x30cfff:S, 0x30d000-0x30dfff:S, 0x30e000-0x30efff:S, 0x30f000-0x30ffff:S, 0x310000-0x310fff:W, 0x311000-0x311fff:W, 0x312000-0x312fff:W, 0x313000-0x313fff:W, 0x314000-0x314fff:W, 0x315000-0x315fff:W, 0x316000-0x316fff:W, 0x317000-0x317fff:W, 0x318000-0x318fff:W, 0x319000-0x319fff:W, 0x31a000-0x31afff:W, 0x31b000-0x31bfff:W, 0x31c000-0x31cfff:W, 0x31d000-0x31dfff:W, 0x31e000-0x31efff:W, 0x31f000-0x31ffff:W, 0x320000-0x320fff:W, 0x321000-0x321fff:W, 0x322000-0x322fff:W, 0x323000-0x323fff:W, 0x324000-0x324fff:W, 0x325000-0x325fff:W, 0x326000-0x326fff:W, 0x327000-0x327fff:W, 0x328000-0x328fff:W, 0x329000-0x329fff:W, 0x32a000-0x32afff:W, 0x32b000-0x32bfff:W, 0x32c000-0x32cfff:W, 0x32d000-0x32dfff:W, 0x32e000-0x32efff:W, 0x32f000-0x32ffff:W, 0x330000-0x330fff:W, 0x331000-0x331fff:W, 0x332000-0x332fff:W, 0x333000-0x333fff:W, 0x334000-0x334fff:W, 0x335000-0x335fff:W, 0x336000-0x336fff:W, 0x337000-0x337fff:W, 0x338000-0x338fff:W, 0x339000-0x339fff:W, 0x33a000-0x33afff:W, 0x33b000-0x33bfff:W, 0x33c000-0x33cfff:W, 0x33d000-0x33dfff:W, 0x33e000-0x33efff:W, 0x33f000-0x33ffff:W, 0x340000-0x340fff:W, 0x341000-0x341fff:W, 0x342000-0x342fff:W, 0x343000-0x343fff:W, 0x344000-0x344fff:W, 0x345000-0x345fff:W, 0x346000-0x346fff:W, 0x347000-0x347fff:W, 0x348000-0x348fff:W, 0x349000-0x349fff:W, 0x34a000-0x34afff:W, 0x34b000-0x34bfff:W, 0x34c000-0x34cfff:W, 0x34d000-0x34dfff:W, 0x34e000-0x34efff:W, 0x34f000-0x34ffff:W, 0x350000-0x350fff:W, 0x351000-0x351fff:W, 0x352000-0x352fff:W, 0x353000-0x353fff:W, 0x354000-0x354fff:W, 0x355000-0x355fff:W, 0x356000-0x356fff:W, 0x357000-0x357fff:W, 0x358000-0x358fff:W, 0x359000-0x359fff:W, 0x35a000-0x35afff:W, 0x35b000-0x35bfff:W, 0x35c000-0x35cfff:W, 0x35d000-0x35dfff:W, 0x35e000-0x35efff:W, 0x35f000-0x35ffff:W, 0x360000-0x360fff:W, 0x361000-0x361fff:W, 0x362000-0x362fff:W, 0x363000-0x363fff:W, 0x364000-0x364fff:W, 0x365000-0x365fff:W, 0x366000-0x366fff:W, 0x367000-0x367fff:W, 0x368000-0x368fff:W, 0x369000-0x369fff:W, 0x36a000-0x36afff:W, 0x36b000-0x36bfff:W, 0x36c000-0x36cfff:W, 0x36d000-0x36dfff:W, 0x36e000-0x36efff:W, 0x36f000-0x36ffff:W, 0x370000-0x370fff:W, 0x371000-0x371fff:W, 0x372000-0x372fff:W, 0x373000-0x373fff:W, 0x374000-0x374fff:W, 0x375000-0x375fff:W, 0x376000-0x376fff:W, 0x377000-0x377fff:W, 0x378000-0x378fff:W, 0x379000-0x379fff:W, 0x37a000-0x37afff:W, 0x37b000-0x37bfff:W, 0x37c000-0x37cfff:W, 0x37d000-0x37dfff:W, 0x37e000-0x37efff:W, 0x37f000-0x37ffff:W, 0x380000-0x380fff:W, 0x381000-0x381fff:W, 0x382000-0x382fff:W, 0x383000-0x383fff:W, 0x384000-0x384fff:W, 0x385000-0x385fff:S, 0x386000-0x386fff:S, 0x387000-0x387fff:S, 0x388000-0x388fff:S, 0x389000-0x389fff:S, 0x38a000-0x38afff:S, 0x38b000-0x38bfff:S, 0x38c000-0x38cfff:S, 0x38d000-0x38dfff:S, 0x38e000-0x38efff:S, 0x38f000-0x38ffff:S, 0x390000-0x390fff:S, 0x391000-0x391fff:S, 0x392000-0x392fff:S, 0x393000-0x393fff:S, 0x394000-0x394fff:S, 0x395000-0x395fff:S, 0x396000-0x396fff:S, 0x397000-0x397fff:S, 0x398000-0x398fff:S, 0x399000-0x399fff:S, 0x39a000-0x39afff:S, 0x39b000-0x39bfff:S, 0x39c000-0x39cfff:S, 0x39d000-0x39dfff:S, 0x39e000-0x39efff:S, 0x39f000-0x39ffff:S, 0x3a0000-0x3a0fff:S, 0x3a1000-0x3a1fff:S, 0x3a2000-0x3a2fff:S, 0x3a3000-0x3a3fff:S, 0x3a4000-0x3a4fff:S, 0x3a5000-0x3a5fff:S, 0x3a6000-0x3a6fff:S, 0x3a7000-0x3a7fff:S, 0x3a8000-0x3a8fff:S, 0x3a9000-0x3a9fff:S, 0x3aa000-0x3aafff:S, 0x3ab000-0x3abfff:S, 0x3ac000-0x3acfff:S, 0x3ad000-0x3adfff:S, 0x3ae000-0x3aefff:S, 0x3af000-0x3affff:S, 0x3b0000-0x3b0fff:S, 0x3b1000-0x3b1fff:S, 0x3b2000-0x3b2fff:S, 0x3b3000-0x3b3fff:S, 0x3b4000-0x3b4fff:S, 0x3b5000-0x3b5fff:S, 0x3b6000-0x3b6fff:S, 0x3b7000-0x3b7fff:S, 0x3b8000-0x3b8fff:S, 0x3b9000-0x3b9fff:S, 0x3ba000-0x3bafff:S, 0x3bb000-0x3bbfff:S, 0x3bc000-0x3bcfff:S, 0x3bd000-0x3bdfff:S, 0x3be000-0x3befff:S, 0x3bf000-0x3bffff:S, 0x3c0000-0x3c0fff:S, 0x3c1000-0x3c1fff:S, 0x3c2000-0x3c2fff:S, 0x3c3000-0x3c3fff:S, 0x3c4000-0x3c4fff:S, 0x3c5000-0x3c5fff:S, 0x3c6000-0x3c6fff:S, 0x3c7000-0x3c7fff:S, 0x3c8000-0x3c8fff:S, 0x3c9000-0x3c9fff:S, 0x3ca000-0x3cafff:S, 0x3cb000-0x3cbfff:S, 0x3cc000-0x3ccfff:S, 0x3cd000-0x3cdfff:S, 0x3ce000-0x3cefff:S, 0x3cf000-0x3cffff:S, 0x3d0000-0x3d0fff:S, 0x3d1000-0x3d1fff:S, 0x3d2000-0x3d2fff:S, 0x3d3000-0x3d3fff:S, 0x3d4000-0x3d4fff:S, 0x3d5000-0x3d5fff:S, 0x3d6000-0x3d6fff:S, 0x3d7000-0x3d7fff:S, 0x3d8000-0x3d8fff:S, 0x3d9000-0x3d9fff:S, 0x3da000-0x3dafff:S, 0x3db000-0x3dbfff:S, 0x3dc000-0x3dcfff:S, 0x3dd000-0x3ddfff:S, 0x3de000-0x3defff:S, 0x3df000-0x3dffff:S, 0x3e0000-0x3e0fff:S, 0x3e1000-0x3e1fff:S, 0x3e2000-0x3e2fff:S, 0x3e3000-0x3e3fff:S, 0x3e4000-0x3e4fff:S, 0x3e5000-0x3e5fff:S, 0x3e6000-0x3e6fff:S, 0x3e7000-0x3e7fff:S, 0x3e8000-0x3e8fff:S, 0x3e9000-0x3e9fff:S, 0x3ea000-0x3eafff:S, 0x3eb000-0x3ebfff:S, 0x3ec000-0x3ecfff:S, 0x3ed000-0x3edfff:S, 0x3ee000-0x3eefff:S, 0x3ef000-0x3effff:S, 0x3f0000-0x3f0fff:S, 0x3f1000-0x3f1fff:S, 0x3f2000-0x3f2fff:S, 0x3f3000-0x3f3fff:S, 0x3f4000-0x3f4fff:S, 0x3f5000-0x3f5fff:S, 0x3f6000-0x3f6fff:S, 0x3f7000-0x3f7fff:S, 0x3f8000-0x3f8fff:S, 0x3f9000-0x3f9fff:S, 0x3fa000-0x3fafff:S, 0x3fb000-0x3fbfff:S, 0x3fc000-0x3fcfff:S, 0x3fd000-0x3fdfff:W, 0x3fe000-0x3fefff:W, 0x3ff000-0x3fffff:W Erase/write done. Verifying flash... VERIFIED. From eugenbart66 at gmail.com Thu Jul 12 03:16:57 2012 From: eugenbart66 at gmail.com (eugen barticel) Date: Thu, 12 Jul 2012 11:16:57 +1000 Subject: [flashrom] Rom chip not supported Message-ID: hi there, I tried to flash my BIOS using flashrom but it says that my computer chipset is not supported yet. I have attached the output to this email. Hope this will be helpful for you. Thanks Eugen -------------- next part -------------- flashrom v0.9.2-r1141 on Linux 2.6.32-5-amd64 (x86_64), built with libpci 3.1.7, GCC 4.4.5 20100728 (prerelease), little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 1004M loops per second, 10 myus = 11 us, 100 myus = 101 us, 1000 myus = 1000 us, 10000 myus = 10099 us, 4 myus = 5 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "System manufacturer" DMI string system-product-name: "System Product Name" DMI string system-version: "System Version" DMI string baseboard-manufacturer: "ASUSTeK Computer INC." DMI string baseboard-product-name: "M2N-MX SE Plus" DMI string baseboard-version: "Rev x.xx" DMI string chassis-type: "Desktop" Found ITE Super I/O, id 8712 Found chipset "NVIDIA MCP61", enabling flash write... chipset PCI ID is 10de:03e0, This chipset is not really supported yet. Guesswork... ISA/LPC bridge reg 0x8a contents: 0x40, bit 6 is 1, bit 5 is 0 Flash bus type is SPI Found SMBus device 10de:03eb at 00:01:1 MCP SPI BAR is at 0xfec80000 SPI control is 0x0002, req=0, gnt=0 Please send the output of "flashrom -V" to flashrom at flashrom.org to help us finish support for your chipset. Thanks. OK. This chipset supports the following protocols: SPI. Super I/O ID 0x8712 is not on the list of flash capable controllers. Probing for AMD Am29F010A/B, 128 KB: skipped. Probing for AMD Am29F002(N)BB, 256 KB: skipped. Probing for AMD Am29F002(N)BT, 256 KB: skipped. Probing for AMD Am29F016D, 2048 KB: skipped. Probing for AMD Am29F040B, 512 KB: skipped. Probing for AMD Am29F080B, 1024 KB: skipped. Probing for AMD Am29LV040B, 512 KB: skipped. Probing for AMD Am29LV081B, 1024 KB: skipped. Probing for AMIC A25L05PT, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L05PU, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PT, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PU, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PT, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PU, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PT, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PU, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L80P, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PT, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PU, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L512, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L010, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L020, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L040, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L080, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L016, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L032, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25LQ032, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A29002B, 256 KB: skipped. Probing for AMIC A29002T, 256 KB: skipped. Probing for AMIC A29040B, 512 KB: skipped. Probing for AMIC A49LF040A, 512 KB: skipped. Probing for ASD AE49F2008, 256 KB: skipped. Probing for Atmel AT25DF021, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF041A, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081A, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF161, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321A, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF641, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DQ161, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25F512B, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS010, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS040, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF041, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF081A, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161A, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26F004, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT29C512, 64 KB: skipped. Probing for Atmel AT29C010A, 128 KB: skipped. Probing for Atmel AT29C020, 256 KB: skipped. Probing for Atmel AT29C040A, 512 KB: skipped. Probing for Atmel AT45CS1282, 16896 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB011D, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB021D, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB041D, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB081D, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB161D, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321C, 4224 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321D, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB642D, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT49BV512, 64 KB: skipped. Probing for Atmel AT49F020, 256 KB: skipped. Probing for Atmel AT49F002(N), 256 KB: skipped. Probing for Atmel AT49F002(N)T, 256 KB: skipped. Probing for EMST F49B002UA, 256 KB: skipped. Probing for EMST F25L008A, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05T, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10T, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20T, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40T, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80T, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16T, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32T, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64T, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25D16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F05, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F10, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F20, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F40, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F32, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN29F010, 128 KB: skipped. Probing for Eon EN29F002(A)(N)B, 256 KB: skipped. Probing for Eon EN29F002(A)(N)T, 256 KB: skipped. Probing for Fujitsu MBM29F004BC, 512 KB: skipped. Probing for Fujitsu MBM29F004TC, 512 KB: skipped. Probing for Fujitsu MBM29F400BC, 512 KB: skipped. Probing for Fujitsu MBM29F400TC, 512 KB: skipped. Probing for Hyundai HY29F002T, 256 KB: skipped. Probing for Hyundai HY29F002B, 256 KB: skipped. Probing for Intel 28F001BX-B, 128 KB: skipped. Probing for Intel 28F001BX-T, 128 KB: skipped. Probing for Intel 28F002BC-T, 256 KB: skipped. Probing for Intel 28F004S5, 512 KB: skipped. Probing for Intel 28F004BV/BE-B, 512 KB: skipped. Probing for Intel 28F004BV/BE-T, 512 KB: skipped. Probing for Intel 28F400BV/CV/CE-B, 512 KB: skipped. Probing for Intel 28F400BV/CV/CE-T, 512 KB: skipped. Probing for Intel 82802AB, 512 KB: skipped. Probing for Intel 82802AC, 1024 KB: skipped. Probing for Macronix MX25L512, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1005, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L2005, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L4005, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L8005, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Chip status register is 00 Chip status register: Status Register Write Disable (SRWD) is not set Chip status register: Bit 6 is not set Chip status register: Bit 5 / Block Protect 3 (BP3) is not set Chip status register: Bit 4 / Block Protect 2 (BP2) is not set Chip status register: Bit 3 / Block Protect 1 (BP1) is not set Chip status register: Bit 2 / Block Protect 0 (BP0) is not set Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Found chip "Macronix MX25L8005" (1024 KB, SPI) at physical address 0xfff00000. Probing for Macronix MX25L1605, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635D, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3205, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3235D, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L6405, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L12805, 16384 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX29F001B, 128 KB: skipped. Probing for Macronix MX29F001T, 128 KB: skipped. Probing for Macronix MX29F002B, 256 KB: skipped. Probing for Macronix MX29F002T, 256 KB: skipped. Probing for Macronix MX29LV040, 512 KB: skipped. Probing for MoselVitelic V29C51000B, 64 KB: skipped. Probing for MoselVitelic V29C51000T, 64 KB: skipped. Probing for MoselVitelic V29C51400B, 512 KB: skipped. Probing for MoselVitelic V29C51400T, 512 KB: skipped. Probing for MoselVitelic V29LC51000, 64 KB: skipped. Probing for MoselVitelic V29LC51001, 128 KB: skipped. Probing for MoselVitelic V29LC51002, 256 KB: skipped. Probing for Numonyx M25PE10, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE20, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE40, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV010, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV016B, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV020, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV040, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV080B, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV512, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm29F002T, 256 KB: skipped. Probing for PMC Pm29F002B, 256 KB: skipped. Probing for PMC Pm39LV010, 128 KB: skipped. Probing for PMC Pm39LV020, 256 KB: skipped. Probing for PMC Pm39LV040, 512 KB: skipped. Probing for PMC Pm49FL002, 256 KB: skipped. Probing for PMC Pm49FL004, 512 KB: skipped. Probing for Sanyo LF25FW203A, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sharp LHF00L04, 1024 KB: skipped. Probing for Spansion S25FL008A, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL016A, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF016B, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF032B, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF064C, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040.REMS, 512 KB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF040B, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25LF040A.RES, 512 KB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25VF040B.REMS, 512 KB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF080B, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST28SF040A, 512 KB: skipped. Probing for SST SST29EE010, 128 KB: skipped. Probing for SST SST29LE010, 128 KB: skipped. Probing for SST SST29EE020A, 256 KB: skipped. Probing for SST SST29LE020, 256 KB: skipped. Probing for SST SST39SF512, 64 KB: skipped. Probing for SST SST39SF010A, 128 KB: skipped. Probing for SST SST39SF020A, 256 KB: skipped. Probing for SST SST39SF040, 512 KB: skipped. Probing for SST SST39VF512, 64 KB: skipped. Probing for SST SST39VF010, 128 KB: skipped. Probing for SST SST39VF020, 256 KB: skipped. Probing for SST SST39VF040, 512 KB: skipped. Probing for SST SST39VF080, 1024 KB: skipped. Probing for SST SST49LF002A/B, 256 KB: skipped. Probing for SST SST49LF003A/B, 384 KB: skipped. Probing for SST SST49LF004A/B, 512 KB: skipped. Probing for SST SST49LF004C, 512 KB: skipped. Probing for SST SST49LF008A, 1024 KB: skipped. Probing for SST SST49LF008C, 1024 KB: skipped. Probing for SST SST49LF016C, 2048 KB: skipped. Probing for SST SST49LF020, 256 KB: skipped. Probing for SST SST49LF020A, 256 KB: skipped. Probing for SST SST49LF040, 512 KB: skipped. Probing for SST SST49LF040B, 512 KB: skipped. Probing for SST SST49LF080A, 1024 KB: skipped. Probing for SST SST49LF160C, 2048 KB: skipped. Probing for ST M25P05-A, 64 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05.RES, 64 KB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P10.RES, 128 KB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40-old, 512 KB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P32, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P64, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P128, 16384 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M29F002B, 256 KB: skipped. Probing for ST M29F002T/NT, 256 KB: skipped. Probing for ST M29F040B, 512 KB: skipped. Probing for ST M29F400BB, 512 KB: skipped. Probing for ST M29F400BT, 512 KB: skipped. Probing for ST M29W010B, 128 KB: skipped. Probing for ST M29W040B, 512 KB: skipped. Probing for ST M29W512B, 64 KB: skipped. Probing for ST M50FLW040A, 512 KB: skipped. Probing for ST M50FLW040B, 512 KB: skipped. Probing for ST M50FLW080A, 1024 KB: skipped. Probing for ST M50FLW080B, 1024 KB: skipped. Probing for ST M50FW002, 256 KB: skipped. Probing for ST M50FW016, 2048 KB: skipped. Probing for ST M50FW040, 512 KB: skipped. Probing for ST M50FW080, 1024 KB: skipped. Probing for ST M50LPW116, 2048 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51001B, 128 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51001T, 128 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51002B, 256 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51002T, 256 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51004B, 512 KB: skipped. Probing for SyncMOS/MoselVitelic {F,S,V}29C51004T, 512 KB: skipped. Probing for SyncMOS/MoselVitelic {S,V}29C31004B, 512 KB: skipped. Probing for SyncMOS/MoselVitelic {S,V}29C31004T, 512 KB: skipped. Probing for TI TMS29F002RB, 256 KB: skipped. Probing for TI TMS29F002RT, 256 KB: skipped. Probing for Winbond W25Q80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q32, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q64, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x10, 128 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x20, 256 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x40, 512 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x80, 1024 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x16, 2048 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x32, 4096 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25x64, 8192 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W29C011, 128 KB: skipped. Probing for Winbond W29C020C, 256 KB: skipped. Probing for Winbond W29C040P, 512 KB: skipped. Probing for Winbond W29EE011, 128 KB: skipped. Probing for Winbond W39V040A, 512 KB: skipped. Probing for Winbond W39V040B, 512 KB: skipped. Probing for Winbond W39V040C, 512 KB: skipped. Probing for Winbond W39V040FA, 512 KB: skipped. Probing for Winbond W39V080A, 1024 KB: skipped. Probing for Winbond W49F002U, 256 KB: skipped. Probing for Winbond W49F020, 256 KB: skipped. Probing for Winbond W49V002A, 256 KB: skipped. Probing for Winbond W49V002FA, 256 KB: skipped. Probing for Winbond W39V080FA, 1024 KB: skipped. Probing for Winbond W39V080FA (dual mode), 512 KB: skipped. Probing for AMIC unknown AMIC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel unknown Atmel SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon unknown Eon SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix unknown Macronix SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC unknown PMC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST unknown SST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST unknown ST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo unknown Sanyo SPI chip, 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (RDID), 0 KB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (REMS), 0 KB: probe_spi_rems: id1 0xc2, id2 0x13 No operations were specified. From stefan.tauner at student.tuwien.ac.at Fri Jul 13 21:34:46 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 13 Jul 2012 21:34:46 +0200 Subject: [flashrom] Rom chip not supported In-Reply-To: References: Message-ID: <201207131934.q6DJYk4D013092@mail2.student.tuwien.ac.at> On Thu, 12 Jul 2012 11:16:57 +1000 eugen barticel wrote: > flashrom v0.9.2-r1141 on Linux 2.6.32-5-amd64 (x86_64), built with libpci 3.1.7, GCC 4.4.5 20100728 (prerelease), little endian your version of flashrom is ancient, please update. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From flashrom at mkarcher.dialup.fu-berlin.de Sat Jul 14 22:04:45 2012 From: flashrom at mkarcher.dialup.fu-berlin.de (Michael Karcher) Date: Sat, 14 Jul 2012 22:04:45 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <4FEE3CFC.6090909@gmx.net> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> Message-ID: <1342296285.5539.74.camel@localhost> Am Samstag, den 30.06.2012, 01:40 +0200 schrieb Carl-Daniel Hailfinger: > This patch is essentially a small code move, better device counting and > lots of indentation changes (look at diff -uw to see real code changes). So basically you are moving the device test level check from pcidev_validate to pcidev_init. The result is that pcidev_validate does no longer in fact validate whether a candidate device is the correct device, as the name implies. A name like "pcidev_readbar" would make more sense, IMHO. Now, check where pcidev_validate is called from. It is called from pcidev_init to do its original job, namely validating a device, and it is called from nicintel code to get a second BAR, because the first BAR returned by pcidev_init is not really enough. That invocation of pcidev_validate already carries a nice comment reading "/* FIXME: Using pcidev_dev _will_ cause pretty explosions in the future. */". This indicates that something is wrong with this code. And in my oppinion, indeed, it is. The problem is that the current code contains an abstraction violation. Neither pcidev_validate (in the pre-patch form) is really meant to be called from higher level code, but it is meant to be called by pcidev_init only (doing it's job, validating a PCI device, poorly), nor is using a global variable pcidev_dev a good idea for communication between pcidev.c and the clients of that code. Furthermore, pcidev_init (conveniently, I admit) does two things at once: It finds a PCI device, and it reads one BAR. What about having pcidev_init return the struct pci_dev* instead, so it is up to the client driver to handle that the value instead of putting it in a global variable? Of course, this implies all clients have to use something like pcidev_readbar (the post-patch pcidev_validate) function, even if just a single address is needed. Considering our current codebase, which uses pci_read_long to get base addresses in satamv and satasii, I think giving pcidev_readbar some extra exposure would even be a good educational thing. And as I go along ranting about the current state of that code, I think it is nice that pcidev_validate does so many sanity checks, but there is one thing I do *not* like about it, you could call it a "missing vital sanity check". pcidev_validate checks whether the given BAR is I/O mapped or memory mapped, and handles each of those types correctly. Great! Finally, it returns the obtained base address, which might either be in I/O or memory space to the caller, *not* indicating whether it just returned an I/O or a memory address. This is quite "convenient", as the callers (should) know what type they expect, and they are not prepared to handle mismatches[1], but it would be even more convenient if this quite important verification of the address space would be performed. So pcidev_readbar (the new pcidev_validate) needs an extra parameter, which should indicate I/O or memory space (or, alternatively, provide pcidev_readbar_io and pcidev_readbar_mem, as there are some strict coding styles claiming the flag parameters are evil, because if there are two different ways a function can be executed (selected by that flag parameter), it really means there are two functions which should have their own name) and have it fail if the BAR type does not match the callers expectation. Considering all the stuff I was writing, I think your current patch might be the first of a series leading towards a better pcidev interface, if you apply the name fix for pcidev_validate. I guess the second step would be removing the global pcidev_dev variable, which implies all callers of pcidev_init need to be adjusted. Maybe for modules that really only need one BAR, we can still provide the old behaviour as "pcidev_init_getbar" or "pcidev_init_simple". In a third step, add I/O vs. memory validation to pcidev_readbar (ex pcidev_validate), and remove all pci_read_long(...) &~7; invocations to read BARs. So the final vote is: If you rename pcidev_validate to pcidev_readbar, this is Acked-by: Michael Karcher [1]: Remember the old saying: "Never check for an error condition you don't know how to handle" From vidwer at gmail.com Sun Jul 15 21:28:36 2012 From: vidwer at gmail.com (Idwer Vollering) Date: Sun, 15 Jul 2012 21:28:36 +0200 Subject: [flashrom] [PATCH] Bus Pirate: Speedup and firmware workarounds In-Reply-To: <4FD7EF9D.8000302@gmx.net> References: <4FD7EF9D.8000302@gmx.net> Message-ID: 2012/6/13 Carl-Daniel Hailfinger : > Bus Pirate Firmware v5.5 and newer support a new SPI binary mode. Use it > if available. > Bus Pirate Firmware v6.1 and older have broken (too slow) SPI clock > divisor for any requested speed above 2 MHz. Force a downgrade to 2 MHz > for affected firmware versions. > flashrom will recommend to upgrade the Bus Pirate Firmware if it is > older than v6.2. > > Somewhat tested, code still needs to be cleaned up in a few spots. Tested with reading/erasing/writing a MX25L1605 on a Thinkpad X60 mainboard, using buspirate hardware v3.a running firmware v6.2-test that can be found here (bp-spifix.zip): http://dangerousprototypes.com/forum/viewtopic.php?f=40&t=3864&sid=426d32139bbbd6fa5abf86ef084cfe8c&start=15#p41505 . > > Signed-off-by: Carl-Daniel Hailfinger > > Index: flashrom-buspirate_newcommands/buspirate_spi.c > =================================================================== > --- flashrom-buspirate_newcommands/buspirate_spi.c (Revision 1541) > +++ flashrom-buspirate_newcommands/buspirate_spi.c (Arbeitskopie) > @@ -50,6 +50,7 @@ > #define sp_flush_incoming(...) 0 > #endif > > +static int buspirate_interface_version; > static unsigned char *bp_commbuf = NULL; > static int bp_commbufsize = 0; > > @@ -83,7 +84,8 @@ > msg_perr("Zero length command!\n"); > return 1; > } > - msg_pspew("Sending"); > + if (writecnt) > + msg_pspew("Sending"); or: while (writecnt) instead? > for (i = 0; i < writecnt; i++) > msg_pspew(" 0x%02x", buf[i]); > #ifdef FAKE_COMMUNICATION > @@ -103,23 +105,36 @@ > if (ret) > return ret; > #endif > - msg_pspew(", receiving"); > + if (readcnt) > + msg_pspew(", receiving"); or: while (readcnt) ? > for (i = 0; i < readcnt; i++) > msg_pspew(" 0x%02x", buf[i]); > msg_pspew("\n"); > return 0; > } > > -static int buspirate_spi_send_command(struct flashctx *flash, > - unsigned int writecnt, > - unsigned int readcnt, > - const unsigned char *writearr, > - unsigned char *readarr); > +static int buspirate_wait_for_string(unsigned char *buf, char *key) > +{ > + unsigned int keylen = strlen(key); > + int ret; > > -static const struct spi_programmer spi_programmer_buspirate = { > + ret = buspirate_sendrecv(buf, 0, keylen); > + while (!ret) { > + if (!memcmp(buf, key, keylen)) > + return 0; > + memmove(buf, buf + 1, keylen - 1); > + ret = buspirate_sendrecv(buf + keylen - 1, 0, 1); > + } > + return ret; > +} > + > +static int buspirate_spi_send_command(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, > + const unsigned char *writearr, unsigned char *readarr); > + > +static struct spi_programmer spi_programmer_buspirate = { > .type = SPI_CONTROLLER_BUSPIRATE, > - .max_data_read = 12, > - .max_data_write = 12, > + .max_data_read = MAX_DATA_UNSPECIFIED, > + .max_data_write = MAX_DATA_UNSPECIFIED, > .command = buspirate_spi_send_command, > .multicommand = default_spi_send_multicommand, > .read = default_spi_read, > @@ -138,6 +153,53 @@ > {NULL, 0x0}, > }; > > +int buspirate_spi_set_config(unsigned char *buf, int spispeed) > +{ > + int ret; > + > + /* Initial setup (SPI peripherals config): Enable power, CS high, AUX */ > + buf[0] = 0x40 | 0xb; This could use some explanation of the bits that are set in bit[0]: 0x40 and 0xb > + ret = buspirate_sendrecv(buf, 1, 1); > + if (ret) > + return 1; > + if (buf[0] != 0x01) { > + msg_perr("Protocol error while setting power/CS/AUX!\n"); > + return 1; > + } > + > + /* Set SPI speed */ > + buf[0] = 0x60 | spispeed; explanation of 0x60 > + ret = buspirate_sendrecv(buf, 1, 1); > + if (ret) > + return 1; > + if (buf[0] != 0x01) { #define BP_PROTO_ERR_SPEED 0x1? > + msg_perr("Protocol error while setting SPI speed!\n"); > + return 1; > + } > + > + /* Set SPI config: output type, idle, clock edge, sample */ > + buf[0] = 0x80 | 0xa; explanation of 0x80 and 0xa > + ret = buspirate_sendrecv(buf, 1, 1); > + if (ret) > + return 1; > + if (buf[0] != 0x01) { #define BP_PROTO_ERR_CONFIG 0x1? > + msg_perr("Protocol error while setting SPI config!\n"); > + return 1; > + } > + > + /* De-assert CS# */ > + buf[0] = 0x03; #define ... 0x3 ? > + ret = buspirate_sendrecv(buf, 1, 1); > + if (ret) > + return 1; > + if (buf[0] != 0x01) { #define ... 0x1 ? > + msg_perr("Protocol error while raising CS#!\n"); > + return 1; > + } > + > + return 0; > +} > + > static int buspirate_spi_shutdown(void *data) > { > int ret = 0, ret2 = 0; > @@ -180,10 +242,15 @@ > return ret; > } > > +#define BP_VERSION(a,b) ((a) << 8 | (b)) > + > int buspirate_spi_init(void) > { > char *dev = NULL; > char *speed = NULL; > + char *tmp; > + unsigned int fw_version_major = 0; > + unsigned int fw_version_minor = 0; > int spispeed = 0x7; > int ret = 0; > int i; > @@ -208,9 +275,6 @@ > } > free(speed); > > - /* This works because speeds numbering starts at 0 and is contiguous. */ > - msg_pdbg("SPI speed is %sHz\n", spispeeds[spispeed].name); > - > /* Default buffer size is 19: 16 bytes data, 3 bytes control. */ > #define DEFAULT_BUFSIZE (16 + 3) > bp_commbuf = malloc(DEFAULT_BUFSIZE); > @@ -233,106 +297,160 @@ > if (register_shutdown(buspirate_spi_shutdown, NULL)) > return 1; > > - /* This is the brute force version, but it should work. */ > - for (i = 0; i < 19; i++) { > + /* This is the brute force version, but it should work. > + * It is likely to fail if a previous flashrom run was aborted during a write with the new SPI commands > + * in firmware v5.4 because that firmware may wait for up to 4096 bytes of input before responding to > + * 0x00 again. The obvious workaround (sending 4096 bytes of \0) may cause significant startup delays. > + */ Resetting the buspirate can be done with entering a pound sign on its console: "HiZ>#" (if that is what you want to here, to make it respond again?). > + for (i = 0; i < 20; i++) { > /* Enter raw bitbang mode */ > bp_commbuf[0] = 0x00; #define? > /* Send the command, don't read the response. */ > ret = buspirate_sendrecv(bp_commbuf, 1, 0); > if (ret) > return ret; > - /* Read any response and discard it. */ > - sp_flush_incoming(); > + /* The old way to handle responses from a Bus Pirate already in BBIO mode was to flush any > + * response which came in over serial. Unfortunately that does not work reliably on Linux > + * with FTDI USB-serial. > + */ > + //sp_flush_incoming(); > } > - /* USB is slow. The Bus Pirate is even slower. Apparently the flush > - * action above is too fast or too early. Some stuff still remains in > - * the pipe after the flush above, and one additional flush is not > - * sufficient either. Use a 1.5 ms delay inside the loop to make > - * mostly sure that at least one USB frame had time to arrive. > - * Looping only 5 times is not sufficient and causes the > - * occasional failure. > - * Folding the delay into the loop above is not reliable either. > - */ > - for (i = 0; i < 10; i++) { > - usleep(1500); > - /* Read any response and discard it. */ > - sp_flush_incoming(); > + /* We know that 20 commands of \0 should elicit at least one BBIO1 response. */ > + if ((ret = buspirate_wait_for_string(bp_commbuf, "BBIO"))) > + return ret; > + > + /* Reset the Bus Pirate. */ > + bp_commbuf[0] = 0x0f; #define BP_COMMBUF_RESET 0x0f ? > + /* Send the command, don't read the response. */ > + if ((ret = buspirate_sendrecv(bp_commbuf, 1, 0))) > + return ret; > + if ((ret = buspirate_wait_for_string(bp_commbuf, "irate "))) > + return ret; > + /* Read the hardware version string. Last byte of the buffer is reserved for \0. */ > + for (i = 0; i < DEFAULT_BUFSIZE - 1; i++) { > + if ((ret = buspirate_sendrecv(bp_commbuf + i, 0, 1))) > + return ret; > + if (strchr("\r\n\t ", bp_commbuf[i])) > + break; > } > + bp_commbuf[i] = '\0'; > + msg_pdbg("Detected Bus Pirate hardware %s\n", bp_commbuf); > + > + if ((ret = buspirate_wait_for_string(bp_commbuf, "irmware "))) > + return ret; > + /* Read the firmware version string. Last byte of the buffer is reserved for \0. */ > + for (i = 0; i < DEFAULT_BUFSIZE - 1; i++) { > + if ((ret = buspirate_sendrecv(bp_commbuf + i, 0, 1))) > + return ret; > + if (strchr("\r\n\t ", bp_commbuf[i])) > + break; > + } > + bp_commbuf[i] = '\0'; > + msg_pdbg("Detected Bus Pirate firmware %s ", bp_commbuf); > + if (bp_commbuf[0] != 'v') > + msg_pdbg("(unknown version number format)\n"); > + else if (!strchr("0123456789", bp_commbuf[1])) > + msg_pdbg("(unknown version number format)\n"); > + else { > + fw_version_major = strtoul((char *)bp_commbuf + 1, &tmp, 10); > + while ((*tmp != '\0') && !strchr("0123456789", *tmp)) > + tmp++; > + fw_version_minor = strtoul(tmp, NULL, 10); > + msg_pdbg("(%u.%u)\n", fw_version_major, fw_version_minor); > + } > + > + if ((ret = buspirate_wait_for_string(bp_commbuf, "HiZ>"))) > + return ret; > + > + /* Workaround for broken speed settings in firmware 6.1 and older. */ > + if (BP_VERSION(fw_version_major, fw_version_minor) < BP_VERSION(6, 2)) > + if (spispeed > 0x4) { #define BP_SPEED_MHZ_FOR_FW_6.2_AND_NEWER 0x4 ? > + msg_perr("Bus Pirate firmware 6.1 and older does not support SPI speeds above 2 MHz. " > + "Limiting speed to 2 MHz.\n"); > + msg_pinfo("It is recommended to upgrade to firmware 6.2 or newer.\n"); > + spispeed = 0x4; > + } > + > + /* Tell the user about missing fast mode in firmware 5.4 and older. */ > + if (BP_VERSION(fw_version_major, fw_version_minor) < BP_VERSION(5, 5)) { > + msg_pinfo("Bus Pirate firmware 5.4 and older does not support fast SPI access.\n"); > + msg_pinfo("It is recommended to upgrade to firmware 6.2 or newer.\n"); > + } > + > + /* This works because speeds numbering starts at 0 and is contiguous. */ > + msg_pdbg("SPI speed is %sHz\n", spispeeds[spispeed].name); > + > /* Enter raw bitbang mode */ > - bp_commbuf[0] = 0x00; #define BP_RAW_BITBANG_MODE 0x00 ? > - ret = buspirate_sendrecv(bp_commbuf, 1, 5); > - if (ret) > + for (i = 0; i < 20; i++) { > + bp_commbuf[0] = 0x00; #define ? > + if ((ret = buspirate_sendrecv(bp_commbuf, 1, 0))) > + return ret; > + } > + if ((ret = buspirate_wait_for_string(bp_commbuf, "BBIO"))) > return ret; > - if (memcmp(bp_commbuf, "BBIO", 4)) { > - msg_perr("Entering raw bitbang mode failed!\n"); > - msg_pdbg("Got %02x%02x%02x%02x%02x\n", > - bp_commbuf[0], bp_commbuf[1], bp_commbuf[2], > - bp_commbuf[3], bp_commbuf[4]); > + if ((ret = buspirate_sendrecv(bp_commbuf, 0, 1))) > + return ret; > + msg_pdbg("Raw bitbang mode version %c\n", bp_commbuf[0]); > + if (bp_commbuf[0] != '1') { > + msg_perr("Can't handle raw bitbang mode version %c!\n", bp_commbuf[0]); > return 1; > } > - msg_pdbg("Raw bitbang mode version %c\n", bp_commbuf[4]); > - if (bp_commbuf[4] != '1') { > - msg_perr("Can't handle raw bitbang mode version %c!\n", > - bp_commbuf[4]); > - return 1; > - } > /* Enter raw SPI mode */ > bp_commbuf[0] = 0x01; > - ret = buspirate_sendrecv(bp_commbuf, 1, 4); > - if (ret) > + ret = buspirate_sendrecv(bp_commbuf, 1, 0); > + if ((ret = buspirate_wait_for_string(bp_commbuf, "SPI"))) > return ret; > - if (memcmp(bp_commbuf, "SPI", 3)) { > - msg_perr("Entering raw SPI mode failed!\n"); > - msg_pdbg("Got %02x%02x%02x%02x\n", > - bp_commbuf[0], bp_commbuf[1], bp_commbuf[2], > - bp_commbuf[3]); > + if ((ret = buspirate_sendrecv(bp_commbuf, 0, 1))) > + return ret; > + msg_pdbg("Raw SPI mode version %c\n", bp_commbuf[0]); > + if (bp_commbuf[0] != '1') { > + msg_perr("Can't handle raw SPI mode version %c!\n", bp_commbuf[0]); > return 1; > } > - msg_pdbg("Raw SPI mode version %c\n", bp_commbuf[3]); > - if (bp_commbuf[3] != '1') { > - msg_perr("Can't handle raw SPI mode version %c!\n", > - bp_commbuf[3]); > - return 1; > - } > > - /* Initial setup (SPI peripherals config): Enable power, CS high, AUX */ > - bp_commbuf[0] = 0x40 | 0xb; > - ret = buspirate_sendrecv(bp_commbuf, 1, 1); > - if (ret) > + if (buspirate_spi_set_config(bp_commbuf, spispeed)) > return 1; > - if (bp_commbuf[0] != 0x01) { > - msg_perr("Protocol error while setting power/CS/AUX!\n"); > - return 1; > - } > > - /* Set SPI speed */ > - bp_commbuf[0] = 0x60 | spispeed; > - ret = buspirate_sendrecv(bp_commbuf, 1, 1); > + /* Test combined SPI write/read, length 0. */ > + bp_commbuf[0] = 0x04; > + bp_commbuf[1] = 0; > + bp_commbuf[2] = 0; > + bp_commbuf[3] = 0; > + bp_commbuf[4] = 0; 0x04 and 0: #defines? > + ret = buspirate_sendrecv(bp_commbuf, 5, 1); > if (ret) > return 1; > if (bp_commbuf[0] != 0x01) { 0x01 => BP_PROTO_SPEED_ERR? > - msg_perr("Protocol error while setting SPI speed!\n"); > - return 1; > - } > - > - /* Set SPI config: output type, idle, clock edge, sample */ > - bp_commbuf[0] = 0x80 | 0xa; > - ret = buspirate_sendrecv(bp_commbuf, 1, 1); > - if (ret) > - return 1; > - if (bp_commbuf[0] != 0x01) { > - msg_perr("Protocol error while setting SPI config!\n"); > - return 1; > - } > + msg_pdbg("SPI command set v2 not available, using old commands " > + "present in firmware > - /* De-assert CS# */ > - bp_commbuf[0] = 0x03; > - ret = buspirate_sendrecv(bp_commbuf, 1, 1); > - if (ret) > - return 1; > - if (bp_commbuf[0] != 0x01) { > - msg_perr("Protocol error while raising CS#!\n"); > - return 1; > + /* FIXME: Check the error code? */ > + /* We sent 4 bytes of 0x00, so we expect 4 BBIO1 responses. */ > + buspirate_sendrecv(bp_commbuf, 0, 4 * 5); > + > + /* Enter raw SPI mode again. */ > + bp_commbuf[0] = 0x01; > + /* FIXME: Check the error code? */ > + buspirate_sendrecv(bp_commbuf, 1, 4); > + > + buspirate_interface_version = 1; > + /* Sensible default buffer size. */ > + if (buspirate_commbuf_grow(16 + 3)) > + return ERROR_OOM; > + spi_programmer_buspirate.max_data_read = 12; > + spi_programmer_buspirate.max_data_write = 12; Change 12 to MAX_DATA_UNSPECIFIED (twice)? > + > + /* Reinit the whole shebang. */ > + if (buspirate_spi_set_config(bp_commbuf, spispeed)) > + return 1; > + } else { > + msg_pdbg("Using SPI command set v2.\n"); > + buspirate_interface_version = 2; > + /* Sensible default buffer size. */ > + if (buspirate_commbuf_grow(260 + 5)) > + return ERROR_OOM; > + spi_programmer_buspirate.max_data_read = 2048; > + spi_programmer_buspirate.max_data_write = 256; > } > > register_spi_programmer(&spi_programmer_buspirate); > @@ -340,11 +458,8 @@ > return 0; > } > > -static int buspirate_spi_send_command(struct flashctx *flash, > - unsigned int writecnt, > - unsigned int readcnt, > - const unsigned char *writearr, > - unsigned char *readarr) > +static int buspirate_spi_send_command_v1(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, > + const unsigned char *writearr, unsigned char *readarr) > { > unsigned int i = 0; > int ret = 0; > @@ -395,3 +510,54 @@ > > return ret; > } > + > +static int buspirate_spi_send_command_v2(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, > + const unsigned char *writearr, unsigned char *readarr) > +{ > + int i = 0, ret = 0; > + > + if (writecnt > 4096 || readcnt > 4096 || (readcnt + writecnt) > 4096) > + return SPI_INVALID_LENGTH; > + > + /* 5 bytes extra for command, writelen, readlen. > + * 1 byte extra for Ack/Nack. > + */ > + if (buspirate_commbuf_grow(max(writecnt + 5, readcnt + 1))) > + return ERROR_OOM; > + > + /* Combined SPI write/read. */ > + bp_commbuf[i++] = 0x04; > + bp_commbuf[i++] = (writecnt >> 8) & 0xff; > + bp_commbuf[i++] = writecnt & 0xff; > + bp_commbuf[i++] = (readcnt >> 8) & 0xff; > + bp_commbuf[i++] = readcnt & 0xff; You are using [0]..[4] instead of i++ earlier in this patch, let's stick with [0] for consistency. > + memcpy(bp_commbuf + i, writearr, writecnt); > + > + ret = buspirate_sendrecv(bp_commbuf, i + writecnt, 1 + readcnt); > + > + if (ret) { > + msg_perr("Bus Pirate communication error!\n"); > + return SPI_GENERIC_ERROR; > + } > + > + if (bp_commbuf[0] != 0x01) { > + msg_perr("Protocol error while sending SPI write/read!\n"); > + return SPI_GENERIC_ERROR; > + } > + > + /* Skip Ack. */ > + memcpy(readarr, bp_commbuf + 1, readcnt); > + > + return ret; > +} > + > +static int buspirate_spi_send_command(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, > + const unsigned char *writearr, unsigned char *readarr) > +{ > + switch (buspirate_interface_version) { > + case 2: > + return buspirate_spi_send_command_v2(flash, writecnt, readcnt, writearr, readarr); > + default: > + return buspirate_spi_send_command_v1(flash, writecnt, readcnt, writearr, readarr); > + } > +} > > > -- > http://www.hailfinger.org/ > > > _______________________________________________ > flashrom mailing list > flashrom at flashrom.org > http://www.flashrom.org/mailman/listinfo/flashrom From c-d.hailfinger.devel.2006 at gmx.net Mon Jul 16 09:15:55 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Mon, 16 Jul 2012 09:15:55 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <1342296285.5539.74.camel@localhost> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> Message-ID: <5003BFAB.3060601@gmx.net> Am 14.07.2012 22:04 schrieb Michael Karcher: > Am Samstag, den 30.06.2012, 01:40 +0200 schrieb Carl-Daniel Hailfinger: >> This patch is essentially a small code move, better device counting and >> lots of indentation changes (look at diff -uw to see real code changes). > So basically you are moving the device test level check from > pcidev_validate to pcidev_init. The result is that pcidev_validate does > no longer in fact validate whether a candidate device is the correct > device, as the name implies. A name like "pcidev_readbar" would make > more sense, IMHO. Indeed. Fixed. > Now, check where pcidev_validate is called from. It is called from > pcidev_init to do its original job, namely validating a device, and it > is called from nicintel code to get a second BAR, because the first BAR > returned by pcidev_init is not really enough. That invocation of > pcidev_validate already carries a nice comment reading "/* FIXME: Using > pcidev_dev _will_ cause pretty explosions in the future. */". This > indicates that something is wrong with this code. And in my opinion, > indeed, it is. The problem is that the current code contains an > abstraction violation. Neither pcidev_validate (in the pre-patch form) > is really meant to be called from higher level code, but it is meant to > be called by pcidev_init only (doing it's job, validating a PCI device, > poorly), nor is using a global variable pcidev_dev a good idea for > communication between pcidev.c and the clients of that code. > > Furthermore, pcidev_init (conveniently, I admit) does two things at > once: It finds a PCI device, and it reads one BAR. What about having > pcidev_init return the struct pci_dev* instead, so it is up to the > client driver to handle that the value instead of putting it in a global > variable? Of course, this implies all clients have to use something like > pcidev_readbar (the post-patch pcidev_validate) function, even if just a > single address is needed. Considering our current codebase, which uses > pci_read_long to get base addresses in satamv and satasii, I think > giving pcidev_readbar some extra exposure would even be a good > educational thing. > > And as I go along ranting about the current state of that code, I think > it is nice that pcidev_validate does so many sanity checks, but there is > one thing I do *not* like about it, you could call it a "missing vital > sanity check". pcidev_validate checks whether the given BAR is I/O > mapped or memory mapped, and handles each of those types correctly. > Great! Finally, it returns the obtained base address, which might either > be in I/O or memory space to the caller, *not* indicating whether it > just returned an I/O or a memory address. This is quite "convenient", as > the callers (should) know what type they expect, and they are not > prepared to handle mismatches[1], but it would be even more convenient > if this quite important verification of the address space would be > performed. So pcidev_readbar (the new pcidev_validate) needs an extra > parameter, which should indicate I/O or memory space (or, alternatively, > provide pcidev_readbar_io and pcidev_readbar_mem, as there are some > strict coding styles claiming the flag parameters are evil, because if > there are two different ways a function can be executed (selected by > that flag parameter), it really means there are two functions which > should have their own name) and have it fail if the BAR type does not > match the callers expectation. I completely agree with all your points. > Considering all the stuff I was writing, I think your current patch > might be the first of a series leading towards a better pcidev > interface, if you apply the name fix for pcidev_validate. Done. > I guess the second step would be removing the global pcidev_dev > variable, which implies all callers of pcidev_init need to be adjusted. Yes. > Maybe for modules that really only need one BAR, we can still provide > the old behaviour as "pcidev_init_getbar" or "pcidev_init_simple". I'd rather not introduce a special case here because some people might use it in ways we didn't anticipate. > In a third step, add I/O vs. memory validation to pcidev_readbar (ex > pcidev_validate), and remove all pci_read_long(...) &~7; invocations to > read BARs. > > So the final vote is: > > If you rename pcidev_validate to pcidev_readbar, this is > Acked-by: Michael Karcher Thanks! Updated patch below (only changes from the previous version are 112 column reformattings and your suggested name change. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-pcidev_check_vendorid_cleanup/pcidev.c =================================================================== --- flashrom-pcidev_check_vendorid_cleanup/pcidev.c (Revision 1547) +++ flashrom-pcidev_check_vendorid_cleanup/pcidev.c (Arbeitskopie) @@ -35,157 +35,122 @@ TYPE_UNKNOWN }; -uintptr_t pcidev_validate(struct pci_dev *dev, int bar, - const struct pcidev_status *devs) +uintptr_t pcidev_readbar(struct pci_dev *dev, int bar) { - int i; uint64_t addr; uint32_t upperaddr; uint8_t headertype; uint16_t supported_cycles; enum pci_bartype bartype = TYPE_UNKNOWN; - for (i = 0; devs[i].device_name != NULL; i++) { - if (dev->device_id != devs[i].device_id) - continue; - msg_pinfo("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n", - devs[i].vendor_name, devs[i].device_name, - dev->vendor_id, dev->device_id, dev->bus, dev->dev, - dev->func); + headertype = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f; + msg_pspew("PCI header type 0x%02x\n", headertype); - headertype = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f; - msg_pspew("PCI header type 0x%02x\n", headertype); + /* Don't use dev->base_addr[x] (as value for 'bar'), won't work on older libpci. */ + addr = pci_read_long(dev, bar); - /* - * Don't use dev->base_addr[x] (as value for 'bar'), won't - * work on older libpci. - */ - addr = pci_read_long(dev, bar); - - /* Sanity checks. */ - switch (headertype) { - case PCI_HEADER_TYPE_NORMAL: - switch (bar) { - case PCI_BASE_ADDRESS_0: - case PCI_BASE_ADDRESS_1: - case PCI_BASE_ADDRESS_2: - case PCI_BASE_ADDRESS_3: - case PCI_BASE_ADDRESS_4: - case PCI_BASE_ADDRESS_5: - if ((addr & PCI_BASE_ADDRESS_SPACE) == - PCI_BASE_ADDRESS_SPACE_IO) - bartype = TYPE_IOBAR; - else - bartype = TYPE_MEMBAR; - break; - case PCI_ROM_ADDRESS: - bartype = TYPE_ROMBAR; - break; - } + /* Sanity checks. */ + switch (headertype) { + case PCI_HEADER_TYPE_NORMAL: + switch (bar) { + case PCI_BASE_ADDRESS_0: + case PCI_BASE_ADDRESS_1: + case PCI_BASE_ADDRESS_2: + case PCI_BASE_ADDRESS_3: + case PCI_BASE_ADDRESS_4: + case PCI_BASE_ADDRESS_5: + if ((addr & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) + bartype = TYPE_IOBAR; + else + bartype = TYPE_MEMBAR; break; - case PCI_HEADER_TYPE_BRIDGE: - switch (bar) { - case PCI_BASE_ADDRESS_0: - case PCI_BASE_ADDRESS_1: - if ((addr & PCI_BASE_ADDRESS_SPACE) == - PCI_BASE_ADDRESS_SPACE_IO) - bartype = TYPE_IOBAR; - else - bartype = TYPE_MEMBAR; - break; - case PCI_ROM_ADDRESS1: - bartype = TYPE_ROMBAR; - break; - } + case PCI_ROM_ADDRESS: + bartype = TYPE_ROMBAR; break; - case PCI_HEADER_TYPE_CARDBUS: + } + break; + case PCI_HEADER_TYPE_BRIDGE: + switch (bar) { + case PCI_BASE_ADDRESS_0: + case PCI_BASE_ADDRESS_1: + if ((addr & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) + bartype = TYPE_IOBAR; + else + bartype = TYPE_MEMBAR; break; - default: - msg_perr("Unknown PCI header type 0x%02x, BAR type " - "cannot be determined reliably.\n", headertype); + case PCI_ROM_ADDRESS1: + bartype = TYPE_ROMBAR; break; } + break; + case PCI_HEADER_TYPE_CARDBUS: + break; + default: + msg_perr("Unknown PCI header type 0x%02x, BAR type cannot be determined reliably.\n", + headertype); + break; + } - supported_cycles = pci_read_word(dev, PCI_COMMAND); + supported_cycles = pci_read_word(dev, PCI_COMMAND); - msg_pdbg("Requested BAR is "); - switch (bartype) { - case TYPE_MEMBAR: - msg_pdbg("MEM"); - if (!(supported_cycles & PCI_COMMAND_MEMORY)) { - msg_perr("MEM BAR access requested, but device " - "has MEM space accesses disabled.\n"); - /* TODO: Abort here? */ - } - msg_pdbg(", %sbit, %sprefetchable\n", - ((addr & 0x6) == 0x0) ? "32" : - (((addr & 0x6) == 0x4) ? "64" : "reserved"), - (addr & 0x8) ? "" : "not "); - if ((addr & 0x6) == 0x4) { - /* The spec says that a 64-bit register consumes - * two subsequent dword locations. - */ - upperaddr = pci_read_long(dev, bar + 4); - if (upperaddr != 0x00000000) { - /* Fun! A real 64-bit resource. */ - if (sizeof(uintptr_t) != sizeof(uint64_t)) { - msg_perr("BAR unreachable!"); - /* TODO: Really abort here? If - * multiple PCI devices match, - * we might never tell the user - * about the other devices. - */ - return 0; - } - addr |= (uint64_t)upperaddr << 32; + msg_pdbg("Requested BAR is "); + switch (bartype) { + case TYPE_MEMBAR: + msg_pdbg("MEM"); + if (!(supported_cycles & PCI_COMMAND_MEMORY)) { + msg_perr("MEM BAR access requested, but device has MEM space accesses disabled.\n"); + /* TODO: Abort here? */ + } + msg_pdbg(", %sbit, %sprefetchable\n", + ((addr & 0x6) == 0x0) ? "32" : (((addr & 0x6) == 0x4) ? "64" : "reserved"), + (addr & 0x8) ? "" : "not "); + if ((addr & 0x6) == 0x4) { + /* The spec says that a 64-bit register consumes + * two subsequent dword locations. + */ + upperaddr = pci_read_long(dev, bar + 4); + if (upperaddr != 0x00000000) { + /* Fun! A real 64-bit resource. */ + if (sizeof(uintptr_t) != sizeof(uint64_t)) { + msg_perr("BAR unreachable!"); + /* TODO: Really abort here? If multiple PCI devices match, + * we might never tell the user about the other devices. + */ + return 0; } + addr |= (uint64_t)upperaddr << 32; } - addr &= PCI_BASE_ADDRESS_MEM_MASK; - break; - case TYPE_IOBAR: - msg_pdbg("I/O\n"); + } + addr &= PCI_BASE_ADDRESS_MEM_MASK; + break; + case TYPE_IOBAR: + msg_pdbg("I/O\n"); #if __FLASHROM_HAVE_OUTB__ - if (!(supported_cycles & PCI_COMMAND_IO)) { - msg_perr("I/O BAR access requested, but device " - "has I/O space accesses disabled.\n"); - /* TODO: Abort here? */ - } + if (!(supported_cycles & PCI_COMMAND_IO)) { + msg_perr("I/O BAR access requested, but device has I/O space accesses disabled.\n"); + /* TODO: Abort here? */ + } #else - msg_perr("I/O BAR access requested, but flashrom does " - "not support I/O BAR access on this platform " - "(yet).\n"); + msg_perr("I/O BAR access requested, but flashrom does not support I/O BAR access on this " + "platform (yet).\n"); #endif - addr &= PCI_BASE_ADDRESS_IO_MASK; - break; - case TYPE_ROMBAR: - msg_pdbg("ROM\n"); - /* Not sure if this check is needed. */ - if (!(supported_cycles & PCI_COMMAND_MEMORY)) { - msg_perr("MEM BAR access requested, but device " - "has MEM space accesses disabled.\n"); - /* TODO: Abort here? */ - } - addr &= PCI_ROM_ADDRESS_MASK; - break; - case TYPE_UNKNOWN: - msg_perr("BAR type unknown, please report a bug at " - "flashrom at flashrom.org\n"); + addr &= PCI_BASE_ADDRESS_IO_MASK; + break; + case TYPE_ROMBAR: + msg_pdbg("ROM\n"); + /* Not sure if this check is needed. */ + if (!(supported_cycles & PCI_COMMAND_MEMORY)) { + msg_perr("MEM BAR access requested, but device has MEM space accesses disabled.\n"); + /* TODO: Abort here? */ } - - if (devs[i].status == NT) { - msg_pinfo("===\nThis PCI device is UNTESTED. Please " - "report the 'flashrom -p xxxx' output \n" - "to flashrom at flashrom.org if it works " - "for you. Please add the name of your\n" - "PCI device to the subject. Thank you for " - "your help!\n===\n"); - } - - return (uintptr_t)addr; + addr &= PCI_ROM_ADDRESS_MASK; + break; + case TYPE_UNKNOWN: + msg_perr("BAR type unknown, please report a bug at flashrom at flashrom.org\n"); } - return 0; + return (uintptr_t)addr; } uintptr_t pcidev_init(int bar, const struct pcidev_status *devs) @@ -195,6 +160,7 @@ char *pcidev_bdf; char *msg = NULL; int found = 0; + int i; uintptr_t addr = 0, curaddr = 0; pacc = pci_alloc(); /* Get the pci_access structure */ @@ -214,10 +180,29 @@ for (dev = pacc->devices; dev; dev = dev->next) { if (pci_filter_match(&filter, dev)) { + /* Check against list of supported devices. */ + for (i = 0; devs[i].device_name != NULL; i++) + if ((dev->vendor_id == devs[i].vendor_id) && + (dev->device_id == devs[i].device_id)) + break; + /* Not supported, try the next one. */ + if (devs[i].device_name == NULL) + continue; + + msg_pdbg("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n", devs[i].vendor_name, + devs[i].device_name, dev->vendor_id, dev->device_id, dev->bus, dev->dev, + dev->func); + if (devs[i].status == NT) + msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashrom -p " + "xxxx' output \n" + "to flashrom at flashrom.org if it works for you. Please add the name " + "of your\n" + "PCI device to the subject. Thank you for your help!\n===\n"); + /* FIXME: We should count all matching devices, not * just those with a valid BAR. */ - if ((addr = pcidev_validate(dev, bar, devs)) != 0) { + if ((addr = pcidev_readbar(dev, bar)) != 0) { curaddr = addr; pcidev_dev = dev; found++; @@ -230,10 +215,8 @@ msg_perr("Error: No supported PCI device found.\n"); exit(1); } else if (found > 1) { - msg_perr("Error: Multiple supported PCI devices found. " - "Use 'flashrom -p xxxx:pci=bb:dd.f' \n" - "to explicitly select the card with the given BDF " - "(PCI bus, device, function).\n"); + msg_perr("Error: Multiple supported PCI devices found. Use 'flashrom -p xxxx:pci=bb:dd.f' \n" + "to explicitly select the card with the given BDF (PCI bus, device, function).\n"); exit(1); } Index: flashrom-pcidev_check_vendorid_cleanup/nicintel.c =================================================================== --- flashrom-pcidev_check_vendorid_cleanup/nicintel.c (Revision 1547) +++ flashrom-pcidev_check_vendorid_cleanup/nicintel.c (Arbeitskopie) @@ -87,7 +87,7 @@ goto error_out_unmap; /* FIXME: Using pcidev_dev _will_ cause pretty explosions in the future. */ - addr = pcidev_validate(pcidev_dev, PCI_BASE_ADDRESS_0, nics_intel); + addr = pcidev_readbar(pcidev_dev, PCI_BASE_ADDRESS_0); /* FIXME: This is not an aligned mapping. Use 4k? */ nicintel_control_bar = physmap("Intel NIC control/status reg", addr, NICINTEL_CONTROL_MEMMAP_SIZE); Index: flashrom-pcidev_check_vendorid_cleanup/programmer.h =================================================================== --- flashrom-pcidev_check_vendorid_cleanup/programmer.h (Revision 1547) +++ flashrom-pcidev_check_vendorid_cleanup/programmer.h (Arbeitskopie) @@ -227,7 +227,7 @@ const char *vendor_name; const char *device_name; }; -uintptr_t pcidev_validate(struct pci_dev *dev, int bar, const struct pcidev_status *devs); +uintptr_t pcidev_readbar(struct pci_dev *dev, int bar); uintptr_t pcidev_init(int bar, const struct pcidev_status *devs); /* rpci_write_* are reversible writes. The original PCI config space register * contents will be restored on shutdown. -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Mon Jul 16 13:57:36 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 13:57:36 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: References: <4FFC73DC.9010007@gmail.com> <4FFCBB70.3050300@gmx.net> Message-ID: <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> On Wed, 11 Jul 2012 18:17:19 -0400 Jason_Vannest at abercrombie.com wrote: > If I'm reading the flashrom site correctly this is one of the flash chips > that flashrom has support for already. So that might be a plus. Yes, the flash chip itself wont be a problem. There is a service manual for the POS located at ftp://ftp.software.ibm.com/software/retail/pubs/hw/4800_surepos700/btd5_4800-723-743-783_hsg_mst.pdf and it mentions a "backup bios" in the service processor section. That could complicate things further (or help you out if something fails if you are very lucky, but usually it make things worse for us). The remainder of the document is not very helpful (targeted at users not developers). > > I'd venture a guess that we can do this before IBM can > > even give you a quote. > > What kind of information would you want? I have pretty solid connections > with IBM I may be able to get questions answered about this. A schematic that contains the data path between the southbridge and the flash chip as well as its relation to the Renesas IC would indicate if we have to take care about the Renesas at all. Any additional information regarding the BIOS upgrade process (e.g. if the version of the Renesas' firmware has to be kept in sync with the BIOS) or the service processor's interaction with the flash chip would be very welcome too. Above all we need to work on the support for the VIA chipset (VT8251), but IBM won't be able to help us with that. I have no news regarding that. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 15:24:08 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 15:24:08 +0200 Subject: [flashrom] flashrom can't support "Intel C202" + "W25Q64" In-Reply-To: <201207051605543595584@163.com> References: <201207051605543595584@163.com> Message-ID: <201207161324.q6GDO89S014889@mail2.student.tuwien.ac.at> On Thu, 5 Jul 2012 16:05:56 +0800 "coolwzq" wrote: > Hi Flashrom, > > flashrom v0.9.5.2-r1515 can't support "Intel C202" + "W25Q64", can you help me? > Please see the attached file for more details. Hi, the problem is not the Intel chipset nor the flash chip itself, but the configuration of the former. The X9SCL is already on our list of unsupported boards, do you have a variant of it (X9SCL-F or X9SCL+-F)? -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From ryan.vanriper at adventiumlabs.com Mon Jul 16 19:21:34 2012 From: ryan.vanriper at adventiumlabs.com (Ryan VanRiper) Date: Mon, 16 Jul 2012 12:21:34 -0500 Subject: [flashrom] Rom regions in memory and on chip? In-Reply-To: References: <4FD7EF9D.8000302@gmx.net> Message-ID: <50044D9E.8050407@adventiumlabs.com> Wondering about how flash rom's typically operate in memory and if they are always/sometimes copied too and executed in physical memory? I'm guessing yes, as it's faster then running directly from the chip. If so, any idea if these memory regions are consistently the same on each boot ? Also, does it make sense to dump both the rom on the board, and the copied to memory rom ? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 262 bytes Desc: OpenPGP digital signature URL: From stefan.tauner at student.tuwien.ac.at Mon Jul 16 20:29:30 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 20:29:30 +0200 Subject: [flashrom] Laptop: HP Compaq nc6320 tests... In-Reply-To: <1339695406.2248.7.camel@gnutoo-hplaptop> References: <1339695406.2248.7.camel@gnutoo-hplaptop> Message-ID: <201207161829.q6GITUhC014495@mail2.student.tuwien.ac.at> On Thu, 14 Jun 2012 19:36:46 +0200 "Denis 'GNUtoo' Carikli" wrote: > 0x0ff000-0x0fffff:S as you have found out the firmware was not written. as carl-daniel mentioned on irc the log indicates that flashrom has just skipped all sectors because they were already equal to the image you tried to write. the quote above tells you that it has *S*kipped the block at address 0x0ff000-0x0fffff. If it would have *E*rased and/or *W*ritten it would look different. That said... we don't recommend that you try writing a different image or use -E on any laptop if you can't easily recover. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 20:41:52 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 20:41:52 +0200 Subject: [flashrom] Asus M4N78 PRO In-Reply-To: <4FDAA2E2.60303@telus.net> References: <4FDAA2E2.60303@telus.net> Message-ID: <201207161841.q6GIfqp1025280@mail2.student.tuwien.ac.at> On Thu, 14 Jun 2012 20:50:10 -0600 Tyler wrote: > Just flashed my motherboard ROM. Worked great Thanks. Hello Tyler and thanks for your report. We already knew about flashrom's support of your chip so there is nothing we can add to this. One small note though: but please use an updated version of flashrom in the future, since 0.9.1 is ancient and has some bugs that were fixed in the meantime beside lots of new features and drivers. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 20:49:19 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 20:49:19 +0200 Subject: [flashrom] Intel DH61AG not working In-Reply-To: References: Message-ID: <201207161849.q6GInJWm031144@mail2.student.tuwien.ac.at> On Tue, 19 Jun 2012 19:49:51 +0200 "Marek Zakrzewski" wrote: > 0x5C: 0x01840003 FREG2: WARNING: Management Engine region > (0x00003000-0x00184fff) is locked. Hello Marek, thanks for your report! The problem is the locked ME region as quoted above. We are working on unlocking it, but intel does not provide us any documentation so please do not expect a solution soon. I have added the board to our list of (un)supported boards (with an appropriate note) and will commit that later together with other small changes. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 20:54:58 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 20:54:58 +0200 Subject: [flashrom] flashrom output for chipset Intel QM67 In-Reply-To: References: Message-ID: <201207161854.q6GIswTe003968@mail2.student.tuwien.ac.at> On Thu, 21 Jun 2012 10:37:49 +0100 David Jones wrote: > Hi, > > I have a Dell E6520 laptop that I'd like to read the flash rom image from. > No need to write (yet). Flashrom say its supports the chipset but then > fails (using the latest svn version). To help you out I've attached the > verbose output. > > This laptop is not in use and happy to risk bricking it if it helps you > guys out. If there's anything I can do just let me know, game for > experimenting and jumping into the code if you can give some pointers. Probably not very interesting to you David, but i have added the laptop to our list of unsupported hardware (this wont change for a while as previously mentioned). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 20:59:13 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 20:59:13 +0200 Subject: [flashrom] Lenovo Ideapad S205 In-Reply-To: References: Message-ID: <201207161859.q6GIxDa6007092@mail2.student.tuwien.ac.at> On Wed, 9 May 2012 14:41:33 +0100 Horatiu Bota wrote: > flashrom v0.9.5.2-r1517 on Linux 3.2.0-20-generic (x86_64), built with > libpci 3.1.8, GCC 4.6.3, little endian > flashrom is free software, get the source code at http://www.flashrom.org > > Calibrating delay loop... OS timer resolution is 1 usecs, 546M loops per > second, 10 myus = 10 us, 100 myus = 100 us, 1000 myus = 995 us, 10000 myus > = 9973 us, 4 myus = 5 us, OK. > Initializing internal programmer > No coreboot table found. > DMI string system-manufacturer: "LENOVO" > DMI string system-product-name: "Brazos" > DMI string system-version: "Ideapad S205" > DMI string baseboard-manufacturer: "LENOVO" > DMI string baseboard-product-name: "Inagua" > DMI string baseboard-version: "109-B78210-00A" > DMI string chassis-type: "Notebook" > Laptop detected via DMI. Hello Horatiu and thanks for your report! Could you please send us the output of 'lspci -nnvvvxxx' and 'superiotool -deV' too? It looks like an embedded controller guards the access to the flash chip and above commands hopefully allow us to identify it. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 21:42:41 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 21:42:41 +0200 Subject: [flashrom] Output of Flashrom for Asus M2N68-VM In-Reply-To: <20120527144408.11790@gmx.net> References: <20120527144408.11790@gmx.net> Message-ID: <201207161942.q6GJgfuu011211@mail2.student.tuwien.ac.at> On Sun, 27 May 2012 16:44:08 +0200 juergen.bullinger at gmx.de wrote: > Hi, > > thank you for the great tool it saved me from messing ouround with DOS boot dics etc on a system which is purely running on Linux. > > I updated the bios of this board and in case the diagnostic output of this board is interesting for you, here is it: > > juergen at media:/scratch/software/bios$ sudo flashrom > [sudo] password for juergen: > flashrom v0.9.5.2-r1517 on Linux 3.2.0-25-generic (x86_64), built with libpci 3.1.8, GCC 4.6.3, little endian > flashrom is free software, get the source code at http://www.flashrom.org > > Calibrating delay loop... OK. > Found chipset "NVIDIA MCP67". Enabling flash write... This chipset is not really supported yet. Guesswork... > SPI on this chipset is WIP. Please report any success or failure by mailing us the verbose output to flashrom at flashrom.org, thanks! > Mapping NVIDIA MCP6x SPI at 0xfec80000, unaligned size 0x544. > Please send the output of "flashrom -V" to flashrom at flashrom.org with > your board name: flashrom -V as the subject to help us finish support for your > chipset. Thanks. > OK. > Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. > No operations were specified. Hello J?rgen, thanks for your report! I have added the board to our list of supported board and will commit that later together with other small changes. It has happened in the past that people did not noticed that flashrom did skip to change anything because the supplied image was identical to the content of the flash chip. I presume this NOT the case here, but if you noticed that it was indeed so, please say so... -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 22:03:25 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 22:03:25 +0200 Subject: [flashrom] AT25DF321A with ASRock 880G Pro3 MB In-Reply-To: <1342203122.3126.16.camel@Lenovo> References: <1342203122.3126.16.camel@Lenovo> Message-ID: <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> On Fri, 13 Jul 2012 22:12:02 +0400 Roman Elshin wrote: > It looks like support for this flash part work correctly in flashrom (it > is not native flash for this mb). Hello Roman, thanks for your report! I have marked the flash chip as fully tested and will commit that later together with other small changes. Do you happen to know if the original chip works as well in that board? I could then add the board itself to our list and be sure that it would work for "normal" users that don't flip chips too ;) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 16 23:26:48 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 16 Jul 2012 23:26:48 +0200 Subject: [flashrom] add Numonyx/Micron N25Q128 In-Reply-To: References: <201207060514.q665EFPR026911@mail2.student.tuwien.ac.at> Message-ID: <201207162126.q6GLQm5X021380@mail2.student.tuwien.ac.at> On Wed, 11 Jul 2012 16:10:49 +0200 frederic.temporelli at bull.net wrote: Hello Frederic, > the main idea is to unlock the regions from the ME > Document with datails about ME messages for X79/C600 are Intel > Restricted... :-( that is/was our main idea too, but since we could not obtain the needed docs and my REing skills are not as good as needed there was little progress in that direction. i have documented most of what i could find out in our documentation, see http://flashrom.org/trac/flashrom/browser/trunk/Documentation/mysteries_intel.txt#L17 if you can spot any errors or can provide more detail i am happy to refine (and use) it. > But seems that ME messages (HMRFPO and others) used in Maho Bay and Chief > River platform are the same, > and "BIOS Writers Guide" for these systems (document 490124) is only > "Intel Confidential" (and HMRFPO is described in this document...) > I hope that Intel will soon set all these documents available to > everybody... hope does not really help... :) do you have any clear indications that they might open them up? > note: there are lot of work to do... first, there's only one IOCTL > developed in mei driver (mei driver may be the best way to interact with > ME...) i have an almost complete (but unpublished) user-space reimplementation of the parts of the linux kernel MEI driver that is needed to send the HMRFPO message from flashrom... if i would know the GUIDs and payloads to send (and receive on success), there could be ME unlocking support in a matter of days i think. > Other topic (may be more related to layout feature): currently, when using > flashrom for BIOS upgrade, Serial Numbers and some other information in > DMI are overwritten... > (seen on Supermicro motherboards) > I don't have details, but it may be nice to investigate this issue... yes this happens sometimes but flashrom is not the right place to fix it. flashrom has the goal to read and write images to flash chips. if the images are not suited for the system the flash chip is used afterwards then it is per definition not our problem. one could of course use (lib)flashrom as a backend and create something that downloads and prepares correct images for all possible systems... but the person implementing this is not in sight yet ;) so the most realistic approach for such problems for now is that you prepare such images by hand or some customized tools/binary diffs, sorry that there is nothing better than that yet. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From c-d.hailfinger.devel.2006 at gmx.net Mon Jul 16 23:28:22 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Mon, 16 Jul 2012 23:28:22 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> References: <4FF63F43.5090603@gmx.net> <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> Message-ID: <50048776.6020603@gmx.net> Am 06.07.2012 05:42 schrieb Stefan Tauner: > On Fri, 06 Jul 2012 03:28:35 +0200 > Carl-Daniel Hailfinger wrote: > >> If only one programmer driver is compiled in, make that driver the >> default. If more than one driver is compiled in, require --programmer >> specification at the command line. >> >> 3 results from a default flashrom configuration: >> [?] >> This patch represents rough consensus from IRC. I would like to require >> --programmer in all cases to make sure nobody gets bitten by two >> different single-programmer builds (e.g. dediprog and internal), but >> this patch is already a step in the right direction. > Unlikely situation, but i would ack such a patch too. In that case, I'd like to propose the patch below. > OTOH >90% of the users would just require the internal programmer, > but out of those 90%, 99% probably use pre-compiled versions with > the default config... > >> Please check that the printed error messages make sense. I took the >> liberty of removing "flashrom is free software..." from the output to >> keep this mail readable. > there is an easier way to get rid of that line than deleting it manually... > just saying :) > >> Signed-off-by: Carl-Daniel Hailfinger >> >> Index: flashrom-programmer_no_default/cli_classic.c >> =================================================================== >> --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) >> +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) >> [?] >> if (prog == PROGRAMMER_INVALID) >> - prog = default_programmer; >> + if (default_programmer == PROGRAMMER_INVALID) { >> + /* More than one programmer compiled in, there is no default choice. */ >> + msg_perr("Please select a programmer with --programmer . Valid choices are:\n"); > ^ while i see your point (pun intended), the space is still wrong imho. > What about "Please select a programmer with the --programmer parameter. Valid choices are:\n"? > if the 80 column limit would be a problem (it is not afaics) then it could become... > "Please select a programmer with the --programmer parameter.\nValid choices are: " > that may look nicer anyway. Fixed. >> if (prog == PROGRAMMER_INVALID) >> - prog = default_programmer; >> + if (default_programmer == PROGRAMMER_INVALID) { >> + /* More than one programmer compiled in, there is no default choice. */ >> + msg_perr("Please select a programmer with --programmer . Valid choices are:\n"); >> + list_programmers_linebreak(0, 80, 0); >> + ret = 1; >> + goto out; >> + } else { >> + prog = default_programmer; >> + } > please add {} around the inner if, else gcc complains. Fixed. > Acked-by: Stefan Tauner > iff 2 out of idwer, uwe, twice11 agree with it. New version. Always require the --programmer parameter on the command line if any flash chip access (probe/read/write/erase/...) is requested. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-programmer_no_default/cli_classic.c =================================================================== --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) @@ -31,74 +31,6 @@ #include "flashchips.h" #include "programmer.h" -#if CONFIG_INTERNAL == 1 -static enum programmer default_programmer = PROGRAMMER_INTERNAL; -#elif CONFIG_DUMMY == 1 -static enum programmer default_programmer = PROGRAMMER_DUMMY; -#else -/* If neither internal nor dummy are selected, we must pick a sensible default. - * Since there is no reason to prefer a particular external programmer, we fail - * if more than one of them is selected. If only one is selected, it is clear - * that the user wants that one to become the default. - */ -#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 -#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. -#endif -static enum programmer default_programmer = -#if CONFIG_NIC3COM == 1 - PROGRAMMER_NIC3COM -#endif -#if CONFIG_NICREALTEK == 1 - PROGRAMMER_NICREALTEK -#endif -#if CONFIG_NICNATSEMI == 1 - PROGRAMMER_NICNATSEMI -#endif -#if CONFIG_GFXNVIDIA == 1 - PROGRAMMER_GFXNVIDIA -#endif -#if CONFIG_DRKAISER == 1 - PROGRAMMER_DRKAISER -#endif -#if CONFIG_SATASII == 1 - PROGRAMMER_SATASII -#endif -#if CONFIG_ATAHPT == 1 - PROGRAMMER_ATAHPT -#endif -#if CONFIG_FT2232_SPI == 1 - PROGRAMMER_FT2232_SPI -#endif -#if CONFIG_SERPROG == 1 - PROGRAMMER_SERPROG -#endif -#if CONFIG_BUSPIRATE_SPI == 1 - PROGRAMMER_BUSPIRATE_SPI -#endif -#if CONFIG_DEDIPROG == 1 - PROGRAMMER_DEDIPROG -#endif -#if CONFIG_RAYER_SPI == 1 - PROGRAMMER_RAYER_SPI -#endif -#if CONFIG_NICINTEL == 1 - PROGRAMMER_NICINTEL -#endif -#if CONFIG_NICINTEL_SPI == 1 - PROGRAMMER_NICINTEL_SPI -#endif -#if CONFIG_OGP_SPI == 1 - PROGRAMMER_OGP_SPI -#endif -#if CONFIG_SATAMV == 1 - PROGRAMMER_SATAMV -#endif -#if CONFIG_LINUX_SPI == 1 - PROGRAMMER_LINUX_SPI -#endif -; -#endif - static void cli_classic_usage(const char *name) { printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|" @@ -107,11 +39,11 @@ #endif "-E|-r |-w |-v ]\n" " [-c ] [-l ] [-o ]\n" - " [-i ] [-p [:]]\n\n"); + " [-i ] -p [:]\n\n"); printf("Please note that the command line interface for flashrom has " "changed between\n" - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" "Do not use flashrom in scripts or other automated tools " "without checking\n" "that your flashrom version won't interpret options in a " @@ -360,8 +292,9 @@ } } if (prog == PROGRAMMER_INVALID) { - fprintf(stderr, "Error: Unknown programmer " - "%s.\n", optarg); + fprintf(stderr, "Error: Unknown programmer \"%s\". Valid choices are:\n", + optarg); + list_programmers_linebreak(0, 80, 0); cli_classic_abort_usage(); } break; @@ -468,8 +401,13 @@ flash = NULL; } - if (prog == PROGRAMMER_INVALID) - prog = default_programmer; + if (prog == PROGRAMMER_INVALID) { + msg_perr("Please select a programmer with the --programmer parameter.\n" + "Valid choices are:\n"); + list_programmers_linebreak(0, 80, 0); + ret = 1; + goto out; + } /* FIXME: Delay calibration should happen in programmer code. */ myusec_calibrate_delay(); Index: flashrom-programmer_no_default/flashrom.8 =================================================================== --- flashrom-programmer_no_default/flashrom.8 (Revision 1547) +++ flashrom-programmer_no_default/flashrom.8 (Arbeitskopie) @@ -7,7 +7,7 @@ \fB\-v\fR ] [\fB\-c\fR ] \ [\fB\-l\fR ] - [\fB\-i\fR ] [\fB\-p\fR [:]] + [\fB\-i\fR ] \fB\-p\fR [:] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -63,7 +63,7 @@ feel that the time for verification takes too long. .sp Typical usage is: -.B "flashrom \-n \-w " +.B "flashrom \-p prog \-n \-w " .sp This option is only useful in combination with .BR \-\-write . @@ -117,13 +117,12 @@ All addresses are offsets within the file, not absolute addresses! If you only want to update the normal image in a ROM you can say: .sp -.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" +.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" .sp To update normal and fallback but leave the VGA BIOS alone, say: .sp -.B " flashrom \-l rom.layout \-i normal \" -.br -.B " \-i fallback \-w agami_aruma.rom" +.B " flashrom \-p prog \-l rom.layout \-i normal \ +\-i fallback \-w agami_aruma.rom" .sp Currently overlapping sections are not supported. .TP Index: flashrom-programmer_no_default/flashrom.c =================================================================== --- flashrom-programmer_no_default/flashrom.c (Revision 1547) +++ flashrom-programmer_no_default/flashrom.c (Arbeitskopie) @@ -59,6 +59,10 @@ /* Is writing allowed with this programmer? */ int programmer_may_write; +#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 +#error You have to enable at least one programmer! +#endif + const struct programmer_entry programmer_table[] = { #if CONFIG_INTERNAL == 1 { -- http://www.hailfinger.org/ From svn at flashrom.org Mon Jul 16 23:32:19 2012 From: svn at flashrom.org (repository service) Date: Mon, 16 Jul 2012 23:32:19 +0200 Subject: [flashrom] [commit] r1548 - trunk Message-ID: Author: hailfinger Date: Mon Jul 16 23:32:19 2012 New Revision: 1548 URL: http://flashrom.org/trac/flashrom/changeset/1548 Log: Check vendor_id for PCI based external programmers. Restructure PCI device detection code. Rename pcidev_validate to pcidev_readbar. Note: Slight changes in behaviour are possible, especially on dual/quad chip NICs which appear as more than one PCI device. Found devices are no longer printed at _pinfo level, but rather at _pdbg level. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Michael Karcher Modified: trunk/nicintel.c trunk/pcidev.c trunk/programmer.h Modified: trunk/nicintel.c ============================================================================== --- trunk/nicintel.c Sat Jun 30 01:07:14 2012 (r1547) +++ trunk/nicintel.c Mon Jul 16 23:32:19 2012 (r1548) @@ -87,7 +87,7 @@ goto error_out_unmap; /* FIXME: Using pcidev_dev _will_ cause pretty explosions in the future. */ - addr = pcidev_validate(pcidev_dev, PCI_BASE_ADDRESS_0, nics_intel); + addr = pcidev_readbar(pcidev_dev, PCI_BASE_ADDRESS_0); /* FIXME: This is not an aligned mapping. Use 4k? */ nicintel_control_bar = physmap("Intel NIC control/status reg", addr, NICINTEL_CONTROL_MEMMAP_SIZE); Modified: trunk/pcidev.c ============================================================================== --- trunk/pcidev.c Sat Jun 30 01:07:14 2012 (r1547) +++ trunk/pcidev.c Mon Jul 16 23:32:19 2012 (r1548) @@ -35,157 +35,122 @@ TYPE_UNKNOWN }; -uintptr_t pcidev_validate(struct pci_dev *dev, int bar, - const struct pcidev_status *devs) +uintptr_t pcidev_readbar(struct pci_dev *dev, int bar) { - int i; uint64_t addr; uint32_t upperaddr; uint8_t headertype; uint16_t supported_cycles; enum pci_bartype bartype = TYPE_UNKNOWN; - for (i = 0; devs[i].device_name != NULL; i++) { - if (dev->device_id != devs[i].device_id) - continue; - - msg_pinfo("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n", - devs[i].vendor_name, devs[i].device_name, - dev->vendor_id, dev->device_id, dev->bus, dev->dev, - dev->func); - - headertype = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f; - msg_pspew("PCI header type 0x%02x\n", headertype); - - /* - * Don't use dev->base_addr[x] (as value for 'bar'), won't - * work on older libpci. - */ - addr = pci_read_long(dev, bar); - - /* Sanity checks. */ - switch (headertype) { - case PCI_HEADER_TYPE_NORMAL: - switch (bar) { - case PCI_BASE_ADDRESS_0: - case PCI_BASE_ADDRESS_1: - case PCI_BASE_ADDRESS_2: - case PCI_BASE_ADDRESS_3: - case PCI_BASE_ADDRESS_4: - case PCI_BASE_ADDRESS_5: - if ((addr & PCI_BASE_ADDRESS_SPACE) == - PCI_BASE_ADDRESS_SPACE_IO) - bartype = TYPE_IOBAR; - else - bartype = TYPE_MEMBAR; - break; - case PCI_ROM_ADDRESS: - bartype = TYPE_ROMBAR; - break; - } + + headertype = pci_read_byte(dev, PCI_HEADER_TYPE) & 0x7f; + msg_pspew("PCI header type 0x%02x\n", headertype); + + /* Don't use dev->base_addr[x] (as value for 'bar'), won't work on older libpci. */ + addr = pci_read_long(dev, bar); + + /* Sanity checks. */ + switch (headertype) { + case PCI_HEADER_TYPE_NORMAL: + switch (bar) { + case PCI_BASE_ADDRESS_0: + case PCI_BASE_ADDRESS_1: + case PCI_BASE_ADDRESS_2: + case PCI_BASE_ADDRESS_3: + case PCI_BASE_ADDRESS_4: + case PCI_BASE_ADDRESS_5: + if ((addr & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) + bartype = TYPE_IOBAR; + else + bartype = TYPE_MEMBAR; break; - case PCI_HEADER_TYPE_BRIDGE: - switch (bar) { - case PCI_BASE_ADDRESS_0: - case PCI_BASE_ADDRESS_1: - if ((addr & PCI_BASE_ADDRESS_SPACE) == - PCI_BASE_ADDRESS_SPACE_IO) - bartype = TYPE_IOBAR; - else - bartype = TYPE_MEMBAR; - break; - case PCI_ROM_ADDRESS1: - bartype = TYPE_ROMBAR; - break; - } + case PCI_ROM_ADDRESS: + bartype = TYPE_ROMBAR; break; - case PCI_HEADER_TYPE_CARDBUS: + } + break; + case PCI_HEADER_TYPE_BRIDGE: + switch (bar) { + case PCI_BASE_ADDRESS_0: + case PCI_BASE_ADDRESS_1: + if ((addr & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) + bartype = TYPE_IOBAR; + else + bartype = TYPE_MEMBAR; break; - default: - msg_perr("Unknown PCI header type 0x%02x, BAR type " - "cannot be determined reliably.\n", headertype); + case PCI_ROM_ADDRESS1: + bartype = TYPE_ROMBAR; break; } + break; + case PCI_HEADER_TYPE_CARDBUS: + break; + default: + msg_perr("Unknown PCI header type 0x%02x, BAR type cannot be determined reliably.\n", + headertype); + break; + } - supported_cycles = pci_read_word(dev, PCI_COMMAND); + supported_cycles = pci_read_word(dev, PCI_COMMAND); - msg_pdbg("Requested BAR is "); - switch (bartype) { - case TYPE_MEMBAR: - msg_pdbg("MEM"); - if (!(supported_cycles & PCI_COMMAND_MEMORY)) { - msg_perr("MEM BAR access requested, but device " - "has MEM space accesses disabled.\n"); - /* TODO: Abort here? */ - } - msg_pdbg(", %sbit, %sprefetchable\n", - ((addr & 0x6) == 0x0) ? "32" : - (((addr & 0x6) == 0x4) ? "64" : "reserved"), - (addr & 0x8) ? "" : "not "); - if ((addr & 0x6) == 0x4) { - /* The spec says that a 64-bit register consumes - * two subsequent dword locations. - */ - upperaddr = pci_read_long(dev, bar + 4); - if (upperaddr != 0x00000000) { - /* Fun! A real 64-bit resource. */ - if (sizeof(uintptr_t) != sizeof(uint64_t)) { - msg_perr("BAR unreachable!"); - /* TODO: Really abort here? If - * multiple PCI devices match, - * we might never tell the user - * about the other devices. - */ - return 0; - } - addr |= (uint64_t)upperaddr << 32; + msg_pdbg("Requested BAR is "); + switch (bartype) { + case TYPE_MEMBAR: + msg_pdbg("MEM"); + if (!(supported_cycles & PCI_COMMAND_MEMORY)) { + msg_perr("MEM BAR access requested, but device has MEM space accesses disabled.\n"); + /* TODO: Abort here? */ + } + msg_pdbg(", %sbit, %sprefetchable\n", + ((addr & 0x6) == 0x0) ? "32" : (((addr & 0x6) == 0x4) ? "64" : "reserved"), + (addr & 0x8) ? "" : "not "); + if ((addr & 0x6) == 0x4) { + /* The spec says that a 64-bit register consumes + * two subsequent dword locations. + */ + upperaddr = pci_read_long(dev, bar + 4); + if (upperaddr != 0x00000000) { + /* Fun! A real 64-bit resource. */ + if (sizeof(uintptr_t) != sizeof(uint64_t)) { + msg_perr("BAR unreachable!"); + /* TODO: Really abort here? If multiple PCI devices match, + * we might never tell the user about the other devices. + */ + return 0; } + addr |= (uint64_t)upperaddr << 32; } - addr &= PCI_BASE_ADDRESS_MEM_MASK; - break; - case TYPE_IOBAR: - msg_pdbg("I/O\n"); + } + addr &= PCI_BASE_ADDRESS_MEM_MASK; + break; + case TYPE_IOBAR: + msg_pdbg("I/O\n"); #if __FLASHROM_HAVE_OUTB__ - if (!(supported_cycles & PCI_COMMAND_IO)) { - msg_perr("I/O BAR access requested, but device " - "has I/O space accesses disabled.\n"); - /* TODO: Abort here? */ - } + if (!(supported_cycles & PCI_COMMAND_IO)) { + msg_perr("I/O BAR access requested, but device has I/O space accesses disabled.\n"); + /* TODO: Abort here? */ + } #else - msg_perr("I/O BAR access requested, but flashrom does " - "not support I/O BAR access on this platform " - "(yet).\n"); + msg_perr("I/O BAR access requested, but flashrom does not support I/O BAR access on this " + "platform (yet).\n"); #endif - addr &= PCI_BASE_ADDRESS_IO_MASK; - break; - case TYPE_ROMBAR: - msg_pdbg("ROM\n"); - /* Not sure if this check is needed. */ - if (!(supported_cycles & PCI_COMMAND_MEMORY)) { - msg_perr("MEM BAR access requested, but device " - "has MEM space accesses disabled.\n"); - /* TODO: Abort here? */ - } - addr &= PCI_ROM_ADDRESS_MASK; - break; - case TYPE_UNKNOWN: - msg_perr("BAR type unknown, please report a bug at " - "flashrom at flashrom.org\n"); - } - - if (devs[i].status == NT) { - msg_pinfo("===\nThis PCI device is UNTESTED. Please " - "report the 'flashrom -p xxxx' output \n" - "to flashrom at flashrom.org if it works " - "for you. Please add the name of your\n" - "PCI device to the subject. Thank you for " - "your help!\n===\n"); + addr &= PCI_BASE_ADDRESS_IO_MASK; + break; + case TYPE_ROMBAR: + msg_pdbg("ROM\n"); + /* Not sure if this check is needed. */ + if (!(supported_cycles & PCI_COMMAND_MEMORY)) { + msg_perr("MEM BAR access requested, but device has MEM space accesses disabled.\n"); + /* TODO: Abort here? */ } - - return (uintptr_t)addr; + addr &= PCI_ROM_ADDRESS_MASK; + break; + case TYPE_UNKNOWN: + msg_perr("BAR type unknown, please report a bug at flashrom at flashrom.org\n"); } - return 0; + return (uintptr_t)addr; } uintptr_t pcidev_init(int bar, const struct pcidev_status *devs) @@ -195,6 +160,7 @@ char *pcidev_bdf; char *msg = NULL; int found = 0; + int i; uintptr_t addr = 0, curaddr = 0; pacc = pci_alloc(); /* Get the pci_access structure */ @@ -214,10 +180,29 @@ for (dev = pacc->devices; dev; dev = dev->next) { if (pci_filter_match(&filter, dev)) { + /* Check against list of supported devices. */ + for (i = 0; devs[i].device_name != NULL; i++) + if ((dev->vendor_id == devs[i].vendor_id) && + (dev->device_id == devs[i].device_id)) + break; + /* Not supported, try the next one. */ + if (devs[i].device_name == NULL) + continue; + + msg_pdbg("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n", devs[i].vendor_name, + devs[i].device_name, dev->vendor_id, dev->device_id, dev->bus, dev->dev, + dev->func); + if (devs[i].status == NT) + msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashrom -p " + "xxxx' output \n" + "to flashrom at flashrom.org if it works for you. Please add the name " + "of your\n" + "PCI device to the subject. Thank you for your help!\n===\n"); + /* FIXME: We should count all matching devices, not * just those with a valid BAR. */ - if ((addr = pcidev_validate(dev, bar, devs)) != 0) { + if ((addr = pcidev_readbar(dev, bar)) != 0) { curaddr = addr; pcidev_dev = dev; found++; @@ -230,10 +215,8 @@ msg_perr("Error: No supported PCI device found.\n"); exit(1); } else if (found > 1) { - msg_perr("Error: Multiple supported PCI devices found. " - "Use 'flashrom -p xxxx:pci=bb:dd.f' \n" - "to explicitly select the card with the given BDF " - "(PCI bus, device, function).\n"); + msg_perr("Error: Multiple supported PCI devices found. Use 'flashrom -p xxxx:pci=bb:dd.f' \n" + "to explicitly select the card with the given BDF (PCI bus, device, function).\n"); exit(1); } Modified: trunk/programmer.h ============================================================================== --- trunk/programmer.h Sat Jun 30 01:07:14 2012 (r1547) +++ trunk/programmer.h Mon Jul 16 23:32:19 2012 (r1548) @@ -227,7 +227,7 @@ const char *vendor_name; const char *device_name; }; -uintptr_t pcidev_validate(struct pci_dev *dev, int bar, const struct pcidev_status *devs); +uintptr_t pcidev_readbar(struct pci_dev *dev, int bar); uintptr_t pcidev_init(int bar, const struct pcidev_status *devs); /* rpci_write_* are reversible writes. The original PCI config space register * contents will be restored on shutdown. From c-d.hailfinger.devel.2006 at gmx.net Mon Jul 16 23:33:21 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Mon, 16 Jul 2012 23:33:21 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <5003BFAB.3060601@gmx.net> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> <5003BFAB.3060601@gmx.net> Message-ID: <500488A1.5060001@gmx.net> Am 16.07.2012 09:15 schrieb Carl-Daniel Hailfinger: >> > If you rename pcidev_validate to pcidev_readbar, this is >> > Acked-by: Michael Karcher > Thanks! Updated patch below (only changes from the previous version are > 112 column reformattings and your suggested name change. > Signed-off-by: Carl-Daniel Hailfinger Thanks for the review. Committed in r1548. Regards, Carl-Daniel -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Tue Jul 17 00:42:35 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 17 Jul 2012 00:42:35 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <50048776.6020603@gmx.net> References: <4FF63F43.5090603@gmx.net> <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> <50048776.6020603@gmx.net> Message-ID: <201207162242.q6GMgZKK024553@mail2.student.tuwien.ac.at> On Mon, 16 Jul 2012 23:28:22 +0200 Carl-Daniel Hailfinger wrote: > New version. > > Always require the --programmer parameter on the command line if any > flash chip access (probe/read/write/erase/...) is requested. > > Signed-off-by: Carl-Daniel Hailfinger > > Index: flashrom-programmer_no_default/cli_classic.c > =================================================================== > --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) > +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) > @@ -31,74 +31,6 @@ > #include "flashchips.h" > #include "programmer.h" > > -#if CONFIG_INTERNAL == 1 > -static enum programmer default_programmer = PROGRAMMER_INTERNAL; > -#elif CONFIG_DUMMY == 1 > -static enum programmer default_programmer = PROGRAMMER_DUMMY; > -#else > -/* If neither internal nor dummy are selected, we must pick a sensible default. > - * Since there is no reason to prefer a particular external programmer, we fail > - * if more than one of them is selected. If only one is selected, it is clear > - * that the user wants that one to become the default. > - */ > -#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 > -#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. > -#endif > -static enum programmer default_programmer = > -#if CONFIG_NIC3COM == 1 > - PROGRAMMER_NIC3COM > -#endif > -#if CONFIG_NICREALTEK == 1 > - PROGRAMMER_NICREALTEK > -#endif > -#if CONFIG_NICNATSEMI == 1 > - PROGRAMMER_NICNATSEMI > -#endif > -#if CONFIG_GFXNVIDIA == 1 > - PROGRAMMER_GFXNVIDIA > -#endif > -#if CONFIG_DRKAISER == 1 > - PROGRAMMER_DRKAISER > -#endif > -#if CONFIG_SATASII == 1 > - PROGRAMMER_SATASII > -#endif > -#if CONFIG_ATAHPT == 1 > - PROGRAMMER_ATAHPT > -#endif > -#if CONFIG_FT2232_SPI == 1 > - PROGRAMMER_FT2232_SPI > -#endif > -#if CONFIG_SERPROG == 1 > - PROGRAMMER_SERPROG > -#endif > -#if CONFIG_BUSPIRATE_SPI == 1 > - PROGRAMMER_BUSPIRATE_SPI > -#endif > -#if CONFIG_DEDIPROG == 1 > - PROGRAMMER_DEDIPROG > -#endif > -#if CONFIG_RAYER_SPI == 1 > - PROGRAMMER_RAYER_SPI > -#endif > -#if CONFIG_NICINTEL == 1 > - PROGRAMMER_NICINTEL > -#endif > -#if CONFIG_NICINTEL_SPI == 1 > - PROGRAMMER_NICINTEL_SPI > -#endif > -#if CONFIG_OGP_SPI == 1 > - PROGRAMMER_OGP_SPI > -#endif > -#if CONFIG_SATAMV == 1 > - PROGRAMMER_SATAMV > -#endif > -#if CONFIG_LINUX_SPI == 1 > - PROGRAMMER_LINUX_SPI > -#endif > -; > -#endif > - > static void cli_classic_usage(const char *name) > { > printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|" > @@ -107,11 +39,11 @@ > #endif > "-E|-r |-w |-v ]\n" > " [-c ] [-l ] [-o ]\n" > - " [-i ] [-p [:]]\n\n"); > + " [-i ] -p [:]\n\n"); dont save changed line counts in the wrong places. please move the -p part right after "flashrom" here and in the other bits (e.g. manpage). i would even argue that all mandatory parameters should be mentioned first (i.e. -E | ... should be moved up too). > > printf("Please note that the command line interface for flashrom has " > "changed between\n" > - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" > + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" either name all (known) CLI changes or just say something like "has been changed before?" imho, but it is ok if you want to leave the hunk as it is. > "Do not use flashrom in scripts or other automated tools " > "without checking\n" > "that your flashrom version won't interpret options in a " > @@ -360,8 +292,9 @@ > } > } > if (prog == PROGRAMMER_INVALID) { > - fprintf(stderr, "Error: Unknown programmer " > - "%s.\n", optarg); > + fprintf(stderr, "Error: Unknown programmer \"%s\". Valid choices are:\n", > + optarg); > + list_programmers_linebreak(0, 80, 0); > cli_classic_abort_usage(); > } > break; > @@ -468,8 +401,13 @@ > flash = NULL; > } > > - if (prog == PROGRAMMER_INVALID) > - prog = default_programmer; > + if (prog == PROGRAMMER_INVALID) { > + msg_perr("Please select a programmer with the --programmer parameter.\n" > + "Valid choices are:\n"); > + list_programmers_linebreak(0, 80, 0); > + ret = 1; > + goto out; > + } > > /* FIXME: Delay calibration should happen in programmer code. */ > myusec_calibrate_delay(); > Index: flashrom-programmer_no_default/flashrom.8 > =================================================================== > --- flashrom-programmer_no_default/flashrom.8 (Revision 1547) > +++ flashrom-programmer_no_default/flashrom.8 (Arbeitskopie) > @@ -7,7 +7,7 @@ > \fB\-v\fR ] > [\fB\-c\fR ] \ > [\fB\-l\fR ] > - [\fB\-i\fR ] [\fB\-p\fR [:]] > + [\fB\-i\fR ] \fB\-p\fR [:] see above > .SH DESCRIPTION > .B flashrom > is a utility for detecting, reading, writing, verifying and erasing flash > @@ -63,7 +63,7 @@ > feel that the time for verification takes too long. > .sp > Typical usage is: > -.B "flashrom \-n \-w " > +.B "flashrom \-p prog \-n \-w " > .sp > This option is only useful in combination with > .BR \-\-write . > @@ -117,13 +117,12 @@ > All addresses are offsets within the file, not absolute addresses! > If you only want to update the normal image in a ROM you can say: > .sp > -.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" > +.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" > .sp > To update normal and fallback but leave the VGA BIOS alone, say: > .sp > -.B " flashrom \-l rom.layout \-i normal \" > -.br > -.B " \-i fallback \-w agami_aruma.rom" > +.B " flashrom \-p prog \-l rom.layout \-i normal \ > +\-i fallback \-w agami_aruma.rom" maybe rename the image name as proposed by idwer...? > .sp > Currently overlapping sections are not supported. > .TP > Index: flashrom-programmer_no_default/flashrom.c > =================================================================== > --- flashrom-programmer_no_default/flashrom.c (Revision 1547) > +++ flashrom-programmer_no_default/flashrom.c (Arbeitskopie) > @@ -59,6 +59,10 @@ > /* Is writing allowed with this programmer? */ > int programmer_may_write; > > +#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 > +#error You have to enable at least one programmer! > +#endif > + why did you choose this location for the check? wouldnt it make more sense to have it in the makefile? > const struct programmer_entry programmer_table[] = { > #if CONFIG_INTERNAL == 1 > { Acked-by: Stefan Tauner -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From roxmail at list.ru Tue Jul 17 06:26:40 2012 From: roxmail at list.ru (Roman Elshin) Date: Tue, 17 Jul 2012 08:26:40 +0400 Subject: [flashrom] AT25DF321A with ASRock 880G Pro3 MB In-Reply-To: <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> References: <1342203122.3126.16.camel@Lenovo> <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> Message-ID: <1342499200.2098.2.camel@Lenovo> > Do you happen to know if the original chip works as well in that board? This board was shipped with Winbond W25Q32 flash chip. From jhl at mafipulation.org Tue Jul 17 07:39:31 2012 From: jhl at mafipulation.org (James Laird) Date: Tue, 17 Jul 2012 15:39:31 +1000 Subject: [flashrom] [PATCH] Add Altera USB Blaster SPI programmer Message-ID: <20120717053931.GA23832@blants.np.axdf> Adds support for the Altera USB Blaster programming dongle in SPI mode. It has only been tested against a cheap clone ($10, unclear origin), and so is marked as not tested. It should also support several variants which are present on Altera dev boards (PID 6002,6003...), although I believe these are hardwired to their targets. Signed-off-by: James Laird Index: Makefile =================================================================== --- Makefile (revision 1548) +++ Makefile (working copy) @@ -84,7 +84,7 @@ else override CONFIG_SERPROG = no endif -# Dediprog and FT2232 are not supported under DOS (missing USB support). +# Dediprog, FT2232 and USB Blaster are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes else @@ -95,7 +95,12 @@ else override CONFIG_FT2232_SPI = no endif +ifeq ($(CONFIG_USBBLASTER_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_USBBLASTER_SPI=yes +else +override CONFIG_USBBLASTER_SPI = no endif +endif # FIXME: Should we check for Cygwin/MSVC as well? ifeq ($(TARGET_OS), MinGW) @@ -196,7 +201,7 @@ else override CONFIG_SERPROG = no endif -# Dediprog and FT2232 are not supported with libpayload (missing libusb support) +# Dediprog, FT2232 and USB Blaster are not supported with libpayload (missing libusb support) ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes else @@ -207,7 +212,12 @@ else override CONFIG_FT2232_SPI = no endif +ifeq ($(CONFIG_USBBLASTER_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_USBBLASTER_SPI=yes +else +override CONFIG_USBBLASTER_SPI = no endif +endif ifneq ($(TARGET_OS), Linux) ifeq ($(CONFIG_LINUX_SPI), yes) @@ -344,6 +354,9 @@ # Enable Linux spidev interface by default. We disable it on non-Linux targets. CONFIG_LINUX_SPI ?= yes +# Always enable USB Blaster SPI for now. +CONFIG_USBBLASTER_SPI ?= yes + # Disable wiki printing by default. It is only useful if you have wiki access. CONFIG_PRINT_WIKI ?= no @@ -430,14 +443,31 @@ NEED_PCI := yes endif +# This is a totally ugly hack. +WANT_LIBFTDI := no +HAVE_LIBFTDI := $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && echo "yes") ifeq ($(CONFIG_FT2232_SPI), yes) -FTDILIBS := $(shell pkg-config --libs libftdi 2>/dev/null || printf "%s" "-lftdi -lusb") -# This is a totally ugly hack. -FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'") -FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)") -PROGRAMMER_OBJS += ft2232_spi.o + WANT_LIBFTDI := yes + ifeq ($(HAVE_LIBFTDI), yes) + FEATURE_CFLAGS += -DCONFIG_FT2232_SPI=1 + PROGRAMMER_OBJS += ft2232_spi.o + endif endif +ifeq ($(CONFIG_USBBLASTER_SPI), yes) + WANT_LIBFTDI := yes + ifeq ($(HAVE_LIBFTDI), yes) + FEATURE_CFLAGS += -DCONFIG_USBBLASTER_SPI=1 + PROGRAMMER_OBJS += usbblaster_spi.o + endif +endif +ifeq ($(WANT_LIBFTDI), yes) + ifeq ($(WANT_LIBFTDI), yes) + FTDILIBS := $(shell pkg-config --libs libftdi 2>/dev/null || printf "%s" "-lftdi -lusb") + FEATURE_LIBS += $(FTDILIBS) + endif +endif + ifeq ($(CONFIG_DUMMY), yes) FEATURE_CFLAGS += -D'CONFIG_DUMMY=1' PROGRAMMER_OBJS += dummyflasher.o @@ -700,7 +730,7 @@ features: compiler @echo "FEATURES := yes" > .features.tmp -ifeq ($(CONFIG_FT2232_SPI), yes) +ifeq ($(WANT_LIBFTDI), yes) @printf "Checking for FTDI support... " @echo "$$FTDI_TEST" > .featuretest.c @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 && \ Index: README =================================================================== --- README (revision 1548) +++ README (working copy) @@ -45,8 +45,8 @@ To build flashrom you need to install the following software: * pciutils+libpci (if you want support for mainboard or PCI device flashing) - * libusb (if you want FT2232 or Dediprog support) - * libftdi (if you want FT2232 support) + * libusb (if you want FT2232, Dediprog or USB Blaster support) + * libftdi (if you want FT2232 or USB Blaster support) Linux et al: Index: usbblaster_spi.c =================================================================== --- usbblaster_spi.c (revision 0) +++ usbblaster_spi.c (working copy) @@ -0,0 +1,258 @@ +/* + * This file is part of the flashrom project. + * + * Copyright (C) 2012 James Laird + * + * 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; version 2 of the License. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Device should be connected as per "active serial" mode: + * + * +---------+------+-----------+ + * | SPI | Pin | Altera | + * +---------+------+-----------+ + * | SCLK | 1 | DCLK | + * | GND | 2,10 | GND | + * | VCC | 4 | VCC(TRGT) | + * | MISO | 7 | ASDO | + * | /CS | 8 | nCS | + * | MOSI | 9 | ASDI | + * +---------+------+-----------+ + */ + +#if CONFIG_USBBLASTER_SPI == 1 + +#include +#include +#include +#include +#include "flash.h" +#include "programmer.h" +#include "spi.h" +#include + +/* Please keep sorted by vendor ID, then device ID. */ + +#define ALTERA_VID 0x09fb +#define ALTERA_USBBLASTER_PID 0x6001 + +const struct usbdev_status devs_usbblasterspi[] = { + {ALTERA_VID, ALTERA_USBBLASTER_PID, NT, "Altera", "USB Blaster"}, + {}, +}; + +static const struct spi_programmer spi_programmer_usbblaster; + +static struct ftdi_context ftdic; + +// command bytes +#define BIT_BYTE (1<<7) // byte mode (rather than bitbang) +#define BIT_READ (1<<6) // read request + +#define BIT_LED (1<<5) +#define BIT_CS (1<<3) +#define BIT_CLK (1<<0) +#define BIT_TMS (1<<1) + +#define BITS_OTHER 0 + +// The programmer shifts bits in the wrong order for SPI. +static unsigned char reverse[] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff +}; + + +/* Returns 0 upon success, a negative number upon errors. */ +int usbblaster_spi_init(void) +{ + if (ftdi_init(&ftdic) < 0) + return -1; + + if (ftdi_usb_open(&ftdic, ALTERA_VID, ALTERA_USBBLASTER_PID) < 0) { + msg_perr("Failed to open USB Blaster: %s\n", ftdic.error_str); + return -1; + } + + if (ftdi_usb_reset(&ftdic) < 0) { + msg_perr("Blaster reset failed\n"); + return -1; + } + + if (ftdi_set_latency_timer(&ftdic, 2) < 0) { + msg_perr("Blaster set latency timer failed\n"); + return -1; + } + + if (ftdi_write_data_set_chunksize(&ftdic, 4096) < 0 || + ftdi_read_data_set_chunksize(&ftdic, 64) < 0) { + msg_perr("Blaster set chunk size failed\n"); + return -1; + } + unsigned char buf[65]; + memset(buf, 0, sizeof(buf)); + buf[sizeof(buf)-1] = BIT_LED | BITS_OTHER | BIT_CS; + if (ftdi_write_data(&ftdic, buf, sizeof(buf)) < 0) { + msg_perr("Blaster reset write failed\n"); + return -1; + } + if (ftdi_read_data(&ftdic, buf, sizeof(buf)) < 0) { + msg_perr("Blaster reset read failed\n"); + return -1; + } + + register_spi_programmer(&spi_programmer_usbblaster); + return 0; +} + +/* Returns 0 upon success, a negative number upon errors. */ +static int usbblaster_spi_send_command(struct flashctx *flash, + unsigned int writecnt, unsigned int readcnt, + const unsigned char *writearr, + unsigned char *readarr) +{ + unsigned char cmd; + unsigned char buf[64]; + unsigned char tms_state = 0; + int i; + // assert /CS + cmd = BIT_LED | BITS_OTHER; + if (ftdi_write_data(&ftdic, &cmd, 1) < 0) { + msg_perr("Blaster write failed\n"); + return -1; + } + + + while (writecnt) { + unsigned int n_write = writecnt; + if (n_write > 63) + n_write = 63; + + msg_pspew("writing %d-byte packet\n", n_write); + + cmd = BIT_BYTE | (unsigned char)n_write; + buf[0] = cmd; + for (i=0; i 63) + n_read = 63; + + cmd = BIT_BYTE | BIT_READ | (unsigned char)n_read; + buf[0] = cmd; + if (ftdi_write_data(&ftdic, buf, n_read + 1) < 0) { + msg_perr("Blaster write failed\n"); + return -1; + } + + cmd = BIT_LED | BITS_OTHER | (tms_state ^= BIT_TMS); + if (ftdi_write_data(&ftdic, &cmd, 1) < 0) { + msg_perr("Blaster write failed\n"); + return -1; + } + + readcnt -= n_read; + msg_pspew("reading %d-byte packet\n", n_read); + }; + + unsigned int n_read = n_readout; + while (n_read) { + int ret = ftdi_read_data(&ftdic, readarr, n_read); + if (ret < 0) { + msg_perr("Blaster read failed\n"); + return -1; + } + for (i=0; i References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> Message-ID: <50051179.9040202@gmx.net> Am 14.07.2012 22:04 schrieb Michael Karcher: > Am Samstag, den 30.06.2012, 01:40 +0200 schrieb Carl-Daniel Hailfinger: >> This patch is essentially a small code move, better device counting and >> lots of indentation changes (look at diff -uw to see real code changes). > So basically you are moving the device test level check from > pcidev_validate to pcidev_init. The result is that pcidev_validate does > no longer in fact validate whether a candidate device is the correct > device, as the name implies. A name like "pcidev_readbar" would make > more sense, IMHO. > > Now, check where pcidev_validate is called from. It is called from > pcidev_init to do its original job, namely validating a device, and it > is called from nicintel code to get a second BAR, because the first BAR > returned by pcidev_init is not really enough. That invocation of > pcidev_validate already carries a nice comment reading "/* FIXME: Using > pcidev_dev _will_ cause pretty explosions in the future. */". This > indicates that something is wrong with this code. And in my oppinion, > indeed, it is. The problem is that the current code contains an > abstraction violation. Neither pcidev_validate (in the pre-patch form) > is really meant to be called from higher level code, but it is meant to > be called by pcidev_init only (doing it's job, validating a PCI device, > poorly), nor is using a global variable pcidev_dev a good idea for > communication between pcidev.c and the clients of that code. > > Furthermore, pcidev_init (conveniently, I admit) does two things at > once: It finds a PCI device, and it reads one BAR. What about having > pcidev_init return the struct pci_dev* instead, so it is up to the > client driver to handle that the value instead of putting it in a global > variable? Of course, this implies all clients have to use something like > pcidev_readbar (the post-patch pcidev_validate) function, even if just a > single address is needed. Considering our current codebase, which uses > pci_read_long to get base addresses in satamv and satasii, I think > giving pcidev_readbar some extra exposure would even be a good > educational thing. > > And as I go along ranting about the current state of that code, I think > it is nice that pcidev_validate does so many sanity checks, but there is > one thing I do *not* like about it, you could call it a "missing vital > sanity check". pcidev_validate checks whether the given BAR is I/O > mapped or memory mapped, and handles each of those types correctly. > Great! Finally, it returns the obtained base address, which might either > be in I/O or memory space to the caller, *not* indicating whether it > just returned an I/O or a memory address. This is quite "convenient", as > the callers (should) know what type they expect, and they are not > prepared to handle mismatches[1], but it would be even more convenient > if this quite important verification of the address space would be > performed. So pcidev_readbar (the new pcidev_validate) needs an extra > parameter, which should indicate I/O or memory space (or, alternatively, > provide pcidev_readbar_io and pcidev_readbar_mem, as there are some > strict coding styles claiming the flag parameters are evil, because if > there are two different ways a function can be executed (selected by > that flag parameter), it really means there are two functions which > should have their own name) and have it fail if the BAR type does not > match the callers expectation. > > Considering all the stuff I was writing, I think your current patch > might be the first of a series leading towards a better pcidev > interface, if you apply the name fix for pcidev_validate. > > I guess the second step would be removing the global pcidev_dev > variable, which implies all callers of pcidev_init need to be adjusted. > Maybe for modules that really only need one BAR, we can still provide > the old behaviour as "pcidev_init_getbar" or "pcidev_init_simple". > > In a third step, add I/O vs. memory validation to pcidev_readbar (ex > pcidev_validate), and remove all pci_read_long(...) &~7; invocations to > read BARs. Second patch in the series. Error checking has not changed at all, and I intend to fix that in a second spin of this patch. Right now I just want to check if we're on the same page. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-pcidev_init_do_not_return_bar/ogp_spi.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/ogp_spi.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/ogp_spi.c (Arbeitskopie) @@ -105,6 +105,7 @@ int ogp_spi_init(void) { + struct pci_dev *dev = NULL; char *type; type = extract_programmer_param("rom"); @@ -130,7 +131,8 @@ get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); + dev = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); ogp_spibar = physmap("OGP registers", io_base_addr, 4096); Index: flashrom-pcidev_init_do_not_return_bar/drkaiser.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/drkaiser.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/drkaiser.c (Arbeitskopie) @@ -65,15 +65,16 @@ int drkaiser_init(void) { + struct pci_dev *dev = NULL; uint32_t addr; get_io_perms(); - addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); + dev = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_2); /* Write magic register to enable flash write. */ - rpci_write_word(pcidev_dev, PCI_MAGIC_DRKAISER_ADDR, - PCI_MAGIC_DRKAISER_VALUE); + rpci_write_word(dev, PCI_MAGIC_DRKAISER_ADDR, PCI_MAGIC_DRKAISER_VALUE); /* Map 128kB flash memory window. */ drkaiser_bar = physmap("Dr. Kaiser PC-Waechter flash memory", Index: flashrom-pcidev_init_do_not_return_bar/pcidev.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/pcidev.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/pcidev.c (Arbeitskopie) @@ -26,7 +26,6 @@ uint32_t io_base_addr; struct pci_access *pacc; -struct pci_dev *pcidev_dev = NULL; enum pci_bartype { TYPE_MEMBAR, @@ -153,15 +152,16 @@ return (uintptr_t)addr; } -uintptr_t pcidev_init(int bar, const struct pcidev_status *devs) +struct pci_dev *pcidev_init(int bar, const struct pcidev_status *devs) { struct pci_dev *dev; + struct pci_dev *found_dev = NULL; struct pci_filter filter; char *pcidev_bdf; char *msg = NULL; int found = 0; int i; - uintptr_t addr = 0, curaddr = 0; + uintptr_t addr = 0; pacc = pci_alloc(); /* Get the pci_access structure */ pci_init(pacc); /* Initialize the PCI library */ @@ -203,8 +203,7 @@ * just those with a valid BAR. */ if ((addr = pcidev_readbar(dev, bar)) != 0) { - curaddr = addr; - pcidev_dev = dev; + found_dev = dev; found++; } } @@ -220,7 +219,7 @@ exit(1); } - return curaddr; + return found_dev; } void print_supported_pcidevs(const struct pcidev_status *devs) Index: flashrom-pcidev_init_do_not_return_bar/gfxnvidia.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/gfxnvidia.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/gfxnvidia.c (Arbeitskopie) @@ -89,11 +89,13 @@ int gfxnvidia_init(void) { + struct pci_dev *dev = NULL; uint32_t reg32; get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); + dev = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); io_base_addr += 0x300000; msg_pinfo("Detected NVIDIA I/O base address: 0x%x.\n", io_base_addr); @@ -105,9 +107,9 @@ return 1; /* Allow access to flash interface (will disable screen). */ - reg32 = pci_read_long(pcidev_dev, 0x50); + reg32 = pci_read_long(dev, 0x50); reg32 &= ~(1 << 0); - rpci_write_long(pcidev_dev, 0x50, reg32); + rpci_write_long(dev, 0x50, reg32); /* Write/erase doesn't work. */ programmer_may_write = 0; Index: flashrom-pcidev_init_do_not_return_bar/nicrealtek.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/nicrealtek.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/nicrealtek.c (Arbeitskopie) @@ -61,9 +61,12 @@ int nicrealtek_init(void) { + struct pci_dev *dev = NULL; + get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); + dev = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); if (register_shutdown(nicrealtek_shutdown, NULL)) return 1; Index: flashrom-pcidev_init_do_not_return_bar/satamv.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/satamv.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/satamv.c (Arbeitskopie) @@ -82,6 +82,7 @@ */ int satamv_init(void) { + struct pci_dev *dev = NULL; uintptr_t addr; uint32_t tmp; @@ -91,7 +92,8 @@ /* No need to check for errors, pcidev_init() will not return in case * of errors. */ - addr = pcidev_init(PCI_BASE_ADDRESS_0, satas_mv); + dev = pcidev_init(PCI_BASE_ADDRESS_0, satas_mv); + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); mv_bar = physmap("Marvell 88SX7042 registers", addr, 0x20000); if (mv_bar == ERROR_PTR) @@ -143,8 +145,7 @@ pci_rmmio_writel(tmp, mv_bar + GPIO_PORT_CONTROL); /* Get I/O BAR location. */ - tmp = pci_read_long(pcidev_dev, PCI_BASE_ADDRESS_2) & - PCI_BASE_ADDRESS_IO_MASK; + tmp = pcidev_readbar(dev, PCI_BASE_ADDRESS_2); /* Truncate to reachable range. * FIXME: Check if the I/O BAR is actually reachable. * This is an arch specific check. Index: flashrom-pcidev_init_do_not_return_bar/nicintel_spi.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/nicintel_spi.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/nicintel_spi.c (Arbeitskopie) @@ -165,11 +165,13 @@ int nicintel_spi_init(void) { + struct pci_dev *dev = NULL; uint32_t tmp; get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); + dev = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); nicintel_spibar = physmap("Intel Gigabit NIC w/ SPI flash", io_base_addr, 4096); Index: flashrom-pcidev_init_do_not_return_bar/nicnatsemi.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/nicnatsemi.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/nicnatsemi.c (Arbeitskopie) @@ -59,9 +59,12 @@ int nicnatsemi_init(void) { + struct pci_dev *dev = NULL; + get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); + dev = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); if (register_shutdown(nicnatsemi_shutdown, NULL)) return 1; Index: flashrom-pcidev_init_do_not_return_bar/atahpt.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/atahpt.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/atahpt.c (Arbeitskopie) @@ -65,16 +65,18 @@ int atahpt_init(void) { + struct pci_dev *dev = NULL; uint32_t reg32; get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); + dev = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_4); /* Enable flash access. */ - reg32 = pci_read_long(pcidev_dev, REG_FLASH_ACCESS); + reg32 = pci_read_long(dev, REG_FLASH_ACCESS); reg32 |= (1 << 24); - rpci_write_long(pcidev_dev, REG_FLASH_ACCESS, reg32); + rpci_write_long(dev, REG_FLASH_ACCESS, reg32); if (register_shutdown(atahpt_shutdown, NULL)) return 1; Index: flashrom-pcidev_init_do_not_return_bar/nic3com.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/nic3com.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/nic3com.c (Arbeitskopie) @@ -87,11 +87,14 @@ int nic3com_init(void) { + struct pci_dev *dev = NULL; + get_io_perms(); - io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); + dev = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); + io_base_addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); - id = pcidev_dev->device_id; + id = dev->device_id; /* 3COM 3C90xB cards need a special fixup. */ if (id == 0x9055 || id == 0x9001 || id == 0x9004 || id == 0x9005 Index: flashrom-pcidev_init_do_not_return_bar/satasii.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/satasii.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/satasii.c (Arbeitskopie) @@ -67,20 +67,21 @@ int satasii_init(void) { + struct pci_dev *dev = NULL; uint32_t addr; uint16_t reg_offset; get_io_perms(); - pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); + dev = pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); - id = pcidev_dev->device_id; + id = dev->device_id; if ((id == 0x3132) || (id == 0x3124)) { - addr = pci_read_long(pcidev_dev, PCI_BASE_ADDRESS_0) & ~0x07; + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); reg_offset = 0x70; } else { - addr = pci_read_long(pcidev_dev, PCI_BASE_ADDRESS_5) & ~0x07; + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_5); reg_offset = 0x50; } Index: flashrom-pcidev_init_do_not_return_bar/nicintel.c =================================================================== --- flashrom-pcidev_init_do_not_return_bar/nicintel.c (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/nicintel.c (Arbeitskopie) @@ -69,6 +69,7 @@ int nicintel_init(void) { + struct pci_dev *dev = NULL; uintptr_t addr; /* Needed only for PCI accesses on some platforms. @@ -80,14 +81,14 @@ * of errors. * FIXME: BAR2 is not available if the device uses the CardBus function. */ - addr = pcidev_init(PCI_BASE_ADDRESS_2, nics_intel); + dev = pcidev_init(PCI_BASE_ADDRESS_2, nics_intel); + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_2); nicintel_bar = physmap("Intel NIC flash", addr, NICINTEL_MEMMAP_SIZE); if (nicintel_bar == ERROR_PTR) goto error_out_unmap; - /* FIXME: Using pcidev_dev _will_ cause pretty explosions in the future. */ - addr = pcidev_readbar(pcidev_dev, PCI_BASE_ADDRESS_0); + addr = pcidev_readbar(dev, PCI_BASE_ADDRESS_0); /* FIXME: This is not an aligned mapping. Use 4k? */ nicintel_control_bar = physmap("Intel NIC control/status reg", addr, NICINTEL_CONTROL_MEMMAP_SIZE); Index: flashrom-pcidev_init_do_not_return_bar/programmer.h =================================================================== --- flashrom-pcidev_init_do_not_return_bar/programmer.h (Revision 1548) +++ flashrom-pcidev_init_do_not_return_bar/programmer.h (Arbeitskopie) @@ -219,7 +219,6 @@ // FIXME: These need to be local, not global extern uint32_t io_base_addr; extern struct pci_access *pacc; -extern struct pci_dev *pcidev_dev; struct pcidev_status { uint16_t vendor_id; uint16_t device_id; @@ -228,7 +227,7 @@ const char *device_name; }; uintptr_t pcidev_readbar(struct pci_dev *dev, int bar); -uintptr_t pcidev_init(int bar, const struct pcidev_status *devs); +struct pci_dev *pcidev_init(int bar, const struct pcidev_status *devs); /* rpci_write_* are reversible writes. The original PCI config space register * contents will be restored on shutdown. */ -- http://www.hailfinger.org/ From gschardt at ddn.com Tue Jul 17 20:35:00 2012 From: gschardt at ddn.com (Greg Schardt) Date: Tue, 17 Jul 2012 11:35:00 -0700 Subject: [flashrom] Intel C602 support In-Reply-To: <201207060358.q663wMw4006362@mail2.student.tuwien.ac.at> References: <201206121618.q5CGI8t2013438@mail2.student.tuwien.ac.at> <201207060358.q663wMw4006362@mail2.student.tuwien.ac.at> Message-ID: Stefan, Flashrom is not detecting the device for some reason. I am attaching the output of 'flashrom -V' and 'lspci -s 0:1f.0 -vv'. Please help. Thank you, Greg -----Original Message----- From: Stefan Tauner [mailto:stefan.tauner at student.tuwien.ac.at] Sent: Thursday, July 05, 2012 11:58 PM To: Greg Schardt Cc: flashrom at flashrom.org Subject: Re: [flashrom] Intel C602 support On Thu, 28 Jun 2012 07:03:34 -0700 Greg Schardt wrote: > I apologize for the delay. likewise ;) > Here is the output: > > 00:1f.0 ISA bridge [0601]: Intel Corporation Patsburg LPC Controller > [8086:1d41] (rev 06) > > Let me know if you need more information or would like me to test it. that one actually is already supported since september 2011, so the latest stable version should detect it and work correctly (as long as there are no locked regions). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner -------------- next part -------------- A non-text attachment was scrubbed... Name: lspci_1f.out Type: application/octet-stream Size: 400 bytes Desc: lspci_1f.out URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: flashrom.out Type: application/octet-stream Size: 28604 bytes Desc: flashrom.out URL: From stefan.tauner at student.tuwien.ac.at Tue Jul 17 20:47:28 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 17 Jul 2012 20:47:28 +0200 Subject: [flashrom] Intel C602 support In-Reply-To: References: <201206121618.q5CGI8t2013438@mail2.student.tuwien.ac.at> <201207060358.q663wMw4006362@mail2.student.tuwien.ac.at> Message-ID: <201207171847.q6HIlS8S008552@mail2.student.tuwien.ac.at> On Tue, 17 Jul 2012 11:35:00 -0700 Greg Schardt wrote: > Flashrom is not detecting the device for some reason. I am attaching the output of 'flashrom -V' and 'lspci -s 0:1f.0 -vv'. Please help. > ? > flashrom v0.9.2-r1141 on Linux 2.6.39-alta-22 (x86_64), built with libpci 3.1.7, GCC 4.4.5 20100728 (prerelease), little endian > flashrom is free software, get the source code at http://www.flashrom.org 0.9.2 is ancient, please update. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From brad at fineby.me.uk Tue Jul 17 21:57:38 2012 From: brad at fineby.me.uk (Brad Rogers) Date: Tue, 17 Jul 2012 20:57:38 +0100 Subject: [flashrom] ASUS M3N78 PRO In-Reply-To: <20120717203754.0df10246@abydos.stargate.org.uk> References: <20120717203754.0df10246@abydos.stargate.org.uk> Message-ID: <20120717205738.19292549@abydos.stargate.org.uk> >Just flashed mobo, ASUS M3N78 PRO. No problems encountered, using >v0.9.5.2-r1548 of flashrom. I'm an idiot; I forgot to attach the output from flashrom. This is the post upgrade output. -- Regards _ / ) "The blindingly obvious is / _)rad never immediately apparent" I'd hate to look into those eyes and see an ounce of pain Sweet Child O'Mine - Guns 'N' Roses -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: op.txt URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 490 bytes Desc: not available URL: From brad at fineby.me.uk Tue Jul 17 21:37:54 2012 From: brad at fineby.me.uk (Brad Rogers) Date: Tue, 17 Jul 2012 20:37:54 +0100 Subject: [flashrom] ASUS M3N78 PRO Message-ID: <20120717203754.0df10246@abydos.stargate.org.uk> Hello All, Just flashed mobo, ASUS M3N78 PRO. No problems encountered, using v0.9.5.2-r1548 of flashrom. -- Regards _ / ) "The blindingly obvious is / _)rad never immediately apparent" It's got nothing to do with the need to impress Titanic (My Over) Reaction - 999 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 490 bytes Desc: not available URL: From stefan.tauner at student.tuwien.ac.at Wed Jul 18 00:09:44 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 00:09:44 +0200 Subject: [flashrom] ASUS M3N78 PRO In-Reply-To: <20120717205738.19292549@abydos.stargate.org.uk> References: <20120717203754.0df10246@abydos.stargate.org.uk> <20120717205738.19292549@abydos.stargate.org.uk> Message-ID: <201207172209.q6HM9ilw014824@mail2.student.tuwien.ac.at> On Tue, 17 Jul 2012 20:57:38 +0100 Brad Rogers wrote: > > >Just flashed mobo, ASUS M3N78 PRO. No problems encountered, using > >v0.9.5.2-r1548 of flashrom. Hello Brad, thanks for your report! I have added your board to our list of supported hardware and will commit that later together with other small changes. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 18 00:13:54 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 00:13:54 +0200 Subject: [flashrom] AT25DF321A with ASRock 880G Pro3 MB In-Reply-To: <1342499200.2098.2.camel@Lenovo> References: <1342203122.3126.16.camel@Lenovo> <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> <1342499200.2098.2.camel@Lenovo> Message-ID: <201207172213.q6HMDsB1016711@mail2.student.tuwien.ac.at> On Tue, 17 Jul 2012 08:26:40 +0400 Roman Elshin wrote: > > > Do you happen to know if the original chip works as well in that board? > > This board was shipped with Winbond W25Q32 flash chip. ok that should work without a problem... ill add the board as well, thanks! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 18 00:28:08 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 00:28:08 +0200 Subject: [flashrom] Supermicro X9DR3-F output In-Reply-To: References: Message-ID: <201207172228.q6HMS8RR022921@mail2.student.tuwien.ac.at> On Thu, 21 Jun 2012 17:38:16 -0400 Rich wrote: > 0x58: 0x0fff0800 FREG1: BIOS region (0x00800000-0x00ffffff) is read-write. > 0x5C: 0x07ff0020 FREG2: WARNING: Management Engine region (0x00020000-0x007fffff) is locked. Hello Rich, thanks for your report! The problem is the locked ME region as quoted above. We are working on unlocking it, but intel does not provide us any documentation so please do not expect a solution soon. I have added the board to our list of (un)supported boards (with an appropriate note) and will commit that later together with other small changes. Note to other developers: Also notable is the flash chip (nymonix N25Q128) that is currently not supported natively (patch pending: http://patchwork.coreboot.org/patch/3652/), but our SFDP implementation seems to would have handled it correctly afaics. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 18 00:34:36 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 00:34:36 +0200 Subject: [flashrom] Log for Gigabyte GA-H61M-D2-B3 In-Reply-To: <1340651121.5724.1.camel@localhost> References: <1340651121.5724.1.camel@localhost> Message-ID: <201207172234.q6HMYaPD025418@mail2.student.tuwien.ac.at> On Mon, 25 Jun 2012 23:05:21 +0400 user wrote: > Log for Gigabyte GA-H61M-D2-B3 motherboard on a Intel H61 chipset for > read and write operations. Thanks for your report! This has been reported already so there is nothing more to do for me. (please do not zip log files when you send them to the flashrom mailing list in the future, it is just not worth it in our opinion) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 18 01:08:45 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 01:08:45 +0200 Subject: [flashrom] output of flashrom -Vr In-Reply-To: <4FC9219E.2040400@lutter.sk> References: <4FC9219E.2040400@lutter.sk> Message-ID: <201207172308.q6HN8jTc005679@mail2.student.tuwien.ac.at> On Fri, 01 Jun 2012 22:10:06 +0200 Juraj Lutter wrote: Hello Juraj and thanks for your report! > otis at zed ~/code/flashrom-1.0 $ sudo ./flashrom -Vr xx > flashrom v0.9.5.2-r1538 on Linux 3.2.0-2-amd64 (x86_64), built with > libpci 3.1.8, GCC 4.6.3, little endian > flashrom is free software, get the source code at http://www.flashrom.org > > Command line (2 args): ./flashrom -Vr xx > Calibrating delay loop... OS timer resolution is 1 usecs, 1415M loops > per second, 10 myus = 10 us, 100 myus = 117 us, 1000 myus = 973 us, > 10000 myus = 9945 us, 4 myus = 8 us, OK. > Initializing internal programmer > No coreboot table found. > DMI string system-manufacturer: "Hewlett-Packard" > DMI string system-product-name: "HP Z400 Workstation" > DMI string system-version: " " > DMI string baseboard-manufacturer: "Hewlett-Packard" > DMI string baseboard-product-name: "0AE4h" > [?] > BIOS Lock Enable: enabled, BIOS Write Enable: disabled, BIOS_CNTL is 0x2 > WARNING: Setting 0xdc from 0x2 to 0x3 on ICH10R failed. New value is 0x2. This makes it impossible to write the flash chip without interacting with the BIOS (which requires documentation or reverse engineering). > [?] > 0x74: 0x81ff01f0 PR0: WARNING: 0x001f0000-0x001fffff is read-only. even then this part of the flash can never be written from within the system (it probably contains the bootblock and does not need to be updated anyway). > [?] > Found Atmel flash chip "AT26DF161" (2048 kB, SPI). > === > This flash part has status UNTESTED for operations: PROBE READ ERASE WRITE But at least i can mark the flash chip as working for probing and reading, thanks! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From Jason_Vannest at abercrombie.com Wed Jul 18 01:11:01 2012 From: Jason_Vannest at abercrombie.com (Jason_Vannest at abercrombie.com) Date: Tue, 17 Jul 2012 19:11:01 -0400 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> References: <4FFC73DC.9010007@gmail.com> <4FFCBB70.3050300@gmx.net> <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> Message-ID: Sorry to say IBMs initial responses to my queries we're not positive. Even if I can get them to provide information, they may invoke our MNDA so I might not be able to share it. I pushed back a little to see if it was just a knee jerk reaction or if they really feel like some of this info is truly confidential. They of course provided the generic response of "I will also warn that flashing firmware not provided as a complete upgrade package from IBM will likely make your motherboard inoperable and unrecoverable. ". Which might be believable for someone that doesn't know anything about computers or electrical engineering. I've spent the better part of 2 decades working with computers and electronics and I know it's not true. Don't get me wrong, if you do it "incorrectly" you can certainly break it, but if done correctly there is no reason to think that it would magically become inoperable. I did take a closer look at some of their BIOS update tools and it looks like they do have some other firmware imbedded in with the BIOS updates, looks like some kind of riser card update, and something with the service processor. Their documentation isn't real clear what some of the bits and pieces are actually updating. But it is clear that they have multiple firmware devices being updated using a couple of different tools. An spFwUpdt.com program to update the service processor, then they use awdflash.exe to apply two different bits of firmware one 1,024KB and the other 64KB. I also notice the comment about the backup bios, from past experience with IBM I've seen quite a few of their systems come with backup bios capability. It's handy if something goes wrong when flashing the firmware, if something goes wrong the system will automatically load off the backup version. I thought I saw something a few years back that suggested they alternate which flash chip they update so that the version that is currently booting isn't overwritten when you flash a new version, just the one in the current backup. Could be mistaken on that just something I remember, triggered by Stefan's comments.... FYI - Thanks for answering some questions and discussing the possibilities with me. Jason Vannest From: Stefan Tauner To: Jason_Vannest at abercrombie.com, Cc: flashrom at flashrom.org, Carl-Daniel Hailfinger Date: 07/16/2012 07:57 AM Subject: Re: [flashrom] IBM SurePOS 700 4800-783 support On Wed, 11 Jul 2012 18:17:19 -0400 Jason_Vannest at abercrombie.com wrote: > If I'm reading the flashrom site correctly this is one of the flash chips > that flashrom has support for already. So that might be a plus. Yes, the flash chip itself wont be a problem. There is a service manual for the POS located at ftp://ftp.software.ibm.com/software/retail/pubs/hw/4800_surepos700/btd5_4800-723-743-783_hsg_mst.pdf and it mentions a "backup bios" in the service processor section. That could complicate things further (or help you out if something fails if you are very lucky, but usually it make things worse for us). The remainder of the document is not very helpful (targeted at users not developers). > > I'd venture a guess that we can do this before IBM can > > even give you a quote. > > What kind of information would you want? I have pretty solid connections > with IBM I may be able to get questions answered about this. A schematic that contains the data path between the southbridge and the flash chip as well as its relation to the Renesas IC would indicate if we have to take care about the Renesas at all. Any additional information regarding the BIOS upgrade process (e.g. if the version of the Renesas' firmware has to be kept in sync with the BIOS) or the service processor's interaction with the flash chip would be very welcome too. Above all we need to work on the support for the VIA chipset (VT8251), but IBM won't be able to help us with that. I have no news regarding that. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner -------------- next part -------------- An HTML attachment was scrubbed... URL: From c-d.hailfinger.devel.2006 at gmx.net Wed Jul 18 01:48:48 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Wed, 18 Jul 2012 01:48:48 +0200 Subject: [flashrom] [PATCH] Automatically release I/O permissions on shutdown Message-ID: <5005F9E0.50207@gmx.net> get_io_perms() is renamed to rget_io_perms() and automatically registers a function to release I/O permissions on shutdown. Actually release I/O permissions on Solaris and iopl()-supporting operating systems like Linux. This patch fixes quite a few programmers which forgot to release I/O permissions on shutdown, and it simplifies the shutdown and error handling code for all others. Note: The next steps will be to do the same with PCI init and /dev/mem accesses. That should make probably 3/4 of all explicit shutdown functions empty and obsolete. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-auto_release_io_perms/hwaccess.c =================================================================== --- flashrom-auto_release_io_perms/hwaccess.c (Revision 1547) +++ flashrom-auto_release_io_perms/hwaccess.c (Arbeitskopie) @@ -44,9 +44,25 @@ int io_fd; #endif -void get_io_perms(void) +int release_io_perms(void *p) { #if defined(__DJGPP__) || defined(__LIBPAYLOAD__) +#else +#if defined (__sun) && (defined(__i386) || defined(__amd64)) + sysi86(SI86V86, V86SC_IOPL, 0); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined (__DragonFly__) + close(io_fd); +#else + iopl(0); +#endif +#endif + return 0; +} + +/* Get I/O permissions with automatic permission release on shutdown. */ +void rget_io_perms(void) +{ +#if defined(__DJGPP__) || defined(__LIBPAYLOAD__) /* We have full permissions by default. */ return; #else @@ -65,17 +81,12 @@ msg_perr("single user mode.\n"); #endif exit(1); + } else { + register_shutdown(release_io_perms, NULL); } #endif } -void release_io_perms(void) -{ -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) - close(io_fd); -#endif -} - #elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) static inline void sync_primitive(void) @@ -88,15 +99,10 @@ } /* PCI port I/O is not yet implemented on PowerPC. */ -void get_io_perms(void) +void rget_io_perms(void) { } -/* PCI port I/O is not yet implemented on PowerPC. */ -void release_io_perms(void) -{ -} - #elif defined (__mips) || defined (__mips__) || defined (_mips) || defined (mips) /* sync primitive is not needed because /dev/mem on MIPS uses uncached accesses @@ -107,29 +113,20 @@ } /* PCI port I/O is not yet implemented on MIPS. */ -void get_io_perms(void) +void rget_io_perms(void) { } -/* PCI port I/O is not yet implemented on MIPS. */ -void release_io_perms(void) -{ -} - #elif defined (__arm__) static inline void sync_primitive(void) { } -void get_io_perms(void) +void rget_io_perms(void) { } -void release_io_perms(void) -{ -} - #else #error Unknown architecture Index: flashrom-auto_release_io_perms/ogp_spi.c =================================================================== --- flashrom-auto_release_io_perms/ogp_spi.c (Revision 1547) +++ flashrom-auto_release_io_perms/ogp_spi.c (Arbeitskopie) @@ -98,7 +98,6 @@ { physunmap(ogp_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -128,7 +127,7 @@ return 1; } - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); Index: flashrom-auto_release_io_perms/drkaiser.c =================================================================== --- flashrom-auto_release_io_perms/drkaiser.c (Revision 1547) +++ flashrom-auto_release_io_perms/drkaiser.c (Arbeitskopie) @@ -59,7 +59,6 @@ physunmap(drkaiser_bar, DRKAISER_MEMMAP_SIZE); /* Flash write is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; }; @@ -67,7 +66,7 @@ { uint32_t addr; - get_io_perms(); + rget_io_perms(); addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); Index: flashrom-auto_release_io_perms/gfxnvidia.c =================================================================== --- flashrom-auto_release_io_perms/gfxnvidia.c (Revision 1547) +++ flashrom-auto_release_io_perms/gfxnvidia.c (Arbeitskopie) @@ -83,7 +83,6 @@ * by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -91,7 +90,7 @@ { uint32_t reg32; - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); Index: flashrom-auto_release_io_perms/nicrealtek.c =================================================================== --- flashrom-auto_release_io_perms/nicrealtek.c (Revision 1547) +++ flashrom-auto_release_io_perms/nicrealtek.c (Arbeitskopie) @@ -55,13 +55,12 @@ { /* FIXME: We forgot to disable software access again. */ pci_cleanup(pacc); - release_io_perms(); return 0; } int nicrealtek_init(void) { - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); Index: flashrom-auto_release_io_perms/satamv.c =================================================================== --- flashrom-auto_release_io_perms/satamv.c (Revision 1547) +++ flashrom-auto_release_io_perms/satamv.c (Arbeitskopie) @@ -60,7 +60,6 @@ { physunmap(mv_bar, 0x20000); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -85,7 +84,7 @@ uintptr_t addr; uint32_t tmp; - get_io_perms(); + rget_io_perms(); /* BAR0 has all internal registers memory mapped. */ /* No need to check for errors, pcidev_init() will not return in case @@ -161,7 +160,6 @@ error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Index: flashrom-auto_release_io_perms/internal.c =================================================================== --- flashrom-auto_release_io_perms/internal.c (Revision 1547) +++ flashrom-auto_release_io_perms/internal.c (Arbeitskopie) @@ -158,7 +158,6 @@ static int internal_shutdown(void *data) { - release_io_perms(); return 0; } @@ -225,7 +224,7 @@ } free(arg); - get_io_perms(); + rget_io_perms(); if (register_shutdown(internal_shutdown, NULL)) return 1; Index: flashrom-auto_release_io_perms/nicintel_spi.c =================================================================== --- flashrom-auto_release_io_perms/nicintel_spi.c (Revision 1547) +++ flashrom-auto_release_io_perms/nicintel_spi.c (Arbeitskopie) @@ -158,7 +158,6 @@ physunmap(nicintel_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -167,7 +166,7 @@ { uint32_t tmp; - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); Index: flashrom-auto_release_io_perms/nicnatsemi.c =================================================================== --- flashrom-auto_release_io_perms/nicnatsemi.c (Revision 1547) +++ flashrom-auto_release_io_perms/nicnatsemi.c (Arbeitskopie) @@ -53,13 +53,12 @@ static int nicnatsemi_shutdown(void *data) { pci_cleanup(pacc); - release_io_perms(); return 0; } int nicnatsemi_init(void) { - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); Index: flashrom-auto_release_io_perms/rayer_spi.c =================================================================== --- flashrom-auto_release_io_perms/rayer_spi.c (Revision 1547) +++ flashrom-auto_release_io_perms/rayer_spi.c (Arbeitskopie) @@ -167,7 +167,7 @@ rayer_miso_bit = 4; } - get_io_perms(); + rget_io_perms(); /* Get the initial value before writing to any line. */ lpt_outbyte = INB(lpt_iobase); Index: flashrom-auto_release_io_perms/atahpt.c =================================================================== --- flashrom-auto_release_io_perms/atahpt.c (Revision 1547) +++ flashrom-auto_release_io_perms/atahpt.c (Arbeitskopie) @@ -59,7 +59,6 @@ { /* Flash access is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -67,7 +66,7 @@ { uint32_t reg32; - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); Index: flashrom-auto_release_io_perms/nic3com.c =================================================================== --- flashrom-auto_release_io_perms/nic3com.c (Revision 1547) +++ flashrom-auto_release_io_perms/nic3com.c (Arbeitskopie) @@ -81,13 +81,12 @@ } pci_cleanup(pacc); - release_io_perms(); return 0; } int nic3com_init(void) { - get_io_perms(); + rget_io_perms(); io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); Index: flashrom-auto_release_io_perms/satasii.c =================================================================== --- flashrom-auto_release_io_perms/satasii.c (Revision 1547) +++ flashrom-auto_release_io_perms/satasii.c (Arbeitskopie) @@ -61,7 +61,6 @@ { physunmap(sii_bar, SATASII_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -70,7 +69,7 @@ uint32_t addr; uint16_t reg_offset; - get_io_perms(); + rget_io_perms(); pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); Index: flashrom-auto_release_io_perms/nicintel.c =================================================================== --- flashrom-auto_release_io_perms/nicintel.c (Revision 1547) +++ flashrom-auto_release_io_perms/nicintel.c (Arbeitskopie) @@ -63,7 +63,6 @@ physunmap(nicintel_control_bar, NICINTEL_CONTROL_MEMMAP_SIZE); physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -72,9 +71,9 @@ uintptr_t addr; /* Needed only for PCI accesses on some platforms. - * FIXME: Refactor that into get_mem_perms/get_io_perms/get_pci_perms? + * FIXME: Refactor that into get_mem_perms/rget_io_perms/get_pci_perms? */ - get_io_perms(); + rget_io_perms(); /* No need to check for errors, pcidev_init() will not return in case * of errors. @@ -117,7 +116,6 @@ physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Index: flashrom-auto_release_io_perms/programmer.h =================================================================== --- flashrom-auto_release_io_perms/programmer.h (Revision 1547) +++ flashrom-auto_release_io_perms/programmer.h (Arbeitskopie) @@ -300,8 +300,7 @@ struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, uint16_t card_vendor, uint16_t card_device); #endif -void get_io_perms(void); -void release_io_perms(void); +void rget_io_perms(void); #if CONFIG_INTERNAL == 1 extern int is_laptop; extern int laptop_ok; -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Wed Jul 18 02:04:51 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 02:04:51 +0200 Subject: [flashrom] MSI Z68MA-G45 report and on-board SPI flashing using Bus Pirate In-Reply-To: <1340400938.9242.2.camel@trisquel> References: <1340016041.6925.21.camel@trisquel> <1340022946.2417.20.camel@gnutoo-hplaptop> <1340208664.3278.15.camel@martine-laptop> <1340277625.6888.8.camel@trisquel> <1340400938.9242.2.camel@trisquel> Message-ID: <201207180004.q6I04pSt031680@mail2.student.tuwien.ac.at> On Fri, 22 Jun 2012 21:35:38 +0000 Paul Kocialkowski wrote: > Here is a log of in-system flashing (it worked "out of the box"), for > the MSI Z68MA-G45 board! I think it can be added to the list of > supported boards. > > I'll test SPI flashing with bus pirate or arduino tomorrow. Hello Paul, thanks for your report! I have added your board to our list of supported hardware and will commit that later together with other small changes. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From wspeirs at apache.org Wed Jul 18 01:39:31 2012 From: wspeirs at apache.org (William Speirs) Date: Tue, 17 Jul 2012 19:39:31 -0400 Subject: [flashrom] FAILED: NVIDIA MCP61 Message-ID: $ flashrom -w M2N_0902.ROM flashrom v0.9.5.2-r1517 on Linux 3.2.0-26-generic (x86_64), built with libpci 3.1.8, GCC 4.6.3, little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK. Found chipset "NVIDIA MCP61". Enabling flash write... This chipset is not really supported yet. Guesswork... Please send the output of "flashrom -V" to flashrom at flashrom.org with your board name: flashrom -V as the subject to help us finish support for your chipset. Thanks. OK. Found Winbond flash chip "W39V040C" (512 kB, LPC) at physical address 0xfff80000. Flash image seems to be a legacy BIOS. Disabling coreboot-related checks. Reading old flash chip contents... done. Erasing and writing flash chip... ERASE FAILED at 0x00000000! Expected=0xff, Read=0x4f, failed byte count from 0x00000000-0x0000ffff: 0x10000 ERASE FAILED! Reading current flash chip contents... done. ERASE FAILED at 0x00010000! Expected=0xff, Read=0xdf, failed byte count from 0x00000000-0x0007ffff: 0x652aa ERASE FAILED! FAILED! Uh oh. Erase/write failed. Checking if anything changed. Your flash chip is in an unknown state. Get help on IRC at irc.freenode.net (channel #flashrom) or mail flashrom at flashrom.org with FAILED: your board name in the subject line! ------------------------------------------------------------------------------- DO NOT REBOOT OR POWEROFF! I tried a flashrom -r and compared it to the backup I made and it's different. It is also different from the ROM I tried to install. Any thoughts? Bill- -------------- next part -------------- An HTML attachment was scrubbed... URL: From wspeirs at apache.org Wed Jul 18 01:18:38 2012 From: wspeirs at apache.org (William Speirs) Date: Tue, 17 Jul 2012 19:18:38 -0400 Subject: [flashrom] flashrom -V Message-ID: flashrom v0.9.5.2-r1517 on Linux 3.2.0-26-generic (x86_64), built with libpci 3.1.8, GCC 4.6.3, little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 702M loops per second, 10 myus = 11 us, 100 myus = 101 us, 1000 myus = 999 us, 10000 myus = 10007 us, 4 myus = 5 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "System manufacturer" DMI string system-product-name: "System Product Name" DMI string system-version: "System Version" DMI string baseboard-manufacturer: "ASUSTeK Computer INC." DMI string baseboard-product-name: "M2N" DMI string baseboard-version: "Rev 1.xx" DMI string chassis-type: "Desktop" Found ITE Super I/O, ID 0x8716 on port 0x2e Found chipset "NVIDIA MCP61" with PCI ID 10de:03e0. Enabling flash write... This chipset is not really supported yet. Guesswork... ISA/LPC bridge reg 0x8a contents: 0x00, bit 6 is 0, bit 5 is 0 Flash bus type is LPC Found SMBus device 10de:03eb at 00:01:1 MCP SPI BAR is at 0x00000000 MCP SPI is not used. Please send the output of "flashrom -V" to flashrom at flashrom.org with your board name: flashrom -V as the subject to help us finish support for your chipset. Thanks. OK. No IT87* serial flash segment enabled. The following protocols are supported: LPC. Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0x37, id2 0xc2, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xda, id2 0x50 Found Winbond flash chip "W39V040C" (512 kB, LPC) at physical address 0xfff80000. Lockout bits: Hardware bootblock locking (#TBL) is not active. Hardware remaining chip locking (#WP) is not active.. Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xda, id2 0x50 Found Winbond flash chip "W39V040C" (512 kB, LPC). No operations were specified. Restoring PCI config space for 00:01:0 reg 0x6d Restoring PCI config space for 00:01:0 reg 0x90 Restoring PCI config space for 00:01:0 reg 0x8c Restoring PCI config space for 00:01:0 reg 0x88 -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Wed Jul 18 02:19:40 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 02:19:40 +0200 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: References: Message-ID: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> On Tue, 17 Jul 2012 19:39:31 -0400 William Speirs wrote: > I tried a flashrom -r and compared it to the backup I made and it's > different. It is also different from the ROM I tried to install. > > Any thoughts? Most importantly: dont reboot or shutdown that computer. (we really mean it... but some users do it anyway, and brick their boards that way) i would try writing the backup image again to get to a safe state again. the reason why it failed in the first place is not obvious to me, but it is 2:00 AM here, so i might be overlooking something. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From wspeirs at apache.org Wed Jul 18 02:22:04 2012 From: wspeirs at apache.org (William Speirs) Date: Tue, 17 Jul 2012 20:22:04 -0400 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> References: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> Message-ID: I will try writing the backup and certainly leave the machine on. Thanks, and get some sleep ;-) Bill- On Jul 17, 2012 8:20 PM, "Stefan Tauner" wrote: > On Tue, 17 Jul 2012 19:39:31 -0400 > William Speirs wrote: > > > I tried a flashrom -r and compared it to the backup I made and it's > > different. It is also different from the ROM I tried to install. > > > > Any thoughts? > > Most importantly: dont reboot or shutdown that computer. (we really > mean it... but some users do it anyway, and brick their boards that > way) > > i would try writing the backup image again to get to a safe state > again. the reason why it failed in the first place is not obvious to > me, but it is 2:00 AM here, so i might be overlooking something. > -- > Kind regards/Mit freundlichen Gr??en, Stefan Tauner > -------------- next part -------------- An HTML attachment was scrubbed... URL: From wspeirs at apache.org Wed Jul 18 23:12:14 2012 From: wspeirs at apache.org (William Speirs) Date: Wed, 18 Jul 2012 17:12:14 -0400 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: References: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> Message-ID: So if restoring the backup ROM worked am I safe to power cycle my machine? Any ideas on what would be wrong with that ROM? Thanks... Bill- On Jul 17, 2012 8:49 PM, "William Speirs" wrote: > I was able to write the backup and run verify and it worked. I still > haven't and won't restart my machine. > > After restoring the backup, I tried again with the new BIOS and got the > same error/issue. I was able to backup yet again without issue. > > So I'm guessing it's more of a problem with the ROM image than the program > writing the ROM. I've attached the ROM to see if that provides any insight. > > Thanks again for the help! > > Bill- > > On Tue, Jul 17, 2012 at 8:22 PM, William Speirs wrote: > >> I will try writing the backup and certainly leave the machine on. >> >> Thanks, and get some sleep ;-) >> >> Bill- >> On Jul 17, 2012 8:20 PM, "Stefan Tauner" < >> stefan.tauner at student.tuwien.ac.at> wrote: >> >>> On Tue, 17 Jul 2012 19:39:31 -0400 >>> William Speirs wrote: >>> >>> > I tried a flashrom -r and compared it to the backup I made and it's >>> > different. It is also different from the ROM I tried to install. >>> > >>> > Any thoughts? >>> >>> Most importantly: dont reboot or shutdown that computer. (we really >>> mean it... but some users do it anyway, and brick their boards that >>> way) >>> >>> i would try writing the backup image again to get to a safe state >>> again. the reason why it failed in the first place is not obvious to >>> me, but it is 2:00 AM here, so i might be overlooking something. >>> -- >>> Kind regards/Mit freundlichen Gr??en, Stefan Tauner >>> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Wed Jul 18 23:38:10 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 18 Jul 2012 23:38:10 +0200 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: References: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> Message-ID: <201207182138.q6ILcANs004813@mail2.student.tuwien.ac.at> On Wed, 18 Jul 2012 17:12:14 -0400 William Speirs wrote: > So if restoring the backup ROM worked am I safe to power cycle my machine? yes > Any ideas on what would be wrong with that ROM? not yet. but it is not related to the image itself pretty sure (there is a theoretical chance that there is a bad bit, that is in the right state in the old image but not in the new image, but that is quite unlikely). more likely is that there is some (partial) copy protection in place... -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From alatteri at gmail.com Thu Jul 12 19:26:57 2012 From: alatteri at gmail.com (Alan Latteri) Date: Thu, 12 Jul 2012 10:26:57 -0700 Subject: [flashrom] FAILED: xw9400 Message-ID: I forgot to jumper the bootblock. I did flashrom -w newbios. It spit up a bunch of fails and warnings. See the attached screenshots. What should I do? Should I power off, jumper and try again? Thanks, Alan [Note from the list moderator: Two JPG attachments have been stripped and transcribed manually. Transcription below. # flashrom -w xw9400_BIOS.rom flashrom v0.9.5.2-r1515 on Linux 3.2.19-std280-i586 (i686), built with libpci 3.1.9, GCC 4.4.7, little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK Found chipset "NVIDIA MCP55". Enabling flash write... OK. Disabling flash write protection for board "HP xw9400"... OK. Found SST flash chip "SST49LF080A" (1024 kB, LPC) at physical address 0xfff00000. Flash image seems to be a legacy BIOS. Disabling coreboot-related checks. Reading old flash chip contents... done. Erasing and writing glash chip... ERASE FAILED at 0x000f0000! Expected=x0ff, Read=0xe9, failed byte count from 0x000f0000-0x000f0fff: 0xf56 ERASE FAILED! Reading current flash chip contents... done. ERASE FAILED at 0x000f0000! Expected=x0ff, Read=0xe9, failed byte count from 0x000f0000-0x000fffff: 0xe2e4 ERASE FAILED! FAILED! Uh oh. Erase/Write failed. Checking if anything changed. Your flash chip is in an unknown state. Get help on IRC at irc.freenode.net (channel #flashrom) or mail flashrom at flashrom.org with FAILED: your board name in the subject line! ------------------------------------------------------------------------------- DO NOT REBOOT OR POWEROFF! From wspeirs at apache.org Wed Jul 18 02:49:25 2012 From: wspeirs at apache.org (William Speirs) Date: Tue, 17 Jul 2012 20:49:25 -0400 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: References: <201207180019.q6I0JegN005603@mail2.student.tuwien.ac.at> Message-ID: I was able to write the backup and run verify and it worked. I still haven't and won't restart my machine. After restoring the backup, I tried again with the new BIOS and got the same error/issue. I was able to backup yet again without issue. So I'm guessing it's more of a problem with the ROM image than the program writing the ROM. I've attached the ROM to see if that provides any insight. Thanks again for the help! Bill- On Tue, Jul 17, 2012 at 8:22 PM, William Speirs wrote: > I will try writing the backup and certainly leave the machine on. > > Thanks, and get some sleep ;-) > > Bill- > On Jul 17, 2012 8:20 PM, "Stefan Tauner" < > stefan.tauner at student.tuwien.ac.at> wrote: > >> On Tue, 17 Jul 2012 19:39:31 -0400 >> William Speirs wrote: >> >> > I tried a flashrom -r and compared it to the backup I made and it's >> > different. It is also different from the ROM I tried to install. >> > >> > Any thoughts? >> >> Most importantly: dont reboot or shutdown that computer. (we really >> mean it... but some users do it anyway, and brick their boards that >> way) >> >> i would try writing the backup image again to get to a safe state >> again. the reason why it failed in the first place is not obvious to >> me, but it is 2:00 AM here, so i might be overlooking something. >> -- >> Kind regards/Mit freundlichen Gr??en, Stefan Tauner >> > A non-text attachment has been stripped: M2N_0902.ROM It is available at http://paste.flashrom.org/view.php?id05 From c-d.hailfinger.devel.2006 at gmx.net Thu Jul 19 03:23:07 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Thu, 19 Jul 2012 03:23:07 +0200 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: References: Message-ID: <5007617B.1090907@gmx.net> Hi Bill, glad to hear you could restore by writing the backup. Analysis follows. Am 18.07.2012 01:39 schrieb William Speirs: > $ flashrom -w M2N_0902.ROM > flashrom v0.9.5.2-r1517 on Linux > Calibrating delay loop... OK. > Found chipset "NVIDIA MCP61". Enabling flash write... OK. > Found Winbond flash chip "W39V040C" (512 kB, LPC) at physical address > 0xfff80000. A notoriously troublesome chip. It behaves in a weird way (IMHO not really JEDEC-compliant) with the JEDEC Toggle Bit algorithm (minimum 50 ms time between reads). You may be hitting that problem although we tried to add workarounds for it. > Reading old flash chip contents... done. > Erasing and writing flash chip... ERASE FAILED at 0x00000000! > Expected=0xff, Read=0x4f, failed byte count from 0x00000000-0x0000ffff: > 0x10000 > ERASE FAILED! This is actually not a failed erase, but a misdetected end-of-erase due to the JEDEC Toggle Bit weirdness. The erase succeeds eventually, roughly half a second after flashrom complains about erase failure. > Reading current flash chip contents... done. ERASE FAILED at 0x00010000! > Expected=0xff, Read=0xdf, failed byte count from 0x00000000-0x0007ffff: > 0x652aa > ERASE FAILED! This is actually a failed erase due to a flashrom bug in the chip definition. Whole-chip erase is not supported by this chip at all, and flashrom should not attempt to use that. The successful erase of the first 0x10000 bytes is the longterm (admittedly long-term means roughly one second here) effect of the first erase attempt. > FAILED! > Uh oh. Erase/write failed. Checking if anything changed. > Your flash chip is in an unknown state. > > > I tried a flashrom -r and compared it to the backup I made and it's > different. It is also different from the ROM I tried to install. > > Any thoughts? Yes. Please download latest flashrom from svn, edit file jedec.c function toggle_ready_jedec_slow() and replace toggle_ready_jedec_common(flash, dst, 8 * 1000); with toggle_ready_jedec_common(flash, dst, 100 * 1000); In theory, that change should work around the hardware bug you're hitting, but to be honest I expect more weirdness to show up instead. Still, it would be very helpful if you could test that. Do you have a way to recover (i.e. another board with a LPC flash chip in a socket)? I'm asking because I want to keep the risk low, and while the test above should be harmless in itself, more tests might be necessary later. Regards, Carl-Daniel -- http://www.hailfinger.org/ From miloud.malagouen at gmail.com Thu Jul 19 04:19:32 2012 From: miloud.malagouen at gmail.com (Miloud Malagouen) Date: Thu, 19 Jul 2012 04:19:32 +0200 Subject: [flashrom] FAILED: MS-7302 Message-ID: Dear Sir, I bricked a MSI MS-7302 motherboard with a bad coreboot image. I'm trying to flash the bios with a C232HM-DDHSL-0 FTDI USB cableusing the MSI JSPI1 Header present on the board for SPI connection. The FTDI cable uses a FT232H chip witch is capable of providing a USB to SPI, I2C or JTAG interface. The FTDI D2XX Linux driver cited that the FT232H chip has type number 6 (while the FT4232H has type 5), so i had to modify the file */usr/include/ftdi.h* and change the ftdi_chip_type enumeration definition: /** FTDI chip type */ enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2, TYPE_R=3, TYPE_2232H=4, TYPE_4232H=5,*TYPE_232H=6* }; I had to add support to the FT232H chip (vid=0403 pid=6014) in the * ft2232_spi* programmer of flashrom. I's very simple. Here is the patch of file ft2232_spi.c: =======================BEGIN DIFF================================ --- flashrom/ft2232_spi.c 2012-07-19 03:43:28.866724677 +0200 +++ flashrom-0.9.5.2-r1547/ft2232_spi.c 2012-07-16 05:16:53.000000000 +0200 @@ -34,6 +34,7 @@ #define FTDI_VID 0x0403 #define FTDI_FT2232H_PID 0x6010 #define FTDI_FT4232H_PID 0x6011 +#define FTDI_FT232H_PID 0x6014 #define TIAO_TUMPA_PID 0x8a98 #define AMONTEC_JTAGKEY_PID 0xCFF8 @@ -52,6 +53,7 @@ const struct usbdev_status devs_ft2232spi[] = { {FTDI_VID, FTDI_FT2232H_PID, OK, "FTDI", "FT2232H"}, {FTDI_VID, FTDI_FT4232H_PID, OK, "FTDI", "FT4232H"}, + {FTDI_VID, FTDI_FT232H_PID, NT, "FTDI", "FT232H"}, {FTDI_VID, TIAO_TUMPA_PID, OK, "TIAO", "USB Multi-Protocol Adapter"}, {FTDI_VID, AMONTEC_JTAGKEY_PID, OK, "Amontec", "JTAGkey"}, {GOEPEL_VID, GOEPEL_PICOTAP_PID, OK, "GOEPEL", "PicoTAP"}, @@ -185,6 +187,8 @@ int ft2232_spi_init(void) ft2232_type = FTDI_FT2232H_PID; else if (!strcasecmp(arg, "4232H")) ft2232_type = FTDI_FT4232H_PID; + else if (!strcasecmp(arg, "232H")) + ft2232_type = FTDI_FT232H_PID; else if (!strcasecmp(arg, "jtagkey")) { ft2232_type = AMONTEC_JTAGKEY_PID; ft2232_interface = INTERFACE_A; @@ -285,7 +289,7 @@ int ft2232_spi_init(void) return -4; } - if (ftdic->type != TYPE_2232H && ftdic->type != TYPE_4232H) { + if (ftdic->type != TYPE_2232H && ftdic->type != TYPE_4232H && ftdic->type != TYPE_232H) { msg_pdbg("FTDI chip type %d is not high-speed\n", ftdic->type); clock_5x = 0; =======================END DIFF================================== The flash memory is probed correctly but erase an write operations failed. Here is flashrom command (bold) and output: ____________________________________________________________________________________ *flashrom -p ft2232_spi:type=232H,port=A -w A7302AMS.160* flashrom v0.9.5.2-runknown on Linux 3.4.4-5.fc17.i686.PAE (i686) flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK. Found Winbond flash chip "W25X80" (1024 kB, SPI) on ft2232_spi. Reading old flash chip contents... done. Erasing and writing flash chip... ERASE FAILED at 0x00000000! Expected=0xff, Read=0x00, failed byte count from 0x00000000-0x00000fff: 0x10 ERASE FAILED! Reading current flash chip contents... done. ERASE FAILED at 0x00000000! Expected=0xff, Read=0x00, failed byte count from 0x00000000-0x0000ffff: 0x100 ERASE FAILED! Reading current flash chip contents... done. ERASE FAILED at 0x00000000! Expected=0xff, Read=0x00, failed byte count from 0x00000000-0x000fffff: 0xffc ERASE FAILED! FAILED! Uh oh. Erase/write failed. Checking if anything changed. Your flash chip is in an unknown state. Get help on IRC at chat.freenode.net (channel #flashrom) or mail flashrom at flashrom.org with the subject "FAILED: "! ------------------------------------------------------------------------------- DO NOT REBOOT OR POWEROFF! ____________________________________________________________________________________ The chip is powered with an external PSU (3.3V orange cable of an ATX PSU). I will try with a 1200F capacitor on the VCC link. I hope this is just a magnetic noise issue. Thank you. -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 19 12:51:21 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 19 Jul 2012 12:51:21 +0200 Subject: [flashrom] FT232H support (was: FAILED: MS-7302) In-Reply-To: References: Message-ID: <201207191051.q6JApL8J002915@mail2.student.tuwien.ac.at> On Thu, 19 Jul 2012 04:19:32 +0200 Miloud Malagouen wrote: > I bricked a MSI MS-7302 motherboard with a bad coreboot image. I'm trying > to flash the bios with a C232HM-DDHSL-0 FTDI USB > cableusing the > MSI JSPI1 Header present on the board > for SPI connection. The FTDI cable uses a FT232H chip witch is capable of > providing a USB to SPI, I2C or JTAG interface. > > The FTDI D2XX Linux driver cited that the FT232H chip has type number 6 > (while the FT4232H has type 5), so i had to modify the file > */usr/include/ftdi.h* and change the ftdi_chip_type enumeration definition: > > /** FTDI chip type */ > enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2, TYPE_R=3, > TYPE_2232H=4, TYPE_4232H=5,*TYPE_232H=6* }; there is probably a way around this, we will have to investigate that. > I had to add support to the FT232H chip (vid=0403 pid=6014) in the * > ft2232_spi* programmer of flashrom. I's very simple. Here is the patch of > file ft2232_spi.c: thanks for the patch, i'll review it in detail later. two things certainly need to be changed before this can enter our repository though: - man page needs to be updated - the patch has to be signed off, see http://www.coreboot.org/Development_Guidelines#Sign-off_Procedure > =======================BEGIN DIFF================================ > --- flashrom/ft2232_spi.c 2012-07-19 03:43:28.866724677 +0200 > +++ flashrom-0.9.5.2-r1547/ft2232_spi.c 2012-07-16 05:16:53.000000000 > +0200 > [?] > =======================END DIFF================================== > > > The flash memory is probed correctly but erase an write operations failed. > Here is flashrom command (bold) and output: > ____________________________________________________________________________________ > > *flashrom -p ft2232_spi:type=232H,port=A -w A7302AMS.160* > flashrom v0.9.5.2-runknown on Linux 3.4.4-5.fc17.i686.PAE (i686) > flashrom is free software, get the source code at http://www.flashrom.org > > [?] > > The chip is powered with an external PSU (3.3V orange cable of an ATX PSU). > I will try with a 1200F capacitor on the VCC link. I hope this is just > a magnetic noise issue. Are all pins connected correctly? especially the #WP pin could introduce the problem, but all others should be connected as specified in the datasheet too (e.g. hold pin if available). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From seltenreich at gmx.de Thu Jul 19 12:40:01 2012 From: seltenreich at gmx.de (Andreas Seltenreich) Date: Thu, 19 Jul 2012 12:40:01 +0200 Subject: [flashrom] [PATCH] Support chips MBM29F040 and W29EE512 Message-ID: <87fw8o11by.fsf@gate450.dyndns.org> Hi, I had to modify my copy a bit to use the PLCC chips I had salvaged somewhere as boot ROMs in Intel NICs. Patch attached. I'm not sure if the 512kB one qualifies as tested because the programmer only supports 128kB, and I had to --force it. regards, andreas -------------- next part -------------- A non-text attachment was scrubbed... Name: flashchips.diff Type: text/x-diff Size: 1671 bytes Desc: not available URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 19 14:13:11 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 19 Jul 2012 14:13:11 +0200 Subject: [flashrom] [PATCH] Support chips MBM29F040 and W29EE512 In-Reply-To: <87fw8o11by.fsf@gate450.dyndns.org> References: <87fw8o11by.fsf@gate450.dyndns.org> Message-ID: <201207191213.q6JCDBdm031666@mail2.student.tuwien.ac.at> On Thu, 19 Jul 2012 12:40:01 +0200 Andreas Seltenreich wrote: > I had to modify my copy a bit to use the PLCC chips I had salvaged > somewhere as boot ROMs in Intel NICs. Patch attached. Thank you very much for your work! We need you to sign it off to commit it though, see http://www.coreboot.org/Development_Guidelines#Sign-off_Procedure > > I'm not sure if the 512kB one qualifies as tested because the programmer > only supports 128kB, and I had to --force it. I would say no, just probing. > diff --git a/flashchips.c b/flashchips.c > index 0c9f6c4..41b43ea 100644 > --- a/flashchips.c > +++ b/flashchips.c > @@ -3791,6 +3791,30 @@ const struct flashchip flashchips[] = { > }, > > { > + .vendor = "Fujitsu", > + .name = "MBM29F040", > + .bustype = BUS_PARALLEL, > + .manufacture_id = FUJITSU_ID, > + .model_id = FUJITSU_MBM29F040C, > + .total_size = 512, > + .page_size = 64 * 1024, > + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, > + .tested = TEST_OK_EPRW, really? :) > + .probe = probe_jedec, > + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ > + .block_erasers = > + { > + { > + .eraseblocks = { {64 * 1024, 8} }, > + .block_erase = erase_sector_jedec, > + }, > + }, > + .write = write_jedec_1, > + .read = read_memmapped, > + .voltage = {4750, 5250}, /* 70ns one, 10% on slower models */ please use the common format like "/* 4.75-5.25V for type -55, others 4.5-5.5V */" this makes it easier to reformat them automatically if need be. > + }, > + > + { > /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */ > .vendor = "Fujitsu", > .name = "MBM29F400BC", > @@ -8987,6 +9011,29 @@ const struct flashchip flashchips[] = { > > { > .vendor = "Winbond", > + .name = "W29C512A/W29EE512", > + .bustype = BUS_PARALLEL, > + .manufacture_id = WINBOND_ID, > + .model_id = WINBOND_W29C512A, > + .total_size = 64, > + .page_size = 128, > + .feature_bits = FEATURE_LONG_RESET, > + .tested = TEST_OK_PREW, > + .probe = probe_jedec, > + .probe_timing = 10, /* used datasheet for the W29C011A */ There is no datasheet available for the actual chips? > [?] -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From riccardobrt at gmail.com Thu Jul 19 13:31:03 2012 From: riccardobrt at gmail.com (Riccardo Berto) Date: Thu, 19 Jul 2012 13:31:03 +0200 Subject: [flashrom] (no subject) Message-ID: > > in the output of the program, it says to send to this email the verbose > output if I have untested chip So here you are *flashrom v0.9.5.2-r1515 on Linux 3.4.5-1-ARCH (x86_64), built with libpci 3.1.9, GCC 4.6.3, little endian* *flashrom is free software, get the source code at http://www.flashrom.org* * * *Calibrating delay loop... OS timer resolution is 1 usecs, 1555M loops per second, 10 myus = 9 us, 100 myus = 104 us, 1000 myus = 969 us, 10000 myus = 9748 us, 4 myus = 4 us, OK.* *Initializing internal programmer* *No coreboot table found.* *sh: dmidecode: command not found* *dmidecode execution unsuccessful - continuing without DMI info* *Found chipset "Intel HM55" with PCI ID 8086:3b09. * *This chipset is marked as untested. If you are using an up-to-date version* *of flashrom please email a report to flashrom at flashrom.org including a* *verbose (-V) log. Thank you!* *Enabling flash write... * *0xfff80000/0xffb80000 FWH IDSEL: 0x0* *0xfff00000/0xffb00000 FWH IDSEL: 0x0* *0xffe80000/0xffa80000 FWH IDSEL: 0x0* *0xffe00000/0xffa00000 FWH IDSEL: 0x0* *0xffd80000/0xff980000 FWH IDSEL: 0x0* *0xffd00000/0xff900000 FWH IDSEL: 0x0* *0xffc80000/0xff880000 FWH IDSEL: 0x0* *0xffc00000/0xff800000 FWH IDSEL: 0x0* *0xff700000/0xff300000 FWH IDSEL: 0x4* *0xff600000/0xff200000 FWH IDSEL: 0x5* *0xff500000/0xff100000 FWH IDSEL: 0x6* *0xff400000/0xff000000 FWH IDSEL: 0x7* *0xfff80000/0xffb80000 FWH decode enabled* *0xfff00000/0xffb00000 FWH decode enabled* *0xffe80000/0xffa80000 FWH decode enabled* *0xffe00000/0xffa00000 FWH decode enabled* *0xffd80000/0xff980000 FWH decode enabled* *0xffd00000/0xff900000 FWH decode enabled* *0xffc80000/0xff880000 FWH decode enabled* *0xffc00000/0xff800000 FWH decode enabled* *0xff700000/0xff300000 FWH decode enabled* *0xff600000/0xff200000 FWH decode enabled* *0xff500000/0xff100000 FWH decode enabled* *0xff400000/0xff000000 FWH decode enabled* *Maximum FWH chip size: 0x400000 bytes* *BIOS Lock Enable: disabled, BIOS Write Enable: disabled, BIOS_CNTL is 0x0* *Root Complex Register Block address = 0xfed1c000* *GCS = 0xc60: BIOS Interface Lock-Down: disabled, Boot BIOS Straps: 0x3 (SPI)* *Top Swap : not enabled* *SPIBAR = 0xfed1c000 + 0x3800* *0x04: 0x6008 (HSFS)* *HSFS: FDONE=0, FCERR=0, AEL=0, BERASE=1, SCIP=0, FDOPSS=1, FDV=1, FLOCKDN=0 * *Programming OPCODES... * *program_opcodes: preop=5006 optype=463b opmenu=05d80302c79f0190* *done* *0x06: 0x3f04 (HSFC)* *HSFC: FGO=0, FCYCLE=2, FDBC=63, SME=0* *0x08: 0x00000000 (FADDR)* *0x50: 0x00000a0b (FRAP)* *BMWAG 0x00, BMRAG 0x00, BRWA 0x0a, BRRA 0x0b* *0x54: 0x00000000 FREG0: WARNING: Flash Descriptor region (0x00000000-0x00000fff) is read-only.* *0x58: 0x03ff0180 FREG1: BIOS region (0x00180000-0x003fffff) is read-write.* *0x5C: 0x017f0001 FREG2: WARNING: Management Engine region (0x00001000-0x0017ffff) is locked.* *Please send a verbose log to flashrom at flashrom.org if this board is not listed on* *http://flashrom.org/Supported_hardware#Supported_mainboards yet.* *Writes have been disabled. You can enforce write support with the* *ich_spi_force programmer option, but it will most likely harm your hardware!* *If you force flashrom you will get no support if something breaks.* *0x90: 0x04 (SSFS)* *SSFS: SCIP=0, FDONE=1, FCERR=0, AEL=0* *0x91: 0xf84140 (SSFC)* *SSFC: SCGO=0, ACS=0, SPOP=0, COP=4, DBC=1, SME=0, SCF=0* *0x94: 0x5006 (PREOP)* *0x96: 0x463b (OPTYPE)* *0x98: 0x05d80302 (OPMENU)* *0x9C: 0xc79f0190 (OPMENU+4)* *0xA0: 0x00000000 (BBAR)* *0xC4: 0x00802005 (LVSCC)* *LVSCC: BES=0x1, WG=1, WSR=0, WEWS=0, EO=0x20, VCL=1* *0xC8: 0x00002005 (UVSCC)* *UVSCC: BES=0x1, WG=1, WSR=0, WEWS=0, EO=0x20, VCL=0* *0xD0: 0x00000000 (FPB)* * * *SPI Read Configuration: prefetching disabled, caching enabled, OK.* *The following protocols are supported: FWH, SPI.* *Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST SST25LF040A, 512 kB: * *program_opcodes: preop=5006 optype=462b opmenu=05ab0302c79f0190* *on-the-fly OPCODE (0xAB) re-programmed, op-pos=2* *probe_spi_res2: id1 0x15, id2 0x15* *Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x15, id2 0x15* *Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xef, id2 0x15* *Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xef, id2 0x15* *Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xef, id2 0x15* *Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID.* *Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID.* *Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016 * *Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016 * *Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID.* *Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Chip status register is 00* *Found Winbond flash chip "W25X32" (4096 kB, SPI) at physical address 0xffc00000.* *Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Unknown SFDP-capable chip, 0 kB: * *program_opcodes: preop=5006 optype=462b opmenu=055a0302c79f0190* *on-the-fly OPCODE (0x5A) re-programmed, op-pos=2* *No SFDP signature found.* *Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0xef, id2 0x3016* *Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0xef, id2 0x15* *Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0x0f, id2 0xb6, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0x0f, id2 0xb6, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0x0f, id2 0xb6, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0x74, id2 0x05, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0x00, id2 0x00, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0x0f, id2 0xb6, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0x00, id2 0x00, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0x0f, id2 0xb6, id1 parity violation, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xab, id2 0x3d, id1 is normal flash content, id2 is normal flash content* *Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0x89, id2 0x6e, id1 is normal flash content, id2 is normal flash content* *Found Winbond flash chip "W25X32" (4096 kB, SPI).* *===* *This flash part has status UNTESTED for operations: READ ERASE WRITE* *The test status of this chip may have been updated in the latest development* *version of flashrom. If you are running the latest development version,* *please email a report to flashrom at flashrom.org if any of the above operations* *work correctly for you with this flash part. Please include the flashrom* *output with the additional -V option for all operations you tested (-V, -Vr,* *-VE, -Vw), and mention which mainboard or programmer you tested.* *Please mention your board in the subject line. Thanks for your help!* *No operations were specified.* *Restoring MMIO space at 0x7f34ce9b58a0* *Restoring MMIO space at 0x7f34ce9b589c* *Restoring MMIO space at 0x7f34ce9b5898* *Restoring MMIO space at 0x7f34ce9b5896* *Restoring MMIO space at 0x7f34ce9b5894* *Restoring PCI config space for 00:1f:0 reg 0xdc* -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 19 14:24:35 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 19 Jul 2012 14:24:35 +0200 Subject: [flashrom] (no subject) In-Reply-To: References: Message-ID: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> On Thu, 19 Jul 2012 13:31:03 +0200 Riccardo Berto wrote: > in the output of the program, it says to send to this email the verbose > output if I have untested chip Hello and thanks for your report, actually the message requested you to send an email if one of READ, ERASE or WRITE worked, but that was apparently not the case, and probing was already marked as working on that chip. But there is something else in your log that is interesting to us: the locked ME region. Which mainboard model is that? -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From riccardobrt at gmail.com Thu Jul 19 16:52:43 2012 From: riccardobrt at gmail.com (Riccardo Berto) Date: Thu, 19 Jul 2012 16:52:43 +0200 Subject: [flashrom] (no subject) In-Reply-To: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> References: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> Message-ID: didn't understand to send only if it has succes. sorry but i'm a noob in hardware questions, all the things i can tell you is that I have this pc (mb Mobile Intel HM55 Express). -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 19 17:17:03 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 19 Jul 2012 17:17:03 +0200 Subject: [flashrom] (no subject) In-Reply-To: References: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> Message-ID: <201207191517.q6JFH3fY005478@mail2.student.tuwien.ac.at> On Thu, 19 Jul 2012 16:52:43 +0200 Riccardo Berto wrote: > didn't understand to send only if it has succes. > > > sorry but i'm a noob in hardware questions, all the things i can tell you > is that I have this > pc > (mb Mobile > Intel HM55 Express). thank you, that was what i was looking for. at first i presumed you were running flashrom on a desktop machine. flashrom tries to detect this (with dmidecode) but failed, hence my confusion. the reason it checks that at all is that running flashrom on laptops can be dangerous (e.g. instant shutdowns). it was not in your case but please refrain from running it on other laptops. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From riccardobrt at gmail.com Thu Jul 19 17:20:46 2012 From: riccardobrt at gmail.com (Riccardo Berto) Date: Thu, 19 Jul 2012 17:20:46 +0200 Subject: [flashrom] (no subject) In-Reply-To: <201207191517.q6JFH3fY005478@mail2.student.tuwien.ac.at> References: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> <201207191517.q6JFH3fY005478@mail2.student.tuwien.ac.at> Message-ID: ok lol thanks for the explanation btw I think that with battery on it and connected to AC you can use a laptop safely (with battery you avoid instant shutdowns) -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 19 17:41:50 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 19 Jul 2012 17:41:50 +0200 Subject: [flashrom] (no subject) In-Reply-To: References: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> <201207191517.q6JFH3fY005478@mail2.student.tuwien.ac.at> Message-ID: <201207191541.q6JFfore025427@mail2.student.tuwien.ac.at> On Thu, 19 Jul 2012 17:20:46 +0200 Riccardo Berto wrote: > ok lol > > thanks for the explanation > btw I think that with battery on it and connected to AC you can use a > laptop safely (with battery you avoid instant shutdowns) no that problem is not the supply of power (that is actually a plus for laptops compared to desktops without an UPS), but the internal workings of most laptops. they include a chip called embedded controller that runs its own software and controls things like the backlight of the display or charging the battery. the problem is that these chips are often near the flash chip logically and flashrom sometimes irritates them enough that they just shut down the whole machine. the main reason why this can happen is that they are not documented publicly at all, see also http://flashrom.org/Laptops -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From vidwer at gmail.com Thu Jul 19 18:06:26 2012 From: vidwer at gmail.com (Idwer Vollering) Date: Thu, 19 Jul 2012 18:06:26 +0200 Subject: [flashrom] (no subject) In-Reply-To: References: <201207191224.q6JCOZIf007021@mail2.student.tuwien.ac.at> <201207191517.q6JFH3fY005478@mail2.student.tuwien.ac.at> Message-ID: 2012/7/19 Riccardo Berto : > > > ok lol > > thanks for the explanation > btw I think that with battery on it and connected to AC you can use a > laptop > safely (with battery you avoid instant shutdowns) No, the battery isn't there to prevent unexpected poweroffs. Read the following two wiki pages, there you'll find out more about why we strongly discourage running flashrom on laptops/mobile hardware. http://flashrom.org/Laptops http://flashrom.org/Laptop_enable From miloud.malagouen at gmail.com Thu Jul 19 18:38:12 2012 From: miloud.malagouen at gmail.com (Miloud Malagouen) Date: Thu, 19 Jul 2012 18:38:12 +0200 Subject: [flashrom] FT232H support (was: FAILED: MS-7302) In-Reply-To: <201207191051.q6JApL8J002915@mail2.student.tuwien.ac.at> References: <201207191051.q6JApL8J002915@mail2.student.tuwien.ac.at> Message-ID: Thank you for your response. The erase/write operations was finally done but the verify operation failed. But the difference was not so big and the board is booting again. I'm lucky. The patch I sent to you should not be considered because it relies on a modification of the ftdi.h header file witch is part of the libftdi-dev(el) package and not flashrom. So the definition of TYPE_232H should be checked during the configure phase of the build. I know that the flashrom build does not compile ft2232_spi programmer support if the file ftdi.h is not found. So further test could be considered. But I think it should be easier to wait for the libftdi project to add support to the FT232H chip. I was helped in my work by a nice project called libmpsse found on code.google.com. It's a SPI/I2C api build on top of libftdi, using the MPSSE engine and it works fine. When I run the samples of this project I see a red led lighting on the cable during operation. I never saw this led with any other tools, even those of FTDI. I think this code does a good job on initialisation/de-initialisation of the MPSSE engine of the FT232H chip. The python binding is also inpressive. With a few lines of code once can read a flash memory. Sorry, i'm not an electronic expert and I think the quality of the links was very poor. Thank you. Le 19 juil. 2012 12:51, "Stefan Tauner" a ?crit : > On Thu, 19 Jul 2012 04:19:32 +0200 > Miloud Malagouen wrote: > > > > I bricked a MSI MS-7302 motherboard with a bad coreboot image. I'm trying > > to flash the bios with a C232HM-DDHSL-0 FTDI USB > > cableusing the > > MSI JSPI1 Header present on the > board > > for SPI connection. The FTDI cable uses a FT232H chip witch is capable of > > providing a USB to SPI, I2C or JTAG interface. > > > > The FTDI D2XX Linux driver cited that the FT232H chip has type number 6 > > (while the FT4232H has type 5), so i had to modify the file > > */usr/include/ftdi.h* and change the ftdi_chip_type enumeration > definition: > > > > /** FTDI chip type */ > > enum ftdi_chip_type { TYPE_AM=0, TYPE_BM=1, TYPE_2232C=2, TYPE_R=3, > > TYPE_2232H=4, TYPE_4232H=5,*TYPE_232H=6* }; > > there is probably a way around this, we will have to investigate that. > > > I had to add support to the FT232H chip (vid=0403 pid=6014) in the * > > ft2232_spi* programmer of flashrom. I's very simple. Here is the patch of > > file ft2232_spi.c: > > thanks for the patch, i'll review it in detail later. > two things certainly need to be changed before this can enter our > repository though: > - man page needs to be updated > - the patch has to be signed off, see > http://www.coreboot.org/Development_Guidelines#Sign-off_Procedure > > > =======================BEGIN DIFF================================ > > --- flashrom/ft2232_spi.c 2012-07-19 03:43:28.866724677 +0200 > > +++ flashrom-0.9.5.2-r1547/ft2232_spi.c 2012-07-16 05:16:53.000000000 > > +0200 > > [?] > > =======================END DIFF================================== > > > > > > The flash memory is probed correctly but erase an write operations > failed. > > Here is flashrom command (bold) and output: > > > ____________________________________________________________________________________ > > > > *flashrom -p ft2232_spi:type=232H,port=A -w A7302AMS.160* > > flashrom v0.9.5.2-runknown on Linux 3.4.4-5.fc17.i686.PAE (i686) > > flashrom is free software, get the source code at > http://www.flashrom.org > > > > [?] > > > > The chip is powered with an external PSU (3.3V orange cable of an ATX > PSU). > > I will try with a 1200F capacitor on the VCC link. I hope this is just > > a magnetic noise issue. > > Are all pins connected correctly? especially the #WP pin could introduce > the problem, but all others should be connected as specified in the > datasheet too (e.g. hold pin if available). > > -- > Kind regards/Mit freundlichen Gr??en, Stefan Tauner > -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Fri Jul 20 01:52:23 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 20 Jul 2012 01:52:23 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> References: <4FFC73DC.9010007@gmail.com> <4FFCBB70.3050300@gmx.net> <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> Message-ID: <201207192352.q6JNqNCW026795@mail2.student.tuwien.ac.at> On Mon, 16 Jul 2012 13:57:36 +0200 Stefan Tauner wrote: > Above all we need to work on the support for the VIA chipset (VT8251), > but IBM won't be able to help us with that. I have no news regarding > that. Hello again, i have a patch for you to test. It tries to add support for the VT8251 by using the code for similar VIA chipsets. We are pretty confident that it will work although we could not verify it against a datasheet (yet). The Renesas chip might still be a problem, but we hopefully be able to take one step forward. Please apply the attached patch to the current subversion head and send us the output of flashrom -V -p internal:laptop=this_is_not_a_laptop and if that finds a chip also the output of flashrom -V -p internal:laptop=this_is_not_a_laptop -r testfile.bin Please don't try to write or erase yet! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Add-support-for-VIA-VT8251.patch Type: text/x-patch Size: 1052 bytes Desc: not available URL: From wspeirs at apache.org Fri Jul 20 03:40:08 2012 From: wspeirs at apache.org (William Speirs) Date: Thu, 19 Jul 2012 21:40:08 -0400 Subject: [flashrom] FAILED: NVIDIA MCP61 In-Reply-To: <5007617B.1090907@gmx.net> References: <5007617B.1090907@gmx.net> Message-ID: Thanks for getting back to me. I restarted my computer -- while holding my breath -- and it booted without issue. As for testing the modification to the code, I'd rather not. I'm all for helping open source, but I cannot risk it on this computer. If I had a board and another BIOS to play around with, then I'd give it a shot. Thanks again for all the help... Bill- On Wed, Jul 18, 2012 at 9:23 PM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006 at gmx.net> wrote: > Hi Bill, > > glad to hear you could restore by writing the backup. > Analysis follows. > > > Am 18.07.2012 01:39 schrieb William Speirs: > > $ flashrom -w M2N_0902.ROM > > flashrom v0.9.5.2-r1517 on Linux > > Calibrating delay loop... OK. > > Found chipset "NVIDIA MCP61". Enabling flash write... OK. > > Found Winbond flash chip "W39V040C" (512 kB, LPC) at physical address > > 0xfff80000. > > A notoriously troublesome chip. It behaves in a weird way (IMHO not > really JEDEC-compliant) with the JEDEC Toggle Bit algorithm (minimum 50 > ms time between reads). You may be hitting that problem although we > tried to add workarounds for it. > > > > Reading old flash chip contents... done. > > Erasing and writing flash chip... ERASE FAILED at 0x00000000! > > Expected=0xff, Read=0x4f, failed byte count from 0x00000000-0x0000ffff: > > 0x10000 > > ERASE FAILED! > > This is actually not a failed erase, but a misdetected end-of-erase due > to the JEDEC Toggle Bit weirdness. The erase succeeds eventually, > roughly half a second after flashrom complains about erase failure. > > > > Reading current flash chip contents... done. ERASE FAILED at 0x00010000! > > Expected=0xff, Read=0xdf, failed byte count from 0x00000000-0x0007ffff: > > 0x652aa > > ERASE FAILED! > > This is actually a failed erase due to a flashrom bug in the chip > definition. Whole-chip erase is not supported by this chip at all, and > flashrom should not attempt to use that. The successful erase of the > first 0x10000 bytes is the longterm (admittedly long-term means roughly > one second here) effect of the first erase attempt. > > > FAILED! > > Uh oh. Erase/write failed. Checking if anything changed. > > Your flash chip is in an unknown state. > > > > > > I tried a flashrom -r and compared it to the backup I made and it's > > different. It is also different from the ROM I tried to install. > > > > Any thoughts? > > Yes. Please download latest flashrom from svn, edit file jedec.c > function toggle_ready_jedec_slow() and replace > toggle_ready_jedec_common(flash, dst, 8 * 1000); > with > toggle_ready_jedec_common(flash, dst, 100 * 1000); > > In theory, that change should work around the hardware bug you're > hitting, but to be honest I expect more weirdness to show up instead. > Still, it would be very helpful if you could test that. > > Do you have a way to recover (i.e. another board with a LPC flash chip > in a socket)? I'm asking because I want to keep the risk low, and while > the test above should be harmless in itself, more tests might be > necessary later. > > Regards, > Carl-Daniel > > -- > http://www.hailfinger.org/ > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From vidwer at gmail.com Fri Jul 20 11:34:11 2012 From: vidwer at gmail.com (Idwer Vollering) Date: Fri, 20 Jul 2012 11:34:11 +0200 Subject: [flashrom] IBM SurePOS 700 4800-783 support In-Reply-To: <201207192352.q6JNqNCW026795@mail2.student.tuwien.ac.at> References: <4FFC73DC.9010007@gmail.com> <4FFCBB70.3050300@gmx.net> <201207161157.q6GBvaSO030919@mail2.student.tuwien.ac.at> <201207192352.q6JNqNCW026795@mail2.student.tuwien.ac.at> Message-ID: 2012/7/20 Stefan Tauner : > On Mon, 16 Jul 2012 13:57:36 +0200 > Stefan Tauner wrote: > >> Above all we need to work on the support for the VIA chipset (VT8251), >> but IBM won't be able to help us with that. I have no news regarding >> that. > > Hello again, > > i have a patch for you to test. It tries to add support for the VT8251 > by using the code for similar VIA chipsets. We are pretty confident > that it will work although we could not verify it against a datasheet > (yet). The Renesas chip might still be a problem, but we hopefully be > able to take one step forward. Please apply the attached patch to the > current subversion head You can find the subversion URI here: http://www.flashrom.org/Downloads#Installation_from_source Run 'make' after patching. > and send us the output of > > flashrom -V -p internal:laptop=this_is_not_a_laptop > > and if that finds a chip also the output of > > flashrom -V -p internal:laptop=this_is_not_a_laptop -r testfile.bin > > Please don't try to write or erase yet! > -- > Kind regards/Mit freundlichen Gr??en, Stefan Tauner > > _______________________________________________ > flashrom mailing list > flashrom at flashrom.org > http://www.flashrom.org/mailman/listinfo/flashrom From patrick at georgi-clan.de Fri Jul 20 20:51:52 2012 From: patrick at georgi-clan.de (Patrick Georgi) Date: Fri, 20 Jul 2012 20:51:52 +0200 Subject: [flashrom] [PATCH]Hide hwaccess.h from public API Message-ID: <2d5b250d44777c741a7acc8a0ca3ec37@mail.georgi-clan.de> Hi, attached patch hides hwaccess.h (which is usually not necessary to use flashrom as library) from the public interface at flash.h. For the most part, this simply adds the header to driver .c files, but it also required a small workaround to handle libpci types used in a bunch of prototypes. Rationale: hwaccess.h at that place conflicts with libpayload which brings its own hardware access functions (which are wrapped properly to match flashrom's expectations in hwaccess.h already). They should also not matter in other contexts (and if someone requires them, they can still include hwaccess.h where needed). Librarification of flashrom requires some more patches, like pulling out some functions of the CLI code - even if doit() is by no means a pretty interface, it makes things simpler. But one step after the other... Signed-off-by: Patrick Georgi -------------- next part -------------- A non-text attachment was scrubbed... Name: 20120720-1-flashrom-no-hwaccess.h Type: text/x-c Size: 8238 bytes Desc: not available URL: From svn at flashrom.org Fri Jul 20 22:35:16 2012 From: svn at flashrom.org (repository service) Date: Fri, 20 Jul 2012 22:35:16 +0200 Subject: [flashrom] [commit] r1549 - trunk Message-ID: Author: hailfinger Date: Fri Jul 20 22:35:14 2012 New Revision: 1549 URL: http://flashrom.org/trac/flashrom/changeset/1549 Log: Hide hwaccess.h from public API. Move hwaccess.h #include from flash.h to individual drivers. libflashrom users need flash.h, but they do not care about hwaccess.h and should not see its definitions because they may conflict with other hardware access functions and #defines used by the libflashrom user. Signed-off-by: Patrick Georgi Acked-by: Carl-Daniel Hailfinger Modified: trunk/atahpt.c trunk/board_enable.c trunk/chipset_enable.c trunk/drkaiser.c trunk/flash.h trunk/gfxnvidia.c trunk/hwaccess.c trunk/ichspi.c trunk/internal.c trunk/it85spi.c trunk/it87spi.c trunk/mcp6x_spi.c trunk/nic3com.c trunk/nicintel.c trunk/nicintel_spi.c trunk/nicnatsemi.c trunk/nicrealtek.c trunk/ogp_spi.c trunk/pcidev.c trunk/physmap.c trunk/programmer.h trunk/rayer_spi.c trunk/satamv.c trunk/satasii.c trunk/sb600spi.c trunk/wbsio_spi.c Modified: trunk/atahpt.c ============================================================================== --- trunk/atahpt.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/atahpt.c Fri Jul 20 22:35:14 2012 (r1549) @@ -24,6 +24,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define BIOS_ROM_ADDR 0x90 #define BIOS_ROM_DATA 0x94 Modified: trunk/board_enable.c ============================================================================== --- trunk/board_enable.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/board_enable.c Fri Jul 20 22:35:14 2012 (r1549) @@ -27,6 +27,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #if defined(__i386__) || defined(__x86_64__) /* Modified: trunk/chipset_enable.c ============================================================================== --- trunk/chipset_enable.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/chipset_enable.c Fri Jul 20 22:35:14 2012 (r1549) @@ -34,6 +34,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define NOT_DONE_YET 1 Modified: trunk/drkaiser.c ============================================================================== --- trunk/drkaiser.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/drkaiser.c Fri Jul 20 22:35:14 2012 (r1549) @@ -21,6 +21,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_DRKAISER 0x1803 Modified: trunk/flash.h ============================================================================== --- trunk/flash.h Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/flash.h Fri Jul 20 22:35:14 2012 (r1549) @@ -26,7 +26,6 @@ #include #include -#include "hwaccess.h" #ifdef _WIN32 #include #undef min Modified: trunk/gfxnvidia.c ============================================================================== --- trunk/gfxnvidia.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/gfxnvidia.c Fri Jul 20 22:35:14 2012 (r1549) @@ -22,6 +22,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_NVIDIA 0x10de Modified: trunk/hwaccess.c ============================================================================== --- trunk/hwaccess.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/hwaccess.c Fri Jul 20 22:35:14 2012 (r1549) @@ -30,6 +30,7 @@ #include #endif #include "flash.h" +#include "hwaccess.h" #if defined(__i386__) || defined(__x86_64__) Modified: trunk/ichspi.c ============================================================================== --- trunk/ichspi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/ichspi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -29,6 +29,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #include "spi.h" #include "ich_descriptors.h" Modified: trunk/internal.c ============================================================================== --- trunk/internal.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/internal.c Fri Jul 20 22:35:14 2012 (r1549) @@ -22,6 +22,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #if NEED_PCI == 1 struct pci_dev *pci_dev_find_filter(struct pci_filter filter) Modified: trunk/it85spi.c ============================================================================== --- trunk/it85spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/it85spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -32,6 +32,7 @@ #include "flash.h" #include "spi.h" #include "programmer.h" +#include "hwaccess.h" #define MAX_TIMEOUT 100000 #define MAX_TRY 5 Modified: trunk/it87spi.c ============================================================================== --- trunk/it87spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/it87spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -30,6 +30,7 @@ #include "flash.h" #include "chipdrivers.h" #include "programmer.h" +#include "hwaccess.h" #include "spi.h" #define ITE_SUPERIO_PORT1 0x2e Modified: trunk/mcp6x_spi.c ============================================================================== --- trunk/mcp6x_spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/mcp6x_spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -29,6 +29,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" /* Bit positions for each pin. */ Modified: trunk/nic3com.c ============================================================================== --- trunk/nic3com.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/nic3com.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define BIOS_ROM_ADDR 0x04 #define BIOS_ROM_DATA 0x08 Modified: trunk/nicintel.c ============================================================================== --- trunk/nicintel.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/nicintel.c Fri Jul 20 22:35:14 2012 (r1549) @@ -22,6 +22,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" uint8_t *nicintel_bar; uint8_t *nicintel_control_bar; Modified: trunk/nicintel_spi.c ============================================================================== --- trunk/nicintel_spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/nicintel_spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -28,6 +28,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_INTEL 0x8086 Modified: trunk/nicnatsemi.c ============================================================================== --- trunk/nicnatsemi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/nicnatsemi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_NATSEMI 0x100b Modified: trunk/nicrealtek.c ============================================================================== --- trunk/nicrealtek.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/nicrealtek.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_REALTEK 0x10ec #define PCI_VENDOR_ID_SMC1211 0x1113 Modified: trunk/ogp_spi.c ============================================================================== --- trunk/ogp_spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/ogp_spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -21,6 +21,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_OGP 0x1227 Modified: trunk/pcidev.c ============================================================================== --- trunk/pcidev.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/pcidev.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" uint32_t io_base_addr; struct pci_access *pacc; Modified: trunk/physmap.c ============================================================================== --- trunk/physmap.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/physmap.c Fri Jul 20 22:35:14 2012 (r1549) @@ -25,6 +25,7 @@ #include #include #include "flash.h" +#include "hwaccess.h" /* Do we need any file access or ioctl for physmap or MSR? */ #if !defined(__DJGPP__) && !defined(__LIBPAYLOAD__) Modified: trunk/programmer.h ============================================================================== --- trunk/programmer.h Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/programmer.h Fri Jul 20 22:35:14 2012 (r1549) @@ -144,6 +144,7 @@ }; #if CONFIG_INTERNAL == 1 +struct pci_dev; struct penable { uint16_t vendor_id; uint16_t device_id; @@ -294,6 +295,7 @@ #define SUPERIO_VENDOR_WINBOND 0x2 #endif #if NEED_PCI == 1 +struct pci_filter; struct pci_dev *pci_dev_find_filter(struct pci_filter filter); struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t devclass); struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device); Modified: trunk/rayer_spi.c ============================================================================== --- trunk/rayer_spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/rayer_spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -34,6 +34,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" enum rayer_type { TYPE_RAYER, Modified: trunk/satamv.c ============================================================================== --- trunk/satamv.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/satamv.c Fri Jul 20 22:35:14 2012 (r1549) @@ -24,6 +24,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" uint8_t *mv_bar; uint16_t mv_iobar; Modified: trunk/satasii.c ============================================================================== --- trunk/satasii.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/satasii.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #define PCI_VENDOR_ID_SII 0x1095 Modified: trunk/sb600spi.c ============================================================================== --- trunk/sb600spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/sb600spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -25,6 +25,7 @@ #include "flash.h" #include "programmer.h" +#include "hwaccess.h" #include "spi.h" /* This struct is unused, but helps visualize the SB600 SPI BAR layout. Modified: trunk/wbsio_spi.c ============================================================================== --- trunk/wbsio_spi.c Mon Jul 16 23:32:19 2012 (r1548) +++ trunk/wbsio_spi.c Fri Jul 20 22:35:14 2012 (r1549) @@ -23,6 +23,7 @@ #include "flash.h" #include "chipdrivers.h" #include "programmer.h" +#include "hwaccess.h" #include "spi.h" #define WBSIO_PORT1 0x2e From c-d.hailfinger.devel.2006 at gmx.net Fri Jul 20 22:39:39 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Fri, 20 Jul 2012 22:39:39 +0200 Subject: [flashrom] [PATCH]Hide hwaccess.h from public API In-Reply-To: <2d5b250d44777c741a7acc8a0ca3ec37@mail.georgi-clan.de> References: <2d5b250d44777c741a7acc8a0ca3ec37@mail.georgi-clan.de> Message-ID: <5009C20B.3080805@gmx.net> Am 20.07.2012 20:51 schrieb Patrick Georgi: > attached patch hides hwaccess.h (which is usually not necessary to use > flashrom as library) from the public interface at flash.h. > For the most part, this simply adds the header to driver .c files, but > it also required a small workaround to handle libpci types used in a > bunch of prototypes. > > Rationale: hwaccess.h at that place conflicts with libpayload which > brings its own hardware access functions (which are wrapped properly > to match flashrom's expectations in hwaccess.h already). They should > also not matter in other contexts (and if someone requires them, they > can still include hwaccess.h where needed). Thanks for your patch. > Librarification of flashrom requires some more patches, like pulling > out some functions of the CLI code - even if doit() is by no means a > pretty interface, it makes things simpler. But one step after the other... I have some makefile patch pending which makes libflashrom usage easier. I should fix that one and resend it. > Signed-off-by: Patrick Georgi Acked-by: Carl-Daniel Hailfinger and committed in r1549. Admin note: Apparently patchwork didn't pick up this thread. Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 00:51:48 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 00:51:48 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <201207162242.q6GMgZKK024553@mail2.student.tuwien.ac.at> References: <4FF63F43.5090603@gmx.net> <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> <50048776.6020603@gmx.net> <201207162242.q6GMgZKK024553@mail2.student.tuwien.ac.at> Message-ID: <5009E104.7010204@gmx.net> Am 17.07.2012 00:42 schrieb Stefan Tauner: > On Mon, 16 Jul 2012 23:28:22 +0200 > Carl-Daniel Hailfinger wrote: > >> New version. >> >> Always require the --programmer parameter on the command line if any >> flash chip access (probe/read/write/erase/...) is requested. >> >> Signed-off-by: Carl-Daniel Hailfinger >> >> Index: flashrom-programmer_no_default/cli_classic.c >> =================================================================== >> --- flashrom-programmer_no_default/cli_classic.c (Revision 1547) >> +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) >> @@ -107,11 +39,11 @@ >> #endif >> "-E|-r |-w |-v ]\n" >> " [-c ] [-l ] [-o ]\n" >> - " [-i ] [-p [:]]\n\n"); >> + " [-i ] -p [:]\n\n"); > dont save changed line counts in the wrong places. please move the -p > part right after "flashrom" here and in the other bits (e.g. manpage). > i would even argue that all mandatory parameters should be mentioned > first (i.e. -E | ... should be moved up too). Hm yes. But how do we tell people that they need -p only for erase/read/write operations? Removing the square brackets around -p is not correct because it implies that -p is even required for --help. >> printf("Please note that the command line interface for flashrom has " >> "changed between\n" >> - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" >> + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" > either name all (known) CLI changes or just say something like "has > been changed before?" imho, but it is ok if you want to leave the hunk > as it is. Or maybe "[...] may change before flashrom 1.0" >> "Do not use flashrom in scripts or other automated tools " >> "without checking\n" >> "that your flashrom version won't interpret options in a " >> Index: flashrom-programmer_no_default/flashrom.8 >> =================================================================== >> --- flashrom-programmer_no_default/flashrom.8 (Revision 1547) >> +++ flashrom-programmer_no_default/flashrom.8 (Arbeitskopie) >> @@ -7,7 +7,7 @@ >> \fB\-v\fR ] >> [\fB\-c\fR ] \ >> [\fB\-l\fR ] >> - [\fB\-i\fR ] [\fB\-p\fR [:]] >> + [\fB\-i\fR ] \fB\-p\fR [:] > see above Similar question here. >> .SH DESCRIPTION >> .B flashrom >> is a utility for detecting, reading, writing, verifying and erasing flash >> @@ -117,13 +117,12 @@ >> All addresses are offsets within the file, not absolute addresses! >> If you only want to update the normal image in a ROM you can say: >> .sp >> -.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" >> +.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" >> .sp >> To update normal and fallback but leave the VGA BIOS alone, say: >> .sp >> -.B " flashrom \-l rom.layout \-i normal \" >> -.br >> -.B " \-i fallback \-w agami_aruma.rom" >> +.B " flashrom \-p prog \-l rom.layout \-i normal \ >> +\-i fallback \-w agami_aruma.rom" > maybe rename the image name as proposed by idwer...? Hm. I don't really get the point of using an abstract name in a concrete example. Could you please enlighten me? >> .sp >> Currently overlapping sections are not supported. >> .TP >> Index: flashrom-programmer_no_default/flashrom.c >> =================================================================== >> --- flashrom-programmer_no_default/flashrom.c (Revision 1547) >> +++ flashrom-programmer_no_default/flashrom.c (Arbeitskopie) >> @@ -59,6 +59,10 @@ >> /* Is writing allowed with this programmer? */ >> int programmer_may_write; >> >> +#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 >> +#error You have to enable at least one programmer! >> +#endif >> + > why did you choose this location for the check? wouldnt it make more > sense to have it in the makefile? Good point. I wanted to implement it in the Makefile, but that would have taken ~50 lines of code or even more due to the braindead language of GNUmake files. >> const struct programmer_entry programmer_table[] = { >> #if CONFIG_INTERNAL == 1 >> { > Acked-by: Stefan Tauner Thanks! I'll wait for your comments to the questions above before I resubmit and commit. Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 04:26:41 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 04:26:41 +0200 Subject: [flashrom] [PATCH] Document --output in the man page Message-ID: <500A1361.5060008@gmx.net> Document --output in the man page. Add an examples section to the man page. Signed-off-by: Carl-Daniel Hailfinger Index: flashrom-logfile_manpage/flashrom.8 =================================================================== --- flashrom-logfile_manpage/flashrom.8 (Revision 1549) +++ flashrom-logfile_manpage/flashrom.8 (Arbeitskopie) @@ -8,6 +8,7 @@ [\fB\-c\fR ] \ [\fB\-l\fR ] [\fB\-i\fR ] [\fB\-p\fR [:]] + [\fB-o\fR ] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -220,6 +221,13 @@ .B "\-h, \-\-help" Show a help text and exit. .TP +.B "\-o, \-\-output " +Save a full debug log to +.BR . +If the file already exists, it will be overwritten. This is the recommended +way to gather logs from flashrom because they will be verbose even if the +on-screen messages are not verbose. +.TP .B "\-R, \-\-version" Show version information and exit. .SH PROGRAMMER SPECIFIC INFO @@ -697,6 +705,25 @@ is the Linux device node for your SPI controller. .sp Please note that the linux_spi driver only works on Linux. +.SH EXAMPLES +To back up and update your BIOS, run +.sp +.B flashrom -p internal -r backup.rom -o backuplog.txt +.br +.B flashrom -p internal -w newbios.rom -o writelog.txt +.sp +Please make sure to copy backup.rom to some external media before you try +to write. That makes offline recovery easier. +.br +If writing fails and flashrom complains about the chip being in an unknown +state, you can try to restore the backup by running +.sp +.B flashrom -p internal -w backup.rom -o restorelog.txt +.sp +If you encounter any problems, please contact us and supply +backuplog.txt, writelog.txt and restorelog.txt. See section +.B BUGS +for contact info. .SH EXIT STATUS flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem (/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails. -- http://www.hailfinger.org/ From paulepanter at users.sourceforge.net Sat Jul 21 10:46:53 2012 From: paulepanter at users.sourceforge.net (Paul Menzel) Date: Sat, 21 Jul 2012 10:46:53 +0200 Subject: [flashrom] [PATCH] Document --output in the man page In-Reply-To: <500A1361.5060008@gmx.net> References: <500A1361.5060008@gmx.net> Message-ID: <1342860413.4048.4.camel@mattotaupa> Am Samstag, den 21.07.2012, 04:26 +0200 schrieb Carl-Daniel Hailfinger: > Document --output in the man page. > Add an examples section to the man page. > > Signed-off-by: Carl-Daniel Hailfinger > > Index: flashrom-logfile_manpage/flashrom.8 > =================================================================== > --- flashrom-logfile_manpage/flashrom.8 (Revision 1549) > +++ flashrom-logfile_manpage/flashrom.8 (Arbeitskopie) > @@ -8,6 +8,7 @@ > [\fB\-c\fR ] \ > [\fB\-l\fR ] > [\fB\-i\fR ] [\fB\-p\fR [:]] > + [\fB-o\fR ] > .SH DESCRIPTION > .B flashrom > is a utility for detecting, reading, writing, verifying and erasing flash > @@ -220,6 +221,13 @@ > .B "\-h, \-\-help" > Show a help text and exit. > .TP > +.B "\-o, \-\-output " > +Save a full debug log to I am unsure about the ?a? in there. But I am no native speaker, so I everything might be fine. > +.BR . > +If the file already exists, it will be overwritten. This is the recommended > +way to gather logs from flashrom because they will be verbose even if the > +on-screen messages are not verbose. > +.TP > .B "\-R, \-\-version" > Show version information and exit. > .SH PROGRAMMER SPECIFIC INFO > @@ -697,6 +705,25 @@ > is the Linux device node for your SPI controller. > .sp > Please note that the linux_spi driver only works on Linux. > +.SH EXAMPLES > +To back up and update your BIOS, run > +.sp > +.B flashrom -p internal -r backup.rom -o backuplog.txt > +.br > +.B flashrom -p internal -w newbios.rom -o writelog.txt > +.sp > +Please make sure to copy backup.rom to some external media before you try > +to write. That makes offline recovery easier. > +.br > +If writing fails and flashrom complains about the chip being in an unknown > +state, you can try to restore the backup by running > +.sp > +.B flashrom -p internal -w backup.rom -o restorelog.txt > +.sp > +If you encounter any problems, please contact us and supply > +backuplog.txt, writelog.txt and restorelog.txt. See section > +.B BUGS > +for contact info. > .SH EXIT STATUS > flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem > (/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails. Acked-by: Paul Menzel Thanks, Paul -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part URL: From flashrom at mkarcher.dialup.fu-berlin.de Sat Jul 21 16:02:42 2012 From: flashrom at mkarcher.dialup.fu-berlin.de (Michael Karcher) Date: Sat, 21 Jul 2012 16:02:42 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <50051179.9040202@gmx.net> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> <50051179.9040202@gmx.net> Message-ID: <1342879362.7422.12.camel@localhost> Am Dienstag, den 17.07.2012, 09:17 +0200 schrieb Carl-Daniel Hailfinger: > Second patch in the series. Error checking has not changed at all, and I > intend to fix that in a second spin of this patch. Right now I just want > to check if we're on the same page. > > Signed-off-by: Carl-Daniel Hailfinger > -struct pci_dev *pcidev_dev = NULL; Yeah! > if ((addr = pcidev_readbar(dev, bar)) != 0) { > - curaddr = addr; > - pcidev_dev = dev; > + found_dev = dev; > found++; > } I wonder what to do about this: While the goal of my suggestion was to decouple BAR access from the PCI device scan, it is an integral part of the scan loop, probably to avoid disabled chips (e.g. for onboard components that are not used). The nice property of the code as-is is that you can be sure reading the "primary" BAR will not fail. As we sometimes need two BARs, having one valid BAR does not mean the device is necessarily usable for us, so this check is only half of what we need. As already discussed on IRC, passing a set of BARs into this function is not really the direction we want to head to, so client code needs to be prepared to find unusable BARs anyway. Still, we like autoskip. Several ideas come to my mind - Use the PCI command word for autoskip - Implement a set-of-BAR (bitmask, array) anyway - Probe that all BARs (except ROM perhaps) that are not unused contain sensible values - Hand in a "is_usable" callback (a standard callback for testing a single BAR could be provided) All of these approaches of course complicate pcidev_init, but it seems like the only choices we have is: - do the BAR check the right way (TM) - loose the autoskip of disabled PCI devices Regards, Michael Karcher From flashrom at mkarcher.dialup.fu-berlin.de Sat Jul 21 16:19:52 2012 From: flashrom at mkarcher.dialup.fu-berlin.de (Michael Karcher) Date: Sat, 21 Jul 2012 16:19:52 +0200 Subject: [flashrom] [PATCH] Automatically release I/O permissions on shutdown In-Reply-To: <5005F9E0.50207@gmx.net> References: <5005F9E0.50207@gmx.net> Message-ID: <1342880392.7422.19.camel@localhost> Am Mittwoch, den 18.07.2012, 01:48 +0200 schrieb Carl-Daniel Hailfinger: > get_io_perms() is renamed to rget_io_perms() and automatically registers > a function to release I/O permissions on shutdown. Sounds like a good idea, but what happens if two threads use different programmers, both needing I/O permissions? You would need atomic reference counts on the io permissions to fix that. I don't claim the current code would not fail in spectecular ways on that use, but AFAIK this is something we want to achieve in the long run (see the flashctx stuff for example). Apart from that, it seems good. Do we want to use the chance and replace the exit(1) in get_io_perms by a return value? > Signed-off-by: Carl-Daniel Hailfinger Acked-by: Michael Karcher Regards, Michael Karcher From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 18:54:24 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 18:54:24 +0200 Subject: [flashrom] [PATCH] Document --output in the man page In-Reply-To: <1342860413.4048.4.camel@mattotaupa> References: <500A1361.5060008@gmx.net> <1342860413.4048.4.camel@mattotaupa> Message-ID: <500ADEC0.1080800@gmx.net> Am 21.07.2012 10:46 schrieb Paul Menzel: > Am Samstag, den 21.07.2012, 04:26 +0200 schrieb Carl-Daniel Hailfinger: >> Document --output in the man page. >> Add an examples section to the man page. >> >> Signed-off-by: Carl-Daniel Hailfinger >> >> Index: flashrom-logfile_manpage/flashrom.8 >> =================================================================== >> --- flashrom-logfile_manpage/flashrom.8 (Revision 1549) >> +++ flashrom-logfile_manpage/flashrom.8 (Arbeitskopie) >> @@ -220,6 +221,13 @@ >> .B "\-h, \-\-help" >> Show a help text and exit. >> .TP >> +.B "\-o, \-\-output " >> +Save a full debug log to > I am unsure about the ?a? in there. But I am no native speaker, so I > everything might be fine. Changed. > Acked-by: Paul Menzel Thanks for the review! New version. Document --output in the man page. Add an examples section to the man page. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Paul Menzel Index: flashrom-logfile_manpage/flashrom.8 =================================================================== --- flashrom-logfile_manpage/flashrom.8 (Revision 1549) +++ flashrom-logfile_manpage/flashrom.8 (Arbeitskopie) @@ -8,6 +8,7 @@ [\fB\-c\fR ] \ [\fB\-l\fR ] [\fB\-i\fR ] [\fB\-p\fR [:]] + [\fB-o\fR ] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -220,6 +221,13 @@ .B "\-h, \-\-help" Show a help text and exit. .TP +.B "\-o, \-\-output " +Save the full debug log to +.BR . +If the file already exists, it will be overwritten. This is the recommended +way to gather logs from flashrom because they will be verbose even if the +on-screen messages are not verbose. +.TP .B "\-R, \-\-version" Show version information and exit. .SH PROGRAMMER SPECIFIC INFO @@ -697,6 +705,25 @@ is the Linux device node for your SPI controller. .sp Please note that the linux_spi driver only works on Linux. +.SH EXAMPLES +To back up and update your BIOS, run +.sp +.B flashrom -p internal -r backup.rom -o backuplog.txt +.br +.B flashrom -p internal -w newbios.rom -o writelog.txt +.sp +Please make sure to copy backup.rom to some external media before you try +to write. That makes offline recovery easier. +.br +If writing fails and flashrom complains about the chip being in an unknown +state, you can try to restore the backup by running +.sp +.B flashrom -p internal -w backup.rom -o restorelog.txt +.sp +If you encounter any problems, please contact us and supply +backuplog.txt, writelog.txt and restorelog.txt. See section +.B BUGS +for contact info. .SH EXIT STATUS flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem (/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails. -- http://www.hailfinger.org/ From svn at flashrom.org Sat Jul 21 18:56:04 2012 From: svn at flashrom.org (repository service) Date: Sat, 21 Jul 2012 18:56:04 +0200 Subject: [flashrom] [commit] r1550 - trunk Message-ID: Author: hailfinger Date: Sat Jul 21 18:56:04 2012 New Revision: 1550 URL: http://flashrom.org/trac/flashrom/changeset/1550 Log: Document --output in the man page. Add an examples section to the man page. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Paul Menzel Modified: trunk/flashrom.8 Modified: trunk/flashrom.8 ============================================================================== --- trunk/flashrom.8 Fri Jul 20 22:35:14 2012 (r1549) +++ trunk/flashrom.8 Sat Jul 21 18:56:04 2012 (r1550) @@ -8,6 +8,7 @@ [\fB\-c\fR ] \ [\fB\-l\fR ] [\fB\-i\fR ] [\fB\-p\fR [:]] + [\fB-o\fR ] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -220,6 +221,13 @@ .B "\-h, \-\-help" Show a help text and exit. .TP +.B "\-o, \-\-output " +Save the full debug log to +.BR . +If the file already exists, it will be overwritten. This is the recommended +way to gather logs from flashrom because they will be verbose even if the +on-screen messages are not verbose. +.TP .B "\-R, \-\-version" Show version information and exit. .SH PROGRAMMER SPECIFIC INFO @@ -697,6 +705,25 @@ is the Linux device node for your SPI controller. .sp Please note that the linux_spi driver only works on Linux. +.SH EXAMPLES +To back up and update your BIOS, run +.sp +.B flashrom -p internal -r backup.rom -o backuplog.txt +.br +.B flashrom -p internal -w newbios.rom -o writelog.txt +.sp +Please make sure to copy backup.rom to some external media before you try +to write. That makes offline recovery easier. +.br +If writing fails and flashrom complains about the chip being in an unknown +state, you can try to restore the backup by running +.sp +.B flashrom -p internal -w backup.rom -o restorelog.txt +.sp +If you encounter any problems, please contact us and supply +backuplog.txt, writelog.txt and restorelog.txt. See section +.B BUGS +for contact info. .SH EXIT STATUS flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem (/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails. From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 18:56:27 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 18:56:27 +0200 Subject: [flashrom] [PATCH] Document --output in the man page In-Reply-To: <500ADEC0.1080800@gmx.net> References: <500A1361.5060008@gmx.net> <1342860413.4048.4.camel@mattotaupa> <500ADEC0.1080800@gmx.net> Message-ID: <500ADF3B.3000303@gmx.net> Am 21.07.2012 18:54 schrieb Carl-Daniel Hailfinger: > Document --output in the man page. > Add an examples section to the man page. > > > Signed-off-by: Carl-Daniel Hailfinger > Acked-by: Paul Menzel Committed in r1550. Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 19:26:50 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 19:26:50 +0200 Subject: [flashrom] [PATCH] Automatically release I/O permissions on shutdown In-Reply-To: <1342880392.7422.19.camel@localhost> References: <5005F9E0.50207@gmx.net> <1342880392.7422.19.camel@localhost> Message-ID: <500AE65A.1000802@gmx.net> Am 21.07.2012 16:19 schrieb Michael Karcher: > Am Mittwoch, den 18.07.2012, 01:48 +0200 schrieb Carl-Daniel Hailfinger: >> get_io_perms() is renamed to rget_io_perms() and automatically registers >> a function to release I/O permissions on shutdown. > Sounds like a good idea, but what happens if two threads use different > programmers, both needing I/O permissions? You would need atomic > reference counts on the io permissions to fix that. I don't claim the > current code would not fail in spectecular ways on that use, but AFAIK > this is something we want to achieve in the long run (see the flashctx > stuff for example). I expect the current code to explode spectacularly if two or more flashrom/libflashrom instances are active at the same time, regardless of whether they are separate processes or just separate threads. External programmers with their own timing (i.e. not the busy loop we use right now) may even work with one (lib)flashrom process per device, but there is a lot of work to do before we can even think of multithreaded use of libflashrom, and we have to check all external libraries (libusb etc) to find out if they are thread-safe as well. > Apart from that, it seems good. > > Do we want to use the chance and replace the exit(1) in get_io_perms by > a return value? Yes, will do that. >> Signed-off-by: Carl-Daniel Hailfinger > Acked-by: Michael Karcher Thanks for the review. New version. get_io_perms() is renamed to rget_io_perms() and automatically registers a function to release I/O permissions on shutdown. Actually release I/O permissions on Solaris and iopl()-supporting operating systems like Linux. This patch fixes quite a few programmers which forgot to release I/O permissions on shutdown, and it simplifies the shutdown and error handling code for all others. Do not call exit(1) if I/O permissions are denied and return an error instead. Patch by Niklas S?derlund. Signed-off-by: Carl-Daniel Hailfinger Signed-off-by: Niklas S?derlund Acked-by: Michael Karcher Index: flashrom-auto_release_io_perms/ogp_spi.c =================================================================== --- flashrom-auto_release_io_perms/ogp_spi.c (Revision 1550) +++ flashrom-auto_release_io_perms/ogp_spi.c (Arbeitskopie) @@ -99,7 +99,6 @@ { physunmap(ogp_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -129,7 +128,8 @@ return 1; } - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); Index: flashrom-auto_release_io_perms/hwaccess.c =================================================================== --- flashrom-auto_release_io_perms/hwaccess.c (Revision 1550) +++ flashrom-auto_release_io_perms/hwaccess.c (Arbeitskopie) @@ -45,11 +45,27 @@ int io_fd; #endif -void get_io_perms(void) +int release_io_perms(void *p) { #if defined(__DJGPP__) || defined(__LIBPAYLOAD__) +#else +#if defined (__sun) && (defined(__i386) || defined(__amd64)) + sysi86(SI86V86, V86SC_IOPL, 0); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined (__DragonFly__) + close(io_fd); +#else + iopl(0); +#endif +#endif + return 0; +} + +/* Get I/O permissions with automatic permission release on shutdown. */ +int rget_io_perms(void) +{ +#if defined(__DJGPP__) || defined(__LIBPAYLOAD__) /* We have full permissions by default. */ - return; + return 0; #else #if defined (__sun) && (defined(__i386) || defined(__amd64)) if (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) != 0) { @@ -65,18 +81,14 @@ "and reboot, or reboot into \n"); msg_perr("single user mode.\n"); #endif - exit(1); + return 1; + } else { + register_shutdown(release_io_perms, NULL); } + return 0; #endif } -void release_io_perms(void) -{ -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) - close(io_fd); -#endif -} - #elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) static inline void sync_primitive(void) @@ -89,15 +101,11 @@ } /* PCI port I/O is not yet implemented on PowerPC. */ -void get_io_perms(void) +int rget_io_perms(void) { + return 0; } -/* PCI port I/O is not yet implemented on PowerPC. */ -void release_io_perms(void) -{ -} - #elif defined (__mips) || defined (__mips__) || defined (_mips) || defined (mips) /* sync primitive is not needed because /dev/mem on MIPS uses uncached accesses @@ -108,29 +116,22 @@ } /* PCI port I/O is not yet implemented on MIPS. */ -void get_io_perms(void) +int rget_io_perms(void) { + return 0; } -/* PCI port I/O is not yet implemented on MIPS. */ -void release_io_perms(void) -{ -} - #elif defined (__arm__) static inline void sync_primitive(void) { } -void get_io_perms(void) +int rget_io_perms(void) { + return 0; } -void release_io_perms(void) -{ -} - #else #error Unknown architecture Index: flashrom-auto_release_io_perms/drkaiser.c =================================================================== --- flashrom-auto_release_io_perms/drkaiser.c (Revision 1550) +++ flashrom-auto_release_io_perms/drkaiser.c (Arbeitskopie) @@ -60,7 +60,6 @@ physunmap(drkaiser_bar, DRKAISER_MEMMAP_SIZE); /* Flash write is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; }; @@ -68,7 +67,8 @@ { uint32_t addr; - get_io_perms(); + if (rget_io_perms()) + return 1; addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); Index: flashrom-auto_release_io_perms/gfxnvidia.c =================================================================== --- flashrom-auto_release_io_perms/gfxnvidia.c (Revision 1550) +++ flashrom-auto_release_io_perms/gfxnvidia.c (Arbeitskopie) @@ -84,7 +84,6 @@ * by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -92,7 +91,8 @@ { uint32_t reg32; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); Index: flashrom-auto_release_io_perms/nicrealtek.c =================================================================== --- flashrom-auto_release_io_perms/nicrealtek.c (Revision 1550) +++ flashrom-auto_release_io_perms/nicrealtek.c (Arbeitskopie) @@ -56,13 +56,13 @@ { /* FIXME: We forgot to disable software access again. */ pci_cleanup(pacc); - release_io_perms(); return 0; } int nicrealtek_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); Index: flashrom-auto_release_io_perms/satamv.c =================================================================== --- flashrom-auto_release_io_perms/satamv.c (Revision 1550) +++ flashrom-auto_release_io_perms/satamv.c (Arbeitskopie) @@ -61,7 +61,6 @@ { physunmap(mv_bar, 0x20000); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -86,7 +85,8 @@ uintptr_t addr; uint32_t tmp; - get_io_perms(); + if (rget_io_perms()) + return 1; /* BAR0 has all internal registers memory mapped. */ /* No need to check for errors, pcidev_init() will not return in case @@ -162,7 +162,6 @@ error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Index: flashrom-auto_release_io_perms/internal.c =================================================================== --- flashrom-auto_release_io_perms/internal.c (Revision 1550) +++ flashrom-auto_release_io_perms/internal.c (Arbeitskopie) @@ -159,7 +159,6 @@ static int internal_shutdown(void *data) { - release_io_perms(); return 0; } @@ -226,7 +225,8 @@ } free(arg); - get_io_perms(); + if (rget_io_perms()) + return 1; if (register_shutdown(internal_shutdown, NULL)) return 1; Index: flashrom-auto_release_io_perms/nicintel_spi.c =================================================================== --- flashrom-auto_release_io_perms/nicintel_spi.c (Revision 1550) +++ flashrom-auto_release_io_perms/nicintel_spi.c (Arbeitskopie) @@ -159,7 +159,6 @@ physunmap(nicintel_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -168,7 +167,8 @@ { uint32_t tmp; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); Index: flashrom-auto_release_io_perms/nicnatsemi.c =================================================================== --- flashrom-auto_release_io_perms/nicnatsemi.c (Revision 1550) +++ flashrom-auto_release_io_perms/nicnatsemi.c (Arbeitskopie) @@ -54,13 +54,13 @@ static int nicnatsemi_shutdown(void *data) { pci_cleanup(pacc); - release_io_perms(); return 0; } int nicnatsemi_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); Index: flashrom-auto_release_io_perms/rayer_spi.c =================================================================== --- flashrom-auto_release_io_perms/rayer_spi.c (Revision 1550) +++ flashrom-auto_release_io_perms/rayer_spi.c (Arbeitskopie) @@ -168,7 +168,8 @@ rayer_miso_bit = 4; } - get_io_perms(); + if (rget_io_perms()) + return 1; /* Get the initial value before writing to any line. */ lpt_outbyte = INB(lpt_iobase); Index: flashrom-auto_release_io_perms/atahpt.c =================================================================== --- flashrom-auto_release_io_perms/atahpt.c (Revision 1550) +++ flashrom-auto_release_io_perms/atahpt.c (Arbeitskopie) @@ -60,7 +60,6 @@ { /* Flash access is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -68,7 +67,8 @@ { uint32_t reg32; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); Index: flashrom-auto_release_io_perms/nic3com.c =================================================================== --- flashrom-auto_release_io_perms/nic3com.c (Revision 1550) +++ flashrom-auto_release_io_perms/nic3com.c (Arbeitskopie) @@ -82,13 +82,13 @@ } pci_cleanup(pacc); - release_io_perms(); return 0; } int nic3com_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); Index: flashrom-auto_release_io_perms/satasii.c =================================================================== --- flashrom-auto_release_io_perms/satasii.c (Revision 1550) +++ flashrom-auto_release_io_perms/satasii.c (Arbeitskopie) @@ -62,7 +62,6 @@ { physunmap(sii_bar, SATASII_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -71,7 +70,8 @@ uint32_t addr; uint16_t reg_offset; - get_io_perms(); + if (rget_io_perms()) + return 1; pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); Index: flashrom-auto_release_io_perms/nicintel.c =================================================================== --- flashrom-auto_release_io_perms/nicintel.c (Revision 1550) +++ flashrom-auto_release_io_perms/nicintel.c (Arbeitskopie) @@ -64,7 +64,6 @@ physunmap(nicintel_control_bar, NICINTEL_CONTROL_MEMMAP_SIZE); physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -73,9 +72,10 @@ uintptr_t addr; /* Needed only for PCI accesses on some platforms. - * FIXME: Refactor that into get_mem_perms/get_io_perms/get_pci_perms? + * FIXME: Refactor that into get_mem_perms/rget_io_perms/get_pci_perms? */ - get_io_perms(); + if (rget_io_perms()) + return 1; /* No need to check for errors, pcidev_init() will not return in case * of errors. @@ -118,7 +118,6 @@ physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Index: flashrom-auto_release_io_perms/programmer.h =================================================================== --- flashrom-auto_release_io_perms/programmer.h (Revision 1550) +++ flashrom-auto_release_io_perms/programmer.h (Arbeitskopie) @@ -302,8 +302,7 @@ struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, uint16_t card_vendor, uint16_t card_device); #endif -void get_io_perms(void); -void release_io_perms(void); +int rget_io_perms(void); #if CONFIG_INTERNAL == 1 extern int is_laptop; extern int laptop_ok; -- http://www.hailfinger.org/ From svn at flashrom.org Sat Jul 21 19:27:09 2012 From: svn at flashrom.org (repository service) Date: Sat, 21 Jul 2012 19:27:09 +0200 Subject: [flashrom] [commit] r1551 - trunk Message-ID: Author: hailfinger Date: Sat Jul 21 19:27:08 2012 New Revision: 1551 URL: http://flashrom.org/trac/flashrom/changeset/1551 Log: Automatically release I/O permissions on shutdown. get_io_perms() is renamed to rget_io_perms() and automatically registers a function to release I/O permissions on shutdown. Actually release I/O permissions on Solaris and iopl()-supporting operating systems like Linux. This patch fixes quite a few programmers which forgot to release I/O permissions on shutdown, and it simplifies the shutdown and error handling code for all others. Do not call exit(1) if I/O permissions are denied and return an error instead. This part of the patch was written by Niklas S?derlund. Signed-off-by: Carl-Daniel Hailfinger Signed-off-by: Niklas S?derlund Acked-by: Michael Karcher Modified: trunk/atahpt.c trunk/drkaiser.c trunk/gfxnvidia.c trunk/hwaccess.c trunk/internal.c trunk/nic3com.c trunk/nicintel.c trunk/nicintel_spi.c trunk/nicnatsemi.c trunk/nicrealtek.c trunk/ogp_spi.c trunk/programmer.h trunk/rayer_spi.c trunk/satamv.c trunk/satasii.c Modified: trunk/atahpt.c ============================================================================== --- trunk/atahpt.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/atahpt.c Sat Jul 21 19:27:08 2012 (r1551) @@ -60,7 +60,6 @@ { /* Flash access is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -68,7 +67,8 @@ { uint32_t reg32; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_4, ata_hpt); Modified: trunk/drkaiser.c ============================================================================== --- trunk/drkaiser.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/drkaiser.c Sat Jul 21 19:27:08 2012 (r1551) @@ -60,7 +60,6 @@ physunmap(drkaiser_bar, DRKAISER_MEMMAP_SIZE); /* Flash write is disabled automatically by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; }; @@ -68,7 +67,8 @@ { uint32_t addr; - get_io_perms(); + if (rget_io_perms()) + return 1; addr = pcidev_init(PCI_BASE_ADDRESS_2, drkaiser_pcidev); Modified: trunk/gfxnvidia.c ============================================================================== --- trunk/gfxnvidia.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/gfxnvidia.c Sat Jul 21 19:27:08 2012 (r1551) @@ -84,7 +84,6 @@ * by PCI restore. */ pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -92,7 +91,8 @@ { uint32_t reg32; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, gfx_nvidia); Modified: trunk/hwaccess.c ============================================================================== --- trunk/hwaccess.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/hwaccess.c Sat Jul 21 19:27:08 2012 (r1551) @@ -45,11 +45,27 @@ int io_fd; #endif -void get_io_perms(void) +int release_io_perms(void *p) +{ +#if defined(__DJGPP__) || defined(__LIBPAYLOAD__) +#else +#if defined (__sun) && (defined(__i386) || defined(__amd64)) + sysi86(SI86V86, V86SC_IOPL, 0); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined (__DragonFly__) + close(io_fd); +#else + iopl(0); +#endif +#endif + return 0; +} + +/* Get I/O permissions with automatic permission release on shutdown. */ +int rget_io_perms(void) { #if defined(__DJGPP__) || defined(__LIBPAYLOAD__) /* We have full permissions by default. */ - return; + return 0; #else #if defined (__sun) && (defined(__i386) || defined(__amd64)) if (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) != 0) { @@ -65,15 +81,11 @@ "and reboot, or reboot into \n"); msg_perr("single user mode.\n"); #endif - exit(1); + return 1; + } else { + register_shutdown(release_io_perms, NULL); } -#endif -} - -void release_io_perms(void) -{ -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) - close(io_fd); + return 0; #endif } @@ -89,13 +101,9 @@ } /* PCI port I/O is not yet implemented on PowerPC. */ -void get_io_perms(void) -{ -} - -/* PCI port I/O is not yet implemented on PowerPC. */ -void release_io_perms(void) +int rget_io_perms(void) { + return 0; } #elif defined (__mips) || defined (__mips__) || defined (_mips) || defined (mips) @@ -108,13 +116,9 @@ } /* PCI port I/O is not yet implemented on MIPS. */ -void get_io_perms(void) -{ -} - -/* PCI port I/O is not yet implemented on MIPS. */ -void release_io_perms(void) +int rget_io_perms(void) { + return 0; } #elif defined (__arm__) @@ -123,12 +127,9 @@ { } -void get_io_perms(void) -{ -} - -void release_io_perms(void) +int rget_io_perms(void) { + return 0; } #else Modified: trunk/internal.c ============================================================================== --- trunk/internal.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/internal.c Sat Jul 21 19:27:08 2012 (r1551) @@ -159,7 +159,6 @@ static int internal_shutdown(void *data) { - release_io_perms(); return 0; } @@ -226,7 +225,8 @@ } free(arg); - get_io_perms(); + if (rget_io_perms()) + return 1; if (register_shutdown(internal_shutdown, NULL)) return 1; Modified: trunk/nic3com.c ============================================================================== --- trunk/nic3com.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/nic3com.c Sat Jul 21 19:27:08 2012 (r1551) @@ -82,13 +82,13 @@ } pci_cleanup(pacc); - release_io_perms(); return 0; } int nic3com_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_3com); Modified: trunk/nicintel.c ============================================================================== --- trunk/nicintel.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/nicintel.c Sat Jul 21 19:27:08 2012 (r1551) @@ -64,7 +64,6 @@ physunmap(nicintel_control_bar, NICINTEL_CONTROL_MEMMAP_SIZE); physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -73,9 +72,10 @@ uintptr_t addr; /* Needed only for PCI accesses on some platforms. - * FIXME: Refactor that into get_mem_perms/get_io_perms/get_pci_perms? + * FIXME: Refactor that into get_mem_perms/rget_io_perms/get_pci_perms? */ - get_io_perms(); + if (rget_io_perms()) + return 1; /* No need to check for errors, pcidev_init() will not return in case * of errors. @@ -118,7 +118,6 @@ physunmap(nicintel_bar, NICINTEL_MEMMAP_SIZE); error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Modified: trunk/nicintel_spi.c ============================================================================== --- trunk/nicintel_spi.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/nicintel_spi.c Sat Jul 21 19:27:08 2012 (r1551) @@ -159,7 +159,6 @@ physunmap(nicintel_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -168,7 +167,8 @@ { uint32_t tmp; - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_intel_spi); Modified: trunk/nicnatsemi.c ============================================================================== --- trunk/nicnatsemi.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/nicnatsemi.c Sat Jul 21 19:27:08 2012 (r1551) @@ -54,13 +54,13 @@ static int nicnatsemi_shutdown(void *data) { pci_cleanup(pacc); - release_io_perms(); return 0; } int nicnatsemi_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_natsemi); Modified: trunk/nicrealtek.c ============================================================================== --- trunk/nicrealtek.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/nicrealtek.c Sat Jul 21 19:27:08 2012 (r1551) @@ -56,13 +56,13 @@ { /* FIXME: We forgot to disable software access again. */ pci_cleanup(pacc); - release_io_perms(); return 0; } int nicrealtek_init(void) { - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, nics_realtek); Modified: trunk/ogp_spi.c ============================================================================== --- trunk/ogp_spi.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/ogp_spi.c Sat Jul 21 19:27:08 2012 (r1551) @@ -99,7 +99,6 @@ { physunmap(ogp_spibar, 4096); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -129,7 +128,8 @@ return 1; } - get_io_perms(); + if (rget_io_perms()) + return 1; io_base_addr = pcidev_init(PCI_BASE_ADDRESS_0, ogp_spi); Modified: trunk/programmer.h ============================================================================== --- trunk/programmer.h Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/programmer.h Sat Jul 21 19:27:08 2012 (r1551) @@ -302,8 +302,7 @@ struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, uint16_t card_vendor, uint16_t card_device); #endif -void get_io_perms(void); -void release_io_perms(void); +int rget_io_perms(void); #if CONFIG_INTERNAL == 1 extern int is_laptop; extern int laptop_ok; Modified: trunk/rayer_spi.c ============================================================================== --- trunk/rayer_spi.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/rayer_spi.c Sat Jul 21 19:27:08 2012 (r1551) @@ -168,7 +168,8 @@ rayer_miso_bit = 4; } - get_io_perms(); + if (rget_io_perms()) + return 1; /* Get the initial value before writing to any line. */ lpt_outbyte = INB(lpt_iobase); Modified: trunk/satamv.c ============================================================================== --- trunk/satamv.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/satamv.c Sat Jul 21 19:27:08 2012 (r1551) @@ -61,7 +61,6 @@ { physunmap(mv_bar, 0x20000); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -86,7 +85,8 @@ uintptr_t addr; uint32_t tmp; - get_io_perms(); + if (rget_io_perms()) + return 1; /* BAR0 has all internal registers memory mapped. */ /* No need to check for errors, pcidev_init() will not return in case @@ -162,7 +162,6 @@ error_out: pci_cleanup(pacc); - release_io_perms(); return 1; } Modified: trunk/satasii.c ============================================================================== --- trunk/satasii.c Sat Jul 21 18:56:04 2012 (r1550) +++ trunk/satasii.c Sat Jul 21 19:27:08 2012 (r1551) @@ -62,7 +62,6 @@ { physunmap(sii_bar, SATASII_MEMMAP_SIZE); pci_cleanup(pacc); - release_io_perms(); return 0; } @@ -71,7 +70,8 @@ uint32_t addr; uint16_t reg_offset; - get_io_perms(); + if (rget_io_perms()) + return 1; pcidev_init(PCI_BASE_ADDRESS_0, satas_sii); From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 19:29:09 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 19:29:09 +0200 Subject: [flashrom] [PATCH] remove exit call from get_id_perms In-Reply-To: <1341694640-18934-1-git-send-email-niso@kth.se> References: <1341694640-18934-1-git-send-email-niso@kth.se> Message-ID: <500AE6E5.3010709@gmx.net> Am 07.07.2012 22:57 schrieb Niklas S?derlund: > In order to remove the exit call in the get_ip_perm function the > function needs to return a value indicating success or failure. This > patch adds such return value and make all callers check for it. > > Signed-off-by: Niklas S?derlund Thanks for your patch! Acked-by: Carl-Daniel Hailfinger I modified it slightly to handle the new rget_io_perms function name. Committed as part of r1551. Regards, Carl-Daniel -- http://www.hailfinger.org/ From andrew at ncrmnt.org Sat Jul 21 22:10:34 2012 From: andrew at ncrmnt.org (andrew at ncrmnt.org) Date: Sun, 22 Jul 2012 00:10:34 +0400 Subject: [flashrom] EN25QH16 (2MiB) READ/PROBE success Message-ID: <1733891342901434@web8e.yandex.ru> Hello, Just reporting a chip marked as UNTESTED as working. Checked: Probe, Read. Write untested, read produced good bootable results. Used buspirate_spi programmer. Log attached. Regards, Andrew. -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: EN25QH16.read.log URL: From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 21 23:30:53 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 21 Jul 2012 23:30:53 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <5009E104.7010204@gmx.net> References: <4FF63F43.5090603@gmx.net> <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> <50048776.6020603@gmx.net> <201207162242.q6GMgZKK024553@mail2.student.tuwien.ac.at> <5009E104.7010204@gmx.net> Message-ID: <500B1F8D.1090605@gmx.net> New version. Always require the --programmer parameter on the command line if any flash chip access (probe/read/write/erase/...) is requested. Fix a few man page oddities as well. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Stefan Tauner Index: flashrom-programmer_no_default/cli_classic.c =================================================================== --- flashrom-programmer_no_default/cli_classic.c (Revision 1551) +++ flashrom-programmer_no_default/cli_classic.c (Arbeitskopie) @@ -31,87 +31,20 @@ #include "flashchips.h" #include "programmer.h" -#if CONFIG_INTERNAL == 1 -static enum programmer default_programmer = PROGRAMMER_INTERNAL; -#elif CONFIG_DUMMY == 1 -static enum programmer default_programmer = PROGRAMMER_DUMMY; -#else -/* If neither internal nor dummy are selected, we must pick a sensible default. - * Since there is no reason to prefer a particular external programmer, we fail - * if more than one of them is selected. If only one is selected, it is clear - * that the user wants that one to become the default. - */ -#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 -#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. -#endif -static enum programmer default_programmer = -#if CONFIG_NIC3COM == 1 - PROGRAMMER_NIC3COM -#endif -#if CONFIG_NICREALTEK == 1 - PROGRAMMER_NICREALTEK -#endif -#if CONFIG_NICNATSEMI == 1 - PROGRAMMER_NICNATSEMI -#endif -#if CONFIG_GFXNVIDIA == 1 - PROGRAMMER_GFXNVIDIA -#endif -#if CONFIG_DRKAISER == 1 - PROGRAMMER_DRKAISER -#endif -#if CONFIG_SATASII == 1 - PROGRAMMER_SATASII -#endif -#if CONFIG_ATAHPT == 1 - PROGRAMMER_ATAHPT -#endif -#if CONFIG_FT2232_SPI == 1 - PROGRAMMER_FT2232_SPI -#endif -#if CONFIG_SERPROG == 1 - PROGRAMMER_SERPROG -#endif -#if CONFIG_BUSPIRATE_SPI == 1 - PROGRAMMER_BUSPIRATE_SPI -#endif -#if CONFIG_DEDIPROG == 1 - PROGRAMMER_DEDIPROG -#endif -#if CONFIG_RAYER_SPI == 1 - PROGRAMMER_RAYER_SPI -#endif -#if CONFIG_NICINTEL == 1 - PROGRAMMER_NICINTEL -#endif -#if CONFIG_NICINTEL_SPI == 1 - PROGRAMMER_NICINTEL_SPI -#endif -#if CONFIG_OGP_SPI == 1 - PROGRAMMER_OGP_SPI -#endif -#if CONFIG_SATAMV == 1 - PROGRAMMER_SATAMV -#endif -#if CONFIG_LINUX_SPI == 1 - PROGRAMMER_LINUX_SPI -#endif -; -#endif - static void cli_classic_usage(const char *name) { - printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|" + printf("Usage: flashrom [-h|-R|-L|" #if CONFIG_PRINT_WIKI == 1 - "-z|" + "-z|" #endif - "-E|-r |-w |-v ]\n" - " [-c ] [-l ] [-o ]\n" - " [-i ] [-p [:]]\n\n"); + "-p [:]\n" + " [-E|-r |-w |-v ] [-c ]\n" + " [-l [-i ]] [-n] [-f]]\n" + " [-V[V[V]]] [-o ]\n\n"); printf("Please note that the command line interface for flashrom has " "changed between\n" - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" "Do not use flashrom in scripts or other automated tools " "without checking\n" "that your flashrom version won't interpret options in a " @@ -360,8 +293,9 @@ } } if (prog == PROGRAMMER_INVALID) { - fprintf(stderr, "Error: Unknown programmer " - "%s.\n", optarg); + fprintf(stderr, "Error: Unknown programmer \"%s\". Valid choices are:\n", + optarg); + list_programmers_linebreak(0, 80, 0); cli_classic_abort_usage(); } break; @@ -468,8 +402,13 @@ flash = NULL; } - if (prog == PROGRAMMER_INVALID) - prog = default_programmer; + if (prog == PROGRAMMER_INVALID) { + msg_perr("Please select a programmer with the --programmer parameter.\n" + "Valid choices are:\n"); + list_programmers_linebreak(0, 80, 0); + ret = 1; + goto out; + } /* FIXME: Delay calibration should happen in programmer code. */ myusec_calibrate_delay(); Index: flashrom-programmer_no_default/flashrom.8 =================================================================== --- flashrom-programmer_no_default/flashrom.8 (Revision 1551) +++ flashrom-programmer_no_default/flashrom.8 (Arbeitskopie) @@ -2,13 +2,12 @@ .SH NAME flashrom \- detect, read, write, verify and erase flash chips .SH SYNOPSIS -.B flashrom \fR[\fB\-n\fR] [\fB\-V\fR] [\fB\-f\fR] [\fB\-h\fR|\fB\-R\fR|\ -\fB\-L\fR|\fB\-z\fR|\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\ -\fB\-v\fR ] - [\fB\-c\fR ] \ -[\fB\-l\fR ] - [\fB\-i\fR ] [\fB\-p\fR [:]] - [\fB-o\fR ] +.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|\ +\fB\-p\fR [:] + [\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\fB\-v\fR ] \ +[\fB\-c\fR ] + [\fB\-l\fR [\fB\-i\fR ]] [\fB\-n\fR] [\fB\-f\fR]] + [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR ] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -64,7 +63,7 @@ feel that the time for verification takes too long. .sp Typical usage is: -.B "flashrom \-n \-w " +.B "flashrom \-p prog \-n \-w " .sp This option is only useful in combination with .BR \-\-write . @@ -106,31 +105,39 @@ .BR . .sp flashrom supports ROM layouts. This allows you to flash certain parts of -the flash chip only. A ROM layout file looks like follows: +the flash chip only. A ROM layout file contains multiple lines with the +following syntax: .sp +.B " startaddr:endaddr imagename" +.sp +.BR "startaddr " "and " "endaddr " +are hexadecimal addresses within the ROM file and do not refer to any +physical address. Please note that using a 0x prefix for those hexadecimal +numbers is not necessary, but you can't specify decimal/octal numbers. +.BR "imagename " "is an arbitrary name for the region/image from" +.BR " startaddr " "to " "endaddr " "(both addresses included)." +.sp +Example: +.sp 00000000:00008fff gfxrom 00009000:0003ffff normal 00040000:0007ffff fallback .sp - i.e.: - startaddr:endaddr name +If you only want to update the image named +.BR "normal " "in a ROM based on the layout above, run" .sp -All addresses are offsets within the file, not absolute addresses! -If you only want to update the normal image in a ROM you can say: +.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w some.rom" .sp -.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" +To update only the images named +.BR "normal " "and " "fallback" ", run:" .sp -To update normal and fallback but leave the VGA BIOS alone, say: +.B " flashrom \-p prog \-l rom.layout \-i normal -i fallback \-w some.rom" .sp -.B " flashrom \-l rom.layout \-i normal \" -.br -.B " \-i fallback \-w agami_aruma.rom" -.sp -Currently overlapping sections are not supported. +Overlapping sections are not supported. .TP -.B "\-i, \-\-image " -Only flash image -.B +.B "\-i, \-\-image " +Only flash region/image +.B from flash layout. .TP .B "\-L, \-\-list\-supported" @@ -156,7 +163,8 @@ Please note that MediaWiki output is not compiled in by default. .TP .B "\-p, \-\-programmer [:parameter[,parameter[,parameter]]]" -Specify the programmer device. Currently supported are: +Specify the programmer device. This is mandatory for all operations +involving any chip access (probe/read/write/...). Currently supported are: .sp .BR "* internal" " (default, for in-system flashing in the mainboard)" .sp @@ -330,7 +338,8 @@ .sp .B " flashrom \-p internal:ich_spi_mode=value" .sp -syntax where value can be +syntax where +.BR "value " "can be" .BR auto ", " swseq " or " hwseq . By default .RB "(or when setting " ich_spi_mode=auto ) @@ -360,7 +369,9 @@ .sp .B " flashrom \-p internal:fwh_idsel=value" .sp -syntax where value is the 48-bit hexadecimal raw value to be written in the +syntax where +.B value +is the 48-bit hexadecimal raw value to be written in the IDSEL registers of the Intel southbridge. The upper 32 bits use one hex digit each per 512 kB range between 0xffc00000 and 0xffffffff, and the lower 16 bits use one hex digit each per 1024 kB range between 0xff400000 and 0xff7fffff. @@ -486,7 +497,9 @@ .sp .B " flashrom -p dummy:spi_blacklist=commandlist" .sp -syntax where commandlist is a list of two-digit hexadecimal representations of +syntax where +.B commandlist +is a list of two-digit hexadecimal representations of SPI commands. If commandlist is e.g. 0302, flashrom will behave as if the SPI controller refuses to run command 0x03 (READ) and command 0x02 (WRITE). commandlist may be up to 512 characters (256 commands) long. @@ -500,7 +513,9 @@ .sp .B " flashrom -p dummy:spi_ignorelist=commandlist" .sp -syntax where commandlist is a list of two-digit hexadecimal representations of +syntax where +.B commandlist +is a list of two-digit hexadecimal representations of SPI commands. If commandlist is e.g. 0302, the emulated flash chip will ignore command 0x03 (READ) and command 0x02 (WRITE). commandlist may be up to 512 characters (256 commands) long. @@ -513,7 +528,9 @@ .sp .B " flashrom -p dummy:spi_status=content" .sp -syntax where content is an 8-bit hexadecimal value. +syntax where +.B content +is an 8-bit hexadecimal value. .SS .BR "nic3com" , " nicrealtek" , " nicsmc1211" , " nicnatsemi" , " nicintel\ " , " nicintel_spi" , " gfxnvidia" , " ogp_spi" , " drkaiser" , " satasii\ Index: flashrom-programmer_no_default/flashrom.c =================================================================== --- flashrom-programmer_no_default/flashrom.c (Revision 1551) +++ flashrom-programmer_no_default/flashrom.c (Arbeitskopie) @@ -59,6 +59,10 @@ /* Is writing allowed with this programmer? */ int programmer_may_write; +#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 +#error You have to enable at least one programmer! +#endif + const struct programmer_entry programmer_table[] = { #if CONFIG_INTERNAL == 1 { -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Sun Jul 22 04:39:25 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sun, 22 Jul 2012 04:39:25 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <1342879362.7422.12.camel@localhost> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> <50051179.9040202@gmx.net> <1342879362.7422.12.camel@localhost> Message-ID: <500B67DD.6050200@gmx.net> Am 21.07.2012 16:02 schrieb Michael Karcher: > Am Dienstag, den 17.07.2012, 09:17 +0200 schrieb Carl-Daniel Hailfinger: > >> Second patch in the series. Error checking has not changed at all, and I >> intend to fix that in a second spin of this patch. Right now I just want >> to check if we're on the same page. Actually, I plan to commit the error checking change separately because Niklas S?derlund already sent a patch doing that. >> Signed-off-by: Carl-Daniel Hailfinger > >> -struct pci_dev *pcidev_dev = NULL; > Yeah! > >> if ((addr = pcidev_readbar(dev, bar)) != 0) { >> - curaddr = addr; >> - pcidev_dev = dev; >> + found_dev = dev; >> found++; >> } > I wonder what to do about this: While the goal of my suggestion was to > decouple BAR access from the PCI device scan, it is an integral part of > the scan loop, probably to avoid disabled chips (e.g. for onboard > components that are not used). Intel dual port NICs are represented by two PCI devices, but only one of them has an active BAR for our purposes. It would be unfair of us to have users guess the right PCI device. > The nice property of the code as-is is > that you can be sure reading the "primary" BAR will not fail. > > As we sometimes need two BARs, having one valid BAR does not mean the > device is necessarily usable for us, so this check is only half of what > we need. As already discussed on IRC, passing a set of BARs into this > function is not really the direction we want to head to, so client code > needs to be prepared to find unusable BARs anyway. Still, we like > autoskip. Several ideas come to my mind > - Use the PCI command word for autoskip How would that work? > - Implement a set-of-BAR (bitmask, array) anyway Depending on the PCI header type, BARs can be at completely different locations. Still, set-of-BAR sounds like a good idea. > - Probe that all BARs (except ROM perhaps) that are not unused contain > sensible values How do we determine which values are sensible? > - Hand in a "is_usable" callback (a standard callback for testing a > single BAR could be provided) Do you really trust new driver authors to get that right? > All of these approaches of course complicate pcidev_init, but it seems > like the only choices we have is: > - do the BAR check the right way (TM) > - lose the autoskip of disabled PCI devices Or we handle this in a completely different way...not sure how, but maybe there really is some magic third way. Regards, Carl-Daniel -- http://www.hailfinger.org/ From svn at flashrom.org Sun Jul 22 14:01:43 2012 From: svn at flashrom.org (repository service) Date: Sun, 22 Jul 2012 14:01:43 +0200 Subject: [flashrom] [commit] r1552 - trunk Message-ID: Author: hailfinger Date: Sun Jul 22 14:01:43 2012 New Revision: 1552 URL: http://flashrom.org/trac/flashrom/changeset/1552 Log: Always require the --programmer parameter on the command line if any flash chip access (probe/read/write/erase/...) is requested. Fix a few man page oddities as well. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Stefan Tauner Modified: trunk/cli_classic.c trunk/flashrom.8 trunk/flashrom.c Modified: trunk/cli_classic.c ============================================================================== --- trunk/cli_classic.c Sat Jul 21 19:27:08 2012 (r1551) +++ trunk/cli_classic.c Sun Jul 22 14:01:43 2012 (r1552) @@ -31,87 +31,20 @@ #include "flashchips.h" #include "programmer.h" -#if CONFIG_INTERNAL == 1 -static enum programmer default_programmer = PROGRAMMER_INTERNAL; -#elif CONFIG_DUMMY == 1 -static enum programmer default_programmer = PROGRAMMER_DUMMY; -#else -/* If neither internal nor dummy are selected, we must pick a sensible default. - * Since there is no reason to prefer a particular external programmer, we fail - * if more than one of them is selected. If only one is selected, it is clear - * that the user wants that one to become the default. - */ -#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1 -#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one. -#endif -static enum programmer default_programmer = -#if CONFIG_NIC3COM == 1 - PROGRAMMER_NIC3COM -#endif -#if CONFIG_NICREALTEK == 1 - PROGRAMMER_NICREALTEK -#endif -#if CONFIG_NICNATSEMI == 1 - PROGRAMMER_NICNATSEMI -#endif -#if CONFIG_GFXNVIDIA == 1 - PROGRAMMER_GFXNVIDIA -#endif -#if CONFIG_DRKAISER == 1 - PROGRAMMER_DRKAISER -#endif -#if CONFIG_SATASII == 1 - PROGRAMMER_SATASII -#endif -#if CONFIG_ATAHPT == 1 - PROGRAMMER_ATAHPT -#endif -#if CONFIG_FT2232_SPI == 1 - PROGRAMMER_FT2232_SPI -#endif -#if CONFIG_SERPROG == 1 - PROGRAMMER_SERPROG -#endif -#if CONFIG_BUSPIRATE_SPI == 1 - PROGRAMMER_BUSPIRATE_SPI -#endif -#if CONFIG_DEDIPROG == 1 - PROGRAMMER_DEDIPROG -#endif -#if CONFIG_RAYER_SPI == 1 - PROGRAMMER_RAYER_SPI -#endif -#if CONFIG_NICINTEL == 1 - PROGRAMMER_NICINTEL -#endif -#if CONFIG_NICINTEL_SPI == 1 - PROGRAMMER_NICINTEL_SPI -#endif -#if CONFIG_OGP_SPI == 1 - PROGRAMMER_OGP_SPI -#endif -#if CONFIG_SATAMV == 1 - PROGRAMMER_SATAMV -#endif -#if CONFIG_LINUX_SPI == 1 - PROGRAMMER_LINUX_SPI -#endif -; -#endif - static void cli_classic_usage(const char *name) { - printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|" + printf("Usage: flashrom [-h|-R|-L|" #if CONFIG_PRINT_WIKI == 1 - "-z|" + "-z|" #endif - "-E|-r |-w |-v ]\n" - " [-c ] [-l ] [-o ]\n" - " [-i ] [-p [:]]\n\n"); + "-p [:]\n" + " [-E|-r |-w |-v ] [-c ]\n" + " [-l [-i ]] [-n] [-f]]\n" + " [-V[V[V]]] [-o ]\n\n"); printf("Please note that the command line interface for flashrom has " "changed between\n" - "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n" + "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n" "Do not use flashrom in scripts or other automated tools " "without checking\n" "that your flashrom version won't interpret options in a " @@ -360,8 +293,9 @@ } } if (prog == PROGRAMMER_INVALID) { - fprintf(stderr, "Error: Unknown programmer " - "%s.\n", optarg); + fprintf(stderr, "Error: Unknown programmer \"%s\". Valid choices are:\n", + optarg); + list_programmers_linebreak(0, 80, 0); cli_classic_abort_usage(); } break; @@ -468,8 +402,13 @@ flash = NULL; } - if (prog == PROGRAMMER_INVALID) - prog = default_programmer; + if (prog == PROGRAMMER_INVALID) { + msg_perr("Please select a programmer with the --programmer parameter.\n" + "Valid choices are:\n"); + list_programmers_linebreak(0, 80, 0); + ret = 1; + goto out; + } /* FIXME: Delay calibration should happen in programmer code. */ myusec_calibrate_delay(); Modified: trunk/flashrom.8 ============================================================================== --- trunk/flashrom.8 Sat Jul 21 19:27:08 2012 (r1551) +++ trunk/flashrom.8 Sun Jul 22 14:01:43 2012 (r1552) @@ -2,13 +2,12 @@ .SH NAME flashrom \- detect, read, write, verify and erase flash chips .SH SYNOPSIS -.B flashrom \fR[\fB\-n\fR] [\fB\-V\fR] [\fB\-f\fR] [\fB\-h\fR|\fB\-R\fR|\ -\fB\-L\fR|\fB\-z\fR|\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\ -\fB\-v\fR ] - [\fB\-c\fR ] \ -[\fB\-l\fR ] - [\fB\-i\fR ] [\fB\-p\fR [:]] - [\fB-o\fR ] +.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|\ +\fB\-p\fR [:] + [\fB\-E\fR|\fB\-r\fR |\fB\-w\fR |\fB\-v\fR ] \ +[\fB\-c\fR ] + [\fB\-l\fR [\fB\-i\fR ]] [\fB\-n\fR] [\fB\-f\fR]] + [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR ] .SH DESCRIPTION .B flashrom is a utility for detecting, reading, writing, verifying and erasing flash @@ -64,7 +63,7 @@ feel that the time for verification takes too long. .sp Typical usage is: -.B "flashrom \-n \-w " +.B "flashrom \-p prog \-n \-w " .sp This option is only useful in combination with .BR \-\-write . @@ -106,31 +105,39 @@ .BR . .sp flashrom supports ROM layouts. This allows you to flash certain parts of -the flash chip only. A ROM layout file looks like follows: +the flash chip only. A ROM layout file contains multiple lines with the +following syntax: +.sp +.B " startaddr:endaddr imagename" +.sp +.BR "startaddr " "and " "endaddr " +are hexadecimal addresses within the ROM file and do not refer to any +physical address. Please note that using a 0x prefix for those hexadecimal +numbers is not necessary, but you can't specify decimal/octal numbers. +.BR "imagename " "is an arbitrary name for the region/image from" +.BR " startaddr " "to " "endaddr " "(both addresses included)." +.sp +Example: .sp 00000000:00008fff gfxrom 00009000:0003ffff normal 00040000:0007ffff fallback .sp - i.e.: - startaddr:endaddr name -.sp -All addresses are offsets within the file, not absolute addresses! -If you only want to update the normal image in a ROM you can say: +If you only want to update the image named +.BR "normal " "in a ROM based on the layout above, run" .sp -.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom" +.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w some.rom" .sp -To update normal and fallback but leave the VGA BIOS alone, say: +To update only the images named +.BR "normal " "and " "fallback" ", run:" .sp -.B " flashrom \-l rom.layout \-i normal \" -.br -.B " \-i fallback \-w agami_aruma.rom" +.B " flashrom \-p prog \-l rom.layout \-i normal -i fallback \-w some.rom" .sp -Currently overlapping sections are not supported. +Overlapping sections are not supported. .TP -.B "\-i, \-\-image " -Only flash image -.B +.B "\-i, \-\-image " +Only flash region/image +.B from flash layout. .TP .B "\-L, \-\-list\-supported" @@ -156,7 +163,8 @@ Please note that MediaWiki output is not compiled in by default. .TP .B "\-p, \-\-programmer [:parameter[,parameter[,parameter]]]" -Specify the programmer device. Currently supported are: +Specify the programmer device. This is mandatory for all operations +involving any chip access (probe/read/write/...). Currently supported are: .sp .BR "* internal" " (default, for in-system flashing in the mainboard)" .sp @@ -330,7 +338,8 @@ .sp .B " flashrom \-p internal:ich_spi_mode=value" .sp -syntax where value can be +syntax where +.BR "value " "can be" .BR auto ", " swseq " or " hwseq . By default .RB "(or when setting " ich_spi_mode=auto ) @@ -360,7 +369,9 @@ .sp .B " flashrom \-p internal:fwh_idsel=value" .sp -syntax where value is the 48-bit hexadecimal raw value to be written in the +syntax where +.B value +is the 48-bit hexadecimal raw value to be written in the IDSEL registers of the Intel southbridge. The upper 32 bits use one hex digit each per 512 kB range between 0xffc00000 and 0xffffffff, and the lower 16 bits use one hex digit each per 1024 kB range between 0xff400000 and 0xff7fffff. @@ -486,7 +497,9 @@ .sp .B " flashrom -p dummy:spi_blacklist=commandlist" .sp -syntax where commandlist is a list of two-digit hexadecimal representations of +syntax where +.B commandlist +is a list of two-digit hexadecimal representations of SPI commands. If commandlist is e.g. 0302, flashrom will behave as if the SPI controller refuses to run command 0x03 (READ) and command 0x02 (WRITE). commandlist may be up to 512 characters (256 commands) long. @@ -500,7 +513,9 @@ .sp .B " flashrom -p dummy:spi_ignorelist=commandlist" .sp -syntax where commandlist is a list of two-digit hexadecimal representations of +syntax where +.B commandlist +is a list of two-digit hexadecimal representations of SPI commands. If commandlist is e.g. 0302, the emulated flash chip will ignore command 0x03 (READ) and command 0x02 (WRITE). commandlist may be up to 512 characters (256 commands) long. @@ -513,7 +528,9 @@ .sp .B " flashrom -p dummy:spi_status=content" .sp -syntax where content is an 8-bit hexadecimal value. +syntax where +.B content +is an 8-bit hexadecimal value. .SS .BR "nic3com" , " nicrealtek" , " nicsmc1211" , " nicnatsemi" , " nicintel\ " , " nicintel_spi" , " gfxnvidia" , " ogp_spi" , " drkaiser" , " satasii\ Modified: trunk/flashrom.c ============================================================================== --- trunk/flashrom.c Sat Jul 21 19:27:08 2012 (r1551) +++ trunk/flashrom.c Sun Jul 22 14:01:43 2012 (r1552) @@ -59,6 +59,10 @@ /* Is writing allowed with this programmer? */ int programmer_may_write; +#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 +#error You have to enable at least one programmer! +#endif + const struct programmer_entry programmer_table[] = { #if CONFIG_INTERNAL == 1 { From c-d.hailfinger.devel.2006 at gmx.net Sun Jul 22 14:02:06 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sun, 22 Jul 2012 14:02:06 +0200 Subject: [flashrom] [PATCH] No default driver if more than one driver is available In-Reply-To: <500B1F8D.1090605@gmx.net> References: <4FF63F43.5090603@gmx.net> <201207060342.q663gcJc002599@mail2.student.tuwien.ac.at> <50048776.6020603@gmx.net> <201207162242.q6GMgZKK024553@mail2.student.tuwien.ac.at> <5009E104.7010204@gmx.net> <500B1F8D.1090605@gmx.net> Message-ID: <500BEBBE.9030007@gmx.net> Am 21.07.2012 23:30 schrieb Carl-Daniel Hailfinger: > Always require the --programmer parameter on the command line if any > flash chip access (probe/read/write/erase/...) is requested. > > Fix a few man page oddities as well. > > Signed-off-by: Carl-Daniel Hailfinger > Acked-by: Stefan Tauner Thanks for the multiple reviews! Committed in r1552. Regards, Carl-Daniel -- http://www.hailfinger.org/ From darmawan.salihun at gmail.com Sun Jul 22 19:14:03 2012 From: darmawan.salihun at gmail.com (Darmawan Salihun) Date: Mon, 23 Jul 2012 00:14:03 +0700 Subject: [flashrom] directio for flashrom In-Reply-To: <4FF5E9F4.4020309@gmx.net> References: <4FF5E9F4.4020309@gmx.net> Message-ID: On 7/6/12, Carl-Daniel Hailfinger wrote: > Hi Jernej, > > I saw that you sent a pciutils/libpci patch to support your Direct IO > driver on Windows. > flashrom is a GPL'ed utility to read/write flash chips, e.g. the one > storing BIOS/EFI on a mainboard. > Right now, flashrom is quite limited on Windows: It doesn't support > anything which needs MMIO/IOPort access. While it would be possible to > use WinIo, the WinIo license seems to be a bit odd and may be > incompatible with the GPL. Your Direct IO driver has the advantage of > being GPL, but it is missing a key feature needed by flashrom: Mapping > physical memory to the application (similar to MapPhysToLin in WinIo). > flashrom needs uncached mappings of device memory regions, and cached > mappings of RAM regions storing DMI info. I'm not sure whether > NtMapViewOfSection would already be enough for this purpose, or if your > Direct IO driver would have to be extended to offer such functionality. > > Regards, > Carl-Daniel > > _______________________________________________ > flashrom mailing list > flashrom at flashrom.org > http://www.flashrom.org/mailman/listinfo/flashrom > Hi Carl-Daniel, Is there any update on the Windows driver now? I just checked the possibility to provide memory-mapped access to the MMIO area in Windows Vista/7 and the upcoming Windows 8. However, I found that the programming model both in both versions are at odd with the memory-mapped direct access in Linux. The driver I conceived back then works indeed, but it's a kludge (quick hack) and have possibility to render the system unstable. I'll get back with more info later. But, for now I have to think over the programming model again and how to present it in Linux/Unix-friendly form. Regards, Darmawan -- -------------------------------------------------------------------- -= Human knowledge belongs to the world =- From c-d.hailfinger.devel.2006 at gmx.net Sun Jul 22 19:51:37 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sun, 22 Jul 2012 19:51:37 +0200 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <4FFD24DC.7030707@gmx.net> References: <4FEE4625.10606@gmx.net> <4FF837DB.7010704@gmx.net> <4FFD24DC.7030707@gmx.net> Message-ID: <500C3DA9.8010202@gmx.net> New version: - fix compilation for DOS - compile ich_descriptors_tool only for x86 - someone has to check whether the new verbosity in feature detection is good or bad Thanks to Idwer Vollering and Stefan Tauner for comments on earlier versions. Move Mac OS X IOKit/DirectHW availability checks in the Makefile from compiler check to pciutils check. Print the compiler error messages for feature detection. Add DOS libpci in the Makefile includes only if a PCI-based programmer was requested. Restrict mmap usage in ich_descriptors_tool to Unix style systems. Build ich_descriptors_tool with the correct .exe extension on DOS/Windows. Build ich_descriptors_tool by default on x86. (Patch by Stefan Tauner) Print the Windows version instead of "unknown machine" on Windows. Don't #define our own __DARWIN__, use the standard OS X detection method. Update the README. Add more generated files to svn:ignore Signed-off-by: Carl-Daniel Hailfinger Property changes on: flashrom-portability-fixes ___________________________________________________________________ Modified: svn:ignore - flashrom .features .dependencies .libdeps *.d + flashrom flashrom.exe .features .dependencies .libdeps *.d Index: flashrom-portability-fixes/hwaccess.h =================================================================== --- flashrom-portability-fixes/hwaccess.h (revision 1552) +++ flashrom-portability-fixes/hwaccess.h (working copy) @@ -180,10 +180,6 @@ #include #endif -#if (defined(__MACH__) && defined(__APPLE__)) -#define __DARWIN__ -#endif - /* Clarification about OUTB/OUTW/OUTL argument order: * OUT[BWL](val, port) */ @@ -203,7 +199,7 @@ #define INW(x) __extension__ ({ u_int inw_tmp = (x); inw(inw_tmp); }) #define INL(x) __extension__ ({ u_int inl_tmp = (x); inl(inl_tmp); }) #else -#if defined(__DARWIN__) +#if defined(__MACH__) && defined(__APPLE__) /* Header is part of the DirectHW library. */ #include #define off64_t off_t @@ -303,7 +299,7 @@ #endif #endif -#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) +#if !(defined(__MACH__) && defined(__APPLE__)) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) typedef struct { uint32_t hi, lo; } msr_t; msr_t rdmsr(int addr); int wrmsr(int addr, msr_t msr); Index: flashrom-portability-fixes/Makefile =================================================================== --- flashrom-portability-fixes/Makefile (revision 1552) +++ flashrom-portability-fixes/Makefile (working copy) @@ -2,7 +2,7 @@ # This file is part of the flashrom project. # # Copyright (C) 2005 coresystems GmbH -# Copyright (C) 2009,2010 Carl-Daniel Hailfinger +# Copyright (C) 2009,2010,2012 Carl-Daniel Hailfinger # # 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 @@ -20,6 +20,12 @@ PROGRAM = flashrom +############################################################################### +# Defaults for the toolchain. + +# If you want to cross-compile, just run e.g. +# make CC=i586-pc-msdosdjgpp-gcc +# You may have to specify STRIP/AR/RANLIB as well. CC ?= gcc STRIP ?= strip INSTALL = install @@ -31,12 +37,17 @@ AR ?= ar RANLIB ?= ranlib +# If your compiler spits out excessive warnings, run make WARNERROR=no +# You shouldn't have to change this flag. WARNERROR ?= yes ifeq ($(WARNERROR), yes) CFLAGS += -Werror endif +############################################################################### +# General OS/architecture specific settings. + # HOST_OS is only used to work around local toolchain issues. HOST_OS ?= $(shell uname) ifeq ($(HOST_OS), MINGW32_NT-5.1) @@ -47,7 +58,7 @@ STRIP_ARGS = -s endif -# Determine the destination processor architecture. +# Determine the destination OS. # IMPORTANT: The following line must be placed before TARGET_OS is ever used # (of course), but should come after any lines setting CC because the line # below uses CC itself. @@ -55,25 +66,27 @@ ifeq ($(TARGET_OS), Darwin) CPPFLAGS += -I/opt/local/include -I/usr/local/include -# DirectHW framework can be found in the DirectHW library. -LDFLAGS += -framework IOKit -framework DirectHW -L/opt/local/lib -L/usr/local/lib +LDFLAGS += -L/opt/local/lib -L/usr/local/lib endif + ifeq ($(TARGET_OS), FreeBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), OpenBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), DOS) EXEC_SUFFIX := .exe -CPPFLAGS += -I../libgetopt -I../libpci/include +CPPFLAGS += -I../libgetopt # DJGPP has odd uint*_t definitions which cause lots of format string warnings. CPPFLAGS += -Wno-format # FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt LIBS += ../libgetopt/libgetopt.a -# Bus Pirate and Serprog are not supported under DOS (missing serial support). +# Bus Pirate, Serprog and PonyProg are not supported under DOS (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -84,6 +97,11 @@ else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -258,18 +276,23 @@ endif endif +############################################################################### +# Flash chip drivers and bus support infrastructure. + CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \ sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o \ a25.o at25.o opaque.o sfdp.o en29lv640b.o -LIB_OBJS = layout.o +############################################################################### +# Library code. -CLI_OBJS = flashrom.o cli_classic.o cli_output.o print.o +LIB_OBJS = layout.o flashrom.o udelay.o programmer.o -PROGRAMMER_OBJS = udelay.o programmer.o +############################################################################### +# Frontend related stuff. -all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) +CLI_OBJS = cli_classic.o cli_output.o print.o # Set the flashrom version string from the highest revision number # of the checked out flashrom files. @@ -370,6 +393,9 @@ endif endif +############################################################################### +# Programmer drivers and programmer support infrastructure. + ifeq ($(CONFIG_INTERNAL), yes) FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1' PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o dmi.o internal.o @@ -525,16 +551,23 @@ else ifeq ($(TARGET_OS), DOS) # FIXME There needs to be a better way to do this +CPPFLAGS += -I../libpci/include LIBS += ../libpci/lib/libpci.a else LIBS += -lpci ifeq ($(TARGET_OS), OpenBSD) # For (i386|amd64)_iopl(2). LIBS += -l$(shell uname -m) +else +ifeq ($(TARGET_OS), Darwin) +# DirectHW framework can be found in the DirectHW library. +LIBS += -framework IOKit -framework DirectHW +else endif endif endif endif +endif ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' @@ -549,6 +582,11 @@ LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS) +all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) +ifeq ($(ARCH), x86) + @+make -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX) +endif + $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) @@ -569,6 +607,7 @@ # We don't use EXEC_SUFFIX here because we want to clean everything. clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d + @+make -C util/ich_descriptors_tool/ clean distclean: clean rm -f .features .libdeps @@ -592,7 +631,7 @@ compiler: featuresavailable @printf "Checking for a C compiler... " @echo "$$COMPILER_TEST" > .test.c - @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test.c -o .test$(EXEC_SUFFIX) >/dev/null 2>&1 && \ + @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test.c -o .test$(EXEC_SUFFIX) >/dev/null && \ echo "found." || ( echo "not found."; \ rm -f .test.c .test$(EXEC_SUFFIX); exit 1) @rm -f .test.c .test$(EXEC_SUFFIX) @@ -626,17 +665,17 @@ pciutils: compiler @printf "Checking for libpci headers... " @echo "$$LIBPCI_TEST" > .test.c - @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null 2>&1 && \ + @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \ echo "found." || ( echo "not found."; echo; \ echo "Please install libpci headers (package pciutils-devel)."; \ echo "See README for more information."; echo; \ rm -f .test.c .test.o; exit 1) @printf "Checking if libpci is present and sufficient... " @printf "" > .libdeps - @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null 2>&1 && \ + @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null && \ echo "yes." || ( echo "no."; \ printf "Checking if libz+libpci are present and sufficient..."; \ - $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null 2>&1 && \ + $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null && \ ( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \ echo "Please install libpci (package pciutils) and/or libz."; \ echo "See README for more information."; echo; \ @@ -652,10 +691,13 @@ # If a user does not explicitly request a non-working feature, we should # silently disable it. However, if a non-working (does not compile) feature # is explicitly requested, we should bail out with a descriptive error message. -ifeq ($(UNSUPPORTED_FEATURES), ) +# We also have to check that at least one programmer driver is enabled. featuresavailable: -else -featuresavailable: +ifeq ($(PROGRAMMER_OBJS),) + @echo "You have to enable at least one programmer driver!" + @false +endif +ifneq ($(UNSUPPORTED_FEATURES), ) @echo "The following features are unavailable on your machine: $(UNSUPPORTED_FEATURES)" @false endif Index: flashrom-portability-fixes/cbtable.c =================================================================== --- flashrom-portability-fixes/cbtable.c (revision 1552) +++ flashrom-portability-fixes/cbtable.c (working copy) @@ -211,7 +211,7 @@ struct lb_header *lb_table; struct lb_record *rec, *last; -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) /* This is a hack. DirectHW fails to map physical address 0x00000000. * Why? */ Property changes on: flashrom-portability-fixes/util/ich_descriptors_tool ___________________________________________________________________ Added: svn:ignore + ich_descriptors_tool ich_descriptors_tool.exe .dep .obj Index: flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (revision 1552) +++ flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (working copy) @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -33,6 +32,13 @@ #include #include #include "ich_descriptors.h" +/* Some DJGPP builds define __unix__ although they don't support mmap(). + * Cygwin defines __unix__ and supports mmap(), but it does not work well. + */ +#if !defined(__MSDOS__) && !defined(_WIN32) && (defined(unix) || defined(__unix__) || defined(__unix)) || (defined(__MACH__) && defined(__APPLE__)) +#define HAVE_MMAP 1 +#include +#endif static void dump_file(const char *basename, const uint32_t *dump, unsigned int len, struct ich_desc_region *reg, unsigned int i) { @@ -161,16 +167,17 @@ if (len < 0) usage(argv, "Seeking to the end of the file failed"); +#ifdef HAVE_MMAP buf = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0); - if (buf == (void *) -1) { + if (buf == (void *) -1) +#endif + { /* fallback for stupid OSes like cygwin */ - int ret; buf = malloc(len); if (!buf) usage(argv, "Could not allocate memory"); lseek(fd, 0, SEEK_SET); - ret = read(fd, buf, len); - if (ret != len) + if (len != read(fd, buf, len)) usage(argv, "Seeking to the end of the file failed"); } printf("The flash image has a size of %d [0x%x] bytes.\n", len, len); Index: flashrom-portability-fixes/util/ich_descriptors_tool/Makefile =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (revision 1552) +++ flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (working copy) @@ -15,11 +15,16 @@ CFLAGS += -D ICH_DESCRIPTORS_FROM_DUMP CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +ifeq ($(TARGET_OS), DOS) +# DJGPP has odd uint*_t definitions which cause lots of format string warnings. +CFLAGS += -Wno-format +endif + OBJ = $(OBJATH)/$(SRC:%.c=%.o) SHAREDOBJ = $(OBJATH)/$(notdir $(SHAREDSRC:%.c=%.o)) -all:$(PROGRAM) +all:$(PROGRAM)$(EXEC_SUFFIX) $(OBJ): $(OBJATH)/%.o : %.c $(CC) $(CFLAGS) -o $@ -c $< @@ -29,11 +34,11 @@ $(SHAREDOBJ): $(OBJATH)/%.o : $(SHAREDSRCDIR)/%.c $(CC) $(CFLAGS) -o $@ -c $< -$(PROGRAM): $(OBJ) $(SHAREDOBJ) - $(CC) -o $(PROGRAM) $(OBJ) $(SHAREDOBJ) +$(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ) + $(CC) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ) clean: - rm -f $(PROGRAM) + rm -f $(PROGRAM) $(PROGRAM).exe rm -rf $(DEPPATH) $(OBJATH) # Include the dependency files. Index: flashrom-portability-fixes/physmap.c =================================================================== --- flashrom-portability-fixes/physmap.c (revision 1552) +++ flashrom-portability-fixes/physmap.c (working copy) @@ -129,7 +129,7 @@ void cleanup_cpu_msr(void) { } -#elif defined(__DARWIN__) +#elif defined(__MACH__) && defined(__APPLE__) #define MEM_DEV "DirectHW" @@ -468,7 +468,7 @@ #else -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) int setup_cpu_msr(int cpu) { // Always succeed for now Index: flashrom-portability-fixes/flashrom.c =================================================================== --- flashrom-portability-fixes/flashrom.c (revision 1552) +++ flashrom-portability-fixes/flashrom.c (working copy) @@ -59,10 +59,6 @@ /* Is writing allowed with this programmer? */ int programmer_may_write; -#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 -#error You have to enable at least one programmer! -#endif - const struct programmer_entry programmer_table[] = { #if CONFIG_INTERNAL == 1 { @@ -1489,10 +1485,35 @@ void print_sysinfo(void) { -#if HAVE_UTSNAME == 1 +#ifdef _WIN32 + SYSTEM_INFO si; + OSVERSIONINFOEX osvi; + + memset(&si, 0, sizeof(SYSTEM_INFO)); + memset(&osvi, 0, sizeof(OSVERSIONINFOEX)); + msg_ginfo(" on Windows"); + /* Tell Windows which version of the structure we want. */ + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if (GetVersionEx((OSVERSIONINFO*) &osvi)) + msg_ginfo(" unknown version"); + else + msg_ginfo(" %lu.%lu", osvi.dwMajorVersion, osvi.dwMinorVersion); + GetSystemInfo(&si); + switch (si.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + msg_ginfo(" x86_64"); + break; + case PROCESSOR_ARCHITECTURE_INTEL: + msg_ginfo(" x86"); + break; + default: + msg_ginfo(" unknown arch"); + break; + } +#elif HAVE_UTSNAME == 1 struct utsname osinfo; + uname(&osinfo); - msg_ginfo(" on %s %s (%s)", osinfo.sysname, osinfo.release, osinfo.machine); #else Index: flashrom-portability-fixes/README =================================================================== --- flashrom-portability-fixes/README (revision 1552) +++ flashrom-portability-fixes/README (working copy) @@ -93,14 +93,18 @@ To compile and run on Darwin/Mac OS X: Install DirectHW from coresystems GmbH. - DirectHW is available at http://www.coresystems.de/en/directhw . + DirectHW is available at http://www.coreboot.org/DirectHW . To cross-compile on Linux for DOS: - Get RPMs of the cross compiler from the DJGPP site and install them: + Get packages of the DJGPP cross compiler and install them: + djgpp-filesystem djgpp-gcc djgpp-cpp djgpp-runtime djgpp-binutils + As an alternative, the DJGPP web site offers packages for download as well: djcross-binutils-2.19.1-10ap.i386.rpm djcross-gcc-4.3.2-8ap.i686.rpm djcrx-2.04pre_20090725-13ap.i386.rpm + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *djgpp*). Download pciutils 3.1.5 and apply http://assembler.cz/flashrom/pciutils.patch Download and compile http://assembler.cz/flashrom/libgetopt/ Compile pciutils, see README.DJGPP for instructions. @@ -108,7 +112,7 @@ ../libpci should contain pciutils source and binaries. ../libgetopt should contain getopt.a from libgetopt. Run either (change settings where appropriate) - make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip OS_ARCH=DOS + make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip or (above settings hardcoded) make djgpp-dos You might have to add WARNERROR=no to the make command line. @@ -116,17 +120,22 @@ http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi7b.zip and make sure CWSDPMI.EXE is in the current directory. +To cross-compile on Linux for Windows: + + Get packages of the MinGW cross compiler and install them: + mingw32-filesystem mingw32-cross-cpp mingw32-cross-binutils mingw32-cross-gcc + mingw32-runtime mingw32-headers + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *mingw*). + PCI-based programmers (internal etc.) are not supported on Windows. + Run (change CC= and STRIP= settings where appropriate) + make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip + Processor architecture dependent features: - On non-x86 architectures you have to disable a few programmers because they - use port-based I/O which is not directly available on non-x86. Please add - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ - CONFIG_NICNATSEMI=no - as parameters to the "make" invocation. - Besides that, the internal programmer is only supported on x86 and MIPS. On - other architectures, please add - CONFIG_INTERNAL=no - as parameter to the "make" invocation. + On non-x86 architectures a few programmers don't work (yet) because they + use port-based I/O which is not directly available on non-x86. Those + programmers will be disabled automatically if you run "make". Installation ------------ Index: flashrom-portability-fixes/programmer.h =================================================================== --- flashrom-portability-fixes/programmer.h (revision 1552) +++ flashrom-portability-fixes/programmer.h (working copy) @@ -240,6 +240,7 @@ /* print.c */ #if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV >= 1 +/* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */ void print_supported_pcidevs(const struct pcidev_status *devs); #endif @@ -637,7 +638,7 @@ #endif /* serial.c */ -#if _WIN32 +#ifdef _WIN32 typedef HANDLE fdtype; #else typedef int fdtype; -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Mon Jul 23 02:48:40 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Mon, 23 Jul 2012 02:48:40 +0200 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <500C3DA9.8010202@gmx.net> References: <4FEE4625.10606@gmx.net> <4FF837DB.7010704@gmx.net> <4FFD24DC.7030707@gmx.net> <500C3DA9.8010202@gmx.net> Message-ID: <500C9F68.9040106@gmx.net> New version: - fix Windows version printing - someone has to check whether the new verbosity for failing compiler/libpci detection is good or bad Thanks to Idwer Vollering and Stefan Tauner for comments on earlier versions. Move Mac OS X IOKit/DirectHW availability checks in the Makefile from compiler check to pciutils check. Print the compiler error messages for feature detection. Add DOS libpci in the Makefile includes only if a PCI-based programmer was requested. Restrict mmap usage in ich_descriptors_tool to Unix style systems. Build ich_descriptors_tool with the correct .exe extension on DOS/Windows. Build ich_descriptors_tool by default on x86. (Patch by Stefan Tauner) Print the Windows version instead of "unknown machine" on Windows. Don't #define our own __DARWIN__, use the standard OS X detection method. Update the README. Add more generated files to svn:ignore Signed-off-by: Carl-Daniel Hailfinger Property changes on: flashrom-portability-fixes ___________________________________________________________________ Modified: svn:ignore - flashrom .features .dependencies .libdeps *.d + flashrom flashrom.exe .features .dependencies .libdeps *.d Index: flashrom-portability-fixes/hwaccess.h =================================================================== --- flashrom-portability-fixes/hwaccess.h (revision 1552) +++ flashrom-portability-fixes/hwaccess.h (working copy) @@ -180,10 +180,6 @@ #include #endif -#if (defined(__MACH__) && defined(__APPLE__)) -#define __DARWIN__ -#endif - /* Clarification about OUTB/OUTW/OUTL argument order: * OUT[BWL](val, port) */ @@ -203,7 +199,7 @@ #define INW(x) __extension__ ({ u_int inw_tmp = (x); inw(inw_tmp); }) #define INL(x) __extension__ ({ u_int inl_tmp = (x); inl(inl_tmp); }) #else -#if defined(__DARWIN__) +#if defined(__MACH__) && defined(__APPLE__) /* Header is part of the DirectHW library. */ #include #define off64_t off_t @@ -303,7 +299,7 @@ #endif #endif -#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) +#if !(defined(__MACH__) && defined(__APPLE__)) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__DragonFly__) && !defined(__LIBPAYLOAD__) typedef struct { uint32_t hi, lo; } msr_t; msr_t rdmsr(int addr); int wrmsr(int addr, msr_t msr); Index: flashrom-portability-fixes/Makefile =================================================================== --- flashrom-portability-fixes/Makefile (revision 1552) +++ flashrom-portability-fixes/Makefile (working copy) @@ -2,7 +2,7 @@ # This file is part of the flashrom project. # # Copyright (C) 2005 coresystems GmbH -# Copyright (C) 2009,2010 Carl-Daniel Hailfinger +# Copyright (C) 2009,2010,2012 Carl-Daniel Hailfinger # # 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 @@ -20,6 +20,12 @@ PROGRAM = flashrom +############################################################################### +# Defaults for the toolchain. + +# If you want to cross-compile, just run e.g. +# make CC=i586-pc-msdosdjgpp-gcc +# You may have to specify STRIP/AR/RANLIB as well. CC ?= gcc STRIP ?= strip INSTALL = install @@ -31,12 +37,17 @@ AR ?= ar RANLIB ?= ranlib +# If your compiler spits out excessive warnings, run make WARNERROR=no +# You shouldn't have to change this flag. WARNERROR ?= yes ifeq ($(WARNERROR), yes) CFLAGS += -Werror endif +############################################################################### +# General OS/architecture specific settings. + # HOST_OS is only used to work around local toolchain issues. HOST_OS ?= $(shell uname) ifeq ($(HOST_OS), MINGW32_NT-5.1) @@ -47,7 +58,7 @@ STRIP_ARGS = -s endif -# Determine the destination processor architecture. +# Determine the destination OS. # IMPORTANT: The following line must be placed before TARGET_OS is ever used # (of course), but should come after any lines setting CC because the line # below uses CC itself. @@ -55,25 +66,27 @@ ifeq ($(TARGET_OS), Darwin) CPPFLAGS += -I/opt/local/include -I/usr/local/include -# DirectHW framework can be found in the DirectHW library. -LDFLAGS += -framework IOKit -framework DirectHW -L/opt/local/lib -L/usr/local/lib +LDFLAGS += -L/opt/local/lib -L/usr/local/lib endif + ifeq ($(TARGET_OS), FreeBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), OpenBSD) CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib endif + ifeq ($(TARGET_OS), DOS) EXEC_SUFFIX := .exe -CPPFLAGS += -I../libgetopt -I../libpci/include +CPPFLAGS += -I../libgetopt # DJGPP has odd uint*_t definitions which cause lots of format string warnings. CPPFLAGS += -Wno-format # FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt LIBS += ../libgetopt/libgetopt.a -# Bus Pirate and Serprog are not supported under DOS (missing serial support). +# Bus Pirate, Serprog and PonyProg are not supported under DOS (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -84,6 +97,11 @@ else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -258,18 +276,23 @@ endif endif +############################################################################### +# Flash chip drivers and bus support infrastructure. + CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \ sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o \ a25.o at25.o opaque.o sfdp.o en29lv640b.o -LIB_OBJS = layout.o +############################################################################### +# Library code. -CLI_OBJS = flashrom.o cli_classic.o cli_output.o print.o +LIB_OBJS = layout.o flashrom.o udelay.o programmer.o -PROGRAMMER_OBJS = udelay.o programmer.o +############################################################################### +# Frontend related stuff. -all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) +CLI_OBJS = cli_classic.o cli_output.o print.o # Set the flashrom version string from the highest revision number # of the checked out flashrom files. @@ -370,6 +393,9 @@ endif endif +############################################################################### +# Programmer drivers and programmer support infrastructure. + ifeq ($(CONFIG_INTERNAL), yes) FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1' PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o dmi.o internal.o @@ -525,16 +551,23 @@ else ifeq ($(TARGET_OS), DOS) # FIXME There needs to be a better way to do this +CPPFLAGS += -I../libpci/include LIBS += ../libpci/lib/libpci.a else LIBS += -lpci ifeq ($(TARGET_OS), OpenBSD) # For (i386|amd64)_iopl(2). LIBS += -l$(shell uname -m) +else +ifeq ($(TARGET_OS), Darwin) +# DirectHW framework can be found in the DirectHW library. +LIBS += -framework IOKit -framework DirectHW +else endif endif endif endif +endif ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' @@ -549,6 +582,11 @@ LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS) +all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) +ifeq ($(ARCH), x86) + @+make -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX) +endif + $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) @@ -569,6 +607,7 @@ # We don't use EXEC_SUFFIX here because we want to clean everything. clean: rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d + @+make -C util/ich_descriptors_tool/ clean distclean: clean rm -f .features .libdeps @@ -592,7 +631,7 @@ compiler: featuresavailable @printf "Checking for a C compiler... " @echo "$$COMPILER_TEST" > .test.c - @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test.c -o .test$(EXEC_SUFFIX) >/dev/null 2>&1 && \ + @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test.c -o .test$(EXEC_SUFFIX) >/dev/null && \ echo "found." || ( echo "not found."; \ rm -f .test.c .test$(EXEC_SUFFIX); exit 1) @rm -f .test.c .test$(EXEC_SUFFIX) @@ -626,17 +665,17 @@ pciutils: compiler @printf "Checking for libpci headers... " @echo "$$LIBPCI_TEST" > .test.c - @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null 2>&1 && \ + @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \ echo "found." || ( echo "not found."; echo; \ echo "Please install libpci headers (package pciutils-devel)."; \ echo "See README for more information."; echo; \ rm -f .test.c .test.o; exit 1) @printf "Checking if libpci is present and sufficient... " @printf "" > .libdeps - @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null 2>&1 && \ + @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null && \ echo "yes." || ( echo "no."; \ printf "Checking if libz+libpci are present and sufficient..."; \ - $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null 2>&1 && \ + $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null && \ ( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \ echo "Please install libpci (package pciutils) and/or libz."; \ echo "See README for more information."; echo; \ @@ -652,10 +691,13 @@ # If a user does not explicitly request a non-working feature, we should # silently disable it. However, if a non-working (does not compile) feature # is explicitly requested, we should bail out with a descriptive error message. -ifeq ($(UNSUPPORTED_FEATURES), ) +# We also have to check that at least one programmer driver is enabled. featuresavailable: -else -featuresavailable: +ifeq ($(PROGRAMMER_OBJS),) + @echo "You have to enable at least one programmer driver!" + @false +endif +ifneq ($(UNSUPPORTED_FEATURES), ) @echo "The following features are unavailable on your machine: $(UNSUPPORTED_FEATURES)" @false endif Index: flashrom-portability-fixes/cbtable.c =================================================================== --- flashrom-portability-fixes/cbtable.c (revision 1552) +++ flashrom-portability-fixes/cbtable.c (working copy) @@ -211,7 +211,7 @@ struct lb_header *lb_table; struct lb_record *rec, *last; -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) /* This is a hack. DirectHW fails to map physical address 0x00000000. * Why? */ Property changes on: flashrom-portability-fixes/util/ich_descriptors_tool ___________________________________________________________________ Added: svn:ignore + ich_descriptors_tool ich_descriptors_tool.exe .dep .obj Index: flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (revision 1552) +++ flashrom-portability-fixes/util/ich_descriptors_tool/ich_descriptors_tool.c (working copy) @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -33,6 +32,13 @@ #include #include #include "ich_descriptors.h" +/* Some DJGPP builds define __unix__ although they don't support mmap(). + * Cygwin defines __unix__ and supports mmap(), but it does not work well. + */ +#if !defined(__MSDOS__) && !defined(_WIN32) && (defined(unix) || defined(__unix__) || defined(__unix)) || (defined(__MACH__) && defined(__APPLE__)) +#define HAVE_MMAP 1 +#include +#endif static void dump_file(const char *basename, const uint32_t *dump, unsigned int len, struct ich_desc_region *reg, unsigned int i) { @@ -161,16 +167,17 @@ if (len < 0) usage(argv, "Seeking to the end of the file failed"); +#ifdef HAVE_MMAP buf = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0); - if (buf == (void *) -1) { + if (buf == (void *) -1) +#endif + { /* fallback for stupid OSes like cygwin */ - int ret; buf = malloc(len); if (!buf) usage(argv, "Could not allocate memory"); lseek(fd, 0, SEEK_SET); - ret = read(fd, buf, len); - if (ret != len) + if (len != read(fd, buf, len)) usage(argv, "Seeking to the end of the file failed"); } printf("The flash image has a size of %d [0x%x] bytes.\n", len, len); Index: flashrom-portability-fixes/util/ich_descriptors_tool/Makefile =================================================================== --- flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (revision 1552) +++ flashrom-portability-fixes/util/ich_descriptors_tool/Makefile (working copy) @@ -15,11 +15,16 @@ CFLAGS += -D ICH_DESCRIPTORS_FROM_DUMP CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +ifeq ($(TARGET_OS), DOS) +# DJGPP has odd uint*_t definitions which cause lots of format string warnings. +CFLAGS += -Wno-format +endif + OBJ = $(OBJATH)/$(SRC:%.c=%.o) SHAREDOBJ = $(OBJATH)/$(notdir $(SHAREDSRC:%.c=%.o)) -all:$(PROGRAM) +all:$(PROGRAM)$(EXEC_SUFFIX) $(OBJ): $(OBJATH)/%.o : %.c $(CC) $(CFLAGS) -o $@ -c $< @@ -29,11 +34,11 @@ $(SHAREDOBJ): $(OBJATH)/%.o : $(SHAREDSRCDIR)/%.c $(CC) $(CFLAGS) -o $@ -c $< -$(PROGRAM): $(OBJ) $(SHAREDOBJ) - $(CC) -o $(PROGRAM) $(OBJ) $(SHAREDOBJ) +$(PROGRAM)$(EXEC_SUFFIX): $(OBJ) $(SHAREDOBJ) + $(CC) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJ) $(SHAREDOBJ) clean: - rm -f $(PROGRAM) + rm -f $(PROGRAM) $(PROGRAM).exe rm -rf $(DEPPATH) $(OBJATH) # Include the dependency files. Index: flashrom-portability-fixes/physmap.c =================================================================== --- flashrom-portability-fixes/physmap.c (revision 1552) +++ flashrom-portability-fixes/physmap.c (working copy) @@ -129,7 +129,7 @@ void cleanup_cpu_msr(void) { } -#elif defined(__DARWIN__) +#elif defined(__MACH__) && defined(__APPLE__) #define MEM_DEV "DirectHW" @@ -468,7 +468,7 @@ #else -#ifdef __DARWIN__ +#if defined(__MACH__) && defined(__APPLE__) int setup_cpu_msr(int cpu) { // Always succeed for now Index: flashrom-portability-fixes/flashrom.c =================================================================== --- flashrom-portability-fixes/flashrom.c (revision 1552) +++ flashrom-portability-fixes/flashrom.c (working copy) @@ -59,10 +59,6 @@ /* Is writing allowed with this programmer? */ int programmer_may_write; -#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1 -#error You have to enable at least one programmer! -#endif - const struct programmer_entry programmer_table[] = { #if CONFIG_INTERNAL == 1 { @@ -1489,10 +1485,35 @@ void print_sysinfo(void) { -#if HAVE_UTSNAME == 1 +#ifdef _WIN32 + SYSTEM_INFO si; + OSVERSIONINFOEX osvi; + + memset(&si, 0, sizeof(SYSTEM_INFO)); + memset(&osvi, 0, sizeof(OSVERSIONINFOEX)); + msg_ginfo(" on Windows"); + /* Tell Windows which version of the structure we want. */ + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if (GetVersionEx((OSVERSIONINFO*) &osvi)) + msg_ginfo(" %lu.%lu", osvi.dwMajorVersion, osvi.dwMinorVersion); + else + msg_ginfo(" unknown version"); + GetSystemInfo(&si); + switch (si.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + msg_ginfo(" (x86_64)"); + break; + case PROCESSOR_ARCHITECTURE_INTEL: + msg_ginfo(" (x86)"); + break; + default: + msg_ginfo(" (unknown arch)"); + break; + } +#elif HAVE_UTSNAME == 1 struct utsname osinfo; + uname(&osinfo); - msg_ginfo(" on %s %s (%s)", osinfo.sysname, osinfo.release, osinfo.machine); #else Index: flashrom-portability-fixes/README =================================================================== --- flashrom-portability-fixes/README (revision 1552) +++ flashrom-portability-fixes/README (working copy) @@ -93,14 +93,18 @@ To compile and run on Darwin/Mac OS X: Install DirectHW from coresystems GmbH. - DirectHW is available at http://www.coresystems.de/en/directhw . + DirectHW is available at http://www.coreboot.org/DirectHW . To cross-compile on Linux for DOS: - Get RPMs of the cross compiler from the DJGPP site and install them: + Get packages of the DJGPP cross compiler and install them: + djgpp-filesystem djgpp-gcc djgpp-cpp djgpp-runtime djgpp-binutils + As an alternative, the DJGPP web site offers packages for download as well: djcross-binutils-2.19.1-10ap.i386.rpm djcross-gcc-4.3.2-8ap.i686.rpm djcrx-2.04pre_20090725-13ap.i386.rpm + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *djgpp*). Download pciutils 3.1.5 and apply http://assembler.cz/flashrom/pciutils.patch Download and compile http://assembler.cz/flashrom/libgetopt/ Compile pciutils, see README.DJGPP for instructions. @@ -108,7 +112,7 @@ ../libpci should contain pciutils source and binaries. ../libgetopt should contain getopt.a from libgetopt. Run either (change settings where appropriate) - make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip OS_ARCH=DOS + make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip or (above settings hardcoded) make djgpp-dos You might have to add WARNERROR=no to the make command line. @@ -116,17 +120,22 @@ http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi7b.zip and make sure CWSDPMI.EXE is in the current directory. +To cross-compile on Linux for Windows: + + Get packages of the MinGW cross compiler and install them: + mingw32-filesystem mingw32-cross-cpp mingw32-cross-binutils mingw32-cross-gcc + mingw32-runtime mingw32-headers + The cross toolchain packages for your distribution may have slightly different + names (look for packages named *mingw*). + PCI-based programmers (internal etc.) are not supported on Windows. + Run (change CC= and STRIP= settings where appropriate) + make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip + Processor architecture dependent features: - On non-x86 architectures you have to disable a few programmers because they - use port-based I/O which is not directly available on non-x86. Please add - CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \ - CONFIG_NICNATSEMI=no - as parameters to the "make" invocation. - Besides that, the internal programmer is only supported on x86 and MIPS. On - other architectures, please add - CONFIG_INTERNAL=no - as parameter to the "make" invocation. + On non-x86 architectures a few programmers don't work (yet) because they + use port-based I/O which is not directly available on non-x86. Those + programmers will be disabled automatically if you run "make". Installation ------------ Index: flashrom-portability-fixes/programmer.h =================================================================== --- flashrom-portability-fixes/programmer.h (revision 1552) +++ flashrom-portability-fixes/programmer.h (working copy) @@ -240,6 +240,7 @@ /* print.c */ #if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV >= 1 +/* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */ void print_supported_pcidevs(const struct pcidev_status *devs); #endif @@ -637,7 +638,7 @@ #endif /* serial.c */ -#if _WIN32 +#ifdef _WIN32 typedef HANDLE fdtype; #else typedef int fdtype; -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Mon Jul 23 15:33:59 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 23 Jul 2012 15:33:59 +0200 Subject: [flashrom] [PATCH 2/3] Not for merge: Warn if we skipped all blocks In-Reply-To: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <1343050440-9116-3-git-send-email-stefan.tauner@student.tuwien.ac.at> Quick hack to print a warning if we skip all blocks because they are already equal to the requested image. We want something like this to make users aware... and some developers that regularly fall for this too *coughcough*. Signed-off-by: Stefan Tauner --- flashrom.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flashrom.c b/flashrom.c index 70687ff..ebc3118 100644 --- a/flashrom.c +++ b/flashrom.c @@ -1218,6 +1218,7 @@ static int selfcheck_eraseblocks(const struct flashchip *flash) return ret; } +static int all_skipped = 1; static int erase_and_write_block_helper(struct flashctx *flash, unsigned int start, unsigned int len, uint8_t *curcontents, @@ -1266,6 +1267,8 @@ static int erase_and_write_block_helper(struct flashctx *flash, } if (skip) msg_cdbg("S"); + else + all_skipped = 0; return ret; } @@ -1391,6 +1394,8 @@ int erase_and_write_flash(struct flashctx *flash, uint8_t *oldcontents, if (ret) { msg_cerr("FAILED!\n"); } else { + if(all_skipped) + msg_cinfo("\nWarning: Chip contents were already identical to the requested image.\n"); msg_cinfo("Erase/write done.\n"); } return ret; -- Kind regards, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 23 15:33:57 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 23 Jul 2012 15:33:57 +0200 Subject: [flashrom] [PATCH 0/3] Verify once.. Message-ID: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Thanks to Ky?sti for bringing up this emberrassing issue. Let's fix this quickly before anyone notices and please let us forget that it ever happened. :) The good thing is, that i had a few ideas while fixing the problem that may improve the overall situation, looking forward to comments. One idea i did not follow up yet is getting rid of read_flash_to_file(?). It is as useless as verify_flash was before my patch and just complicates things (e.g. for layout integration). Stefan Tauner (3): Do not read the flash chip twice in verification mode. Not for merge: Warn if we skipped all blocks Not for merge: make the dummy programmer FAIL dummyflasher.c | 15 ++++++++++ flash.h | 2 +- flashrom.c | 91 +++++++++++++++++++++++++++----------------------------- jedec.c | 2 +- 4 files changed, 61 insertions(+), 49 deletions(-) -- Kind regards, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 23 15:33:58 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 23 Jul 2012 15:33:58 +0200 Subject: [flashrom] [PATCH 1/3] Do not read the flash chip twice in verification mode. In-Reply-To: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <1343050440-9116-2-git-send-email-stefan.tauner@student.tuwien.ac.at> Ky?sti M?lkki noticed that we unnecessarily read the flash chip twice when called with --verify. The first one is the mandatory read before everything (to be able to detect the seriousness of errors), but the second one is not necessary because we can just use the former for the comparison. This introduces a small output change: previously we printed ERASE or VERIFY depending on the callee. This special case has been dropped because it is unnecessary to print it (and wrong for the verification function to need to know why it is verifying exactly). If an erase fails we mention that fact explicitly already, similar for verify. Signed-off-by: Stefan Tauner --- flash.h | 2 +- flashrom.c | 86 +++++++++++++++++++++++++++--------------------------------- jedec.c | 2 +- 3 files changed, 41 insertions(+), 49 deletions(-) diff --git a/flash.h b/flash.h index d669512..5bb1211 100644 --- a/flash.h +++ b/flash.h @@ -241,7 +241,7 @@ int min(int a, int b); int max(int a, int b); void tolower_string(char *str); char *extract_param(char **haystack, const char *needle, const char *delim); -int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, unsigned int len, const char *message); +int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, unsigned int len); int need_erase(uint8_t *have, uint8_t *want, unsigned int len, enum write_granularity gran); char *strcat_realloc(char *dest, const char *src); void print_version(void); diff --git a/flashrom.c b/flashrom.c index fc52c4a..70687ff 100644 --- a/flashrom.c +++ b/flashrom.c @@ -548,6 +548,26 @@ static unsigned int count_usable_erasers(const struct flashctx *flash) return usable_erasefunctions; } +int compare_range(uint8_t *wantbuf, uint8_t *havebuf, unsigned int start, unsigned int len) +{ + int ret = 0, failcount = 0; + unsigned int i; + for (i = 0; i < len; i++) { + if (wantbuf[i] != havebuf[i]) { + /* Only print the first failure. */ + if (!failcount++) + msg_cerr("FAILED at 0x%08x! Expected=0x%02x, Found=0x%02x,", + start + i, wantbuf[i], havebuf[i]); + } + } + if (failcount) { + msg_cerr(" failed byte count from 0x%08x-0x%08x: 0x%x\n", + start, start + len - 1, failcount); + ret = -1; + } + return ret; +} + /* start is an offset to the base address of the flash chip */ int check_erased_range(struct flashctx *flash, unsigned int start, unsigned int len) @@ -560,7 +580,7 @@ int check_erased_range(struct flashctx *flash, unsigned int start, exit(1); } memset(cmpbuf, 0xff, len); - ret = verify_range(flash, cmpbuf, start, len, "ERASE"); + ret = verify_range(flash, cmpbuf, start, len); free(cmpbuf); return ret; } @@ -570,15 +590,12 @@ int check_erased_range(struct flashctx *flash, unsigned int start, * flash content at location start * @start offset to the base address of the flash chip * @len length of the verified area - * @message string to print in the "FAILED" message * @return 0 for success, -1 for failure */ -int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, - unsigned int len, const char *message) +int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, unsigned int len) { - unsigned int i; uint8_t *readbuf = malloc(len); - int ret = 0, failcount = 0; + int ret = 0; if (!len) goto out_free; @@ -599,8 +616,6 @@ int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, ret = -1; goto out_free; } - if (!message) - message = "VERIFY"; ret = flash->read(flash, readbuf, start, len); if (ret) { @@ -609,22 +624,7 @@ int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start, return ret; } - for (i = 0; i < len; i++) { - if (cmpbuf[i] != readbuf[i]) { - /* Only print the first failure. */ - if (!failcount++) - msg_cerr("%s FAILED at 0x%08x! " - "Expected=0x%02x, Read=0x%02x,", - message, start + i, cmpbuf[i], - readbuf[i]); - } - } - if (failcount) { - msg_cerr(" failed byte count from 0x%08x-0x%08x: 0x%x\n", - start, start + len - 1, failcount); - ret = -1; - } - + ret = compare_range(cmpbuf, readbuf, start, len); out_free: free(readbuf); return ret; @@ -1060,21 +1060,6 @@ notfound: return flash - flashchips; } -int verify_flash(struct flashctx *flash, uint8_t *buf) -{ - int ret; - unsigned int total_size = flash->total_size * 1024; - - msg_cinfo("Verifying flash... "); - - ret = verify_range(flash, buf, 0, total_size, NULL); - - if (!ret) - msg_cinfo("VERIFIED. \n"); - - return ret; -} - int read_buf_from_file(unsigned char *buf, unsigned long size, const char *filename) { @@ -1838,15 +1823,22 @@ int doit(struct flashctx *flash, int force, const char *filename, int read_it, } if (verify_it) { - /* Work around chips which need some time to calm down. */ - if (write_it) + msg_cinfo("Verifying flash... "); + + if (write_it) { + /* Work around chips which need some time to calm down. */ programmer_delay(1000*1000); - ret = verify_flash(flash, newcontents); - /* If we tried to write, and verification now fails, we - * might have an emergency situation. - */ - if (ret && write_it) - emergency_help_message(); + ret = verify_range(flash, newcontents, 0, size); + /* If we tried to write, and verification now fails, we + * might have an emergency situation. + */ + if (ret) + emergency_help_message(); + } else { + ret = compare_range(newcontents, oldcontents, 0, size); + } + if (!ret) + msg_cinfo("VERIFIED.\n"); } out: diff --git a/jedec.c b/jedec.c index 69c0c0c..1fa1a10 100644 --- a/jedec.c +++ b/jedec.c @@ -409,7 +409,7 @@ retry: dst = d; src = s; - failed = verify_range(flash, src, start, page_size, NULL); + failed = verify_range(flash, src, start, page_size); if (failed && tried++ < MAX_REFLASH_TRIES) { msg_cerr("retrying.\n"); -- Kind regards, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 23 15:34:00 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 23 Jul 2012 15:34:00 +0200 Subject: [flashrom] [PATCH 3/3] Not for merge: make the dummy programmer FAIL In-Reply-To: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <1343050440-9116-4-git-send-email-stefan.tauner@student.tuwien.ac.at> blacklisting and ignorelisting opcodes is just not enough. this patch does not introduce the most outstand failure injection ever, but it certainly helped me testing the other patch. maybe we want to make similar failures user configurable? Signed-off-by: Stefan Tauner --- dummyflasher.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dummyflasher.c b/dummyflasher.c index 66d0df0..5a51d1c 100644 --- a/dummyflasher.c +++ b/dummyflasher.c @@ -493,6 +493,7 @@ static int emulate_spi_chip_response(unsigned int writecnt, { unsigned int offs, i, toread; static int unsigned aai_offs; + static int num_read = 0; if (writecnt == 0) { msg_perr("No command sent to the chip!\n"); @@ -587,6 +588,13 @@ static int emulate_spi_chip_response(unsigned int writecnt, offs = writearr[1] << 16 | writearr[2] << 8 | writearr[3]; /* Truncate to emu_chip_size. */ offs %= emu_chip_size; + if(offs==(emu_chip_size/8)){ + num_read++; + if(num_read >= 4){ // verify will fail iff there has been at least one erase retry + memset(readarr, 0x13, readcnt); + break; + } + } if (readcnt > 0) memcpy(readarr, flashchip_contents + offs, readcnt); break; @@ -602,6 +610,10 @@ static int emulate_spi_chip_response(unsigned int writecnt, msg_perr("Max BYTE PROGRAM size exceeded!\n"); return 1; } + if(offs==(emu_chip_size/4)){ // will be detected at verification + memset(flashchip_contents + offs, 0x14, writecnt - 4); + break; + } memcpy(flashchip_contents + offs, writearr + 4, writecnt - 4); break; case JEDEC_AAI_WORD_PROGRAM: @@ -659,6 +671,9 @@ static int emulate_spi_chip_response(unsigned int writecnt, if (offs & (emu_jedec_se_size - 1)) msg_pdbg("Unaligned SECTOR ERASE 0x20: 0x%x\n", offs); offs &= ~(emu_jedec_se_size - 1); + if(offs==(emu_chip_size/2)){ // this will be detected early (iff block needs an erase) + break; + } memset(flashchip_contents + offs, 0xff, emu_jedec_se_size); break; case JEDEC_BE_52: -- Kind regards, Stefan Tauner From Helge.Wagner at ge.com Mon Jul 23 15:06:34 2012 From: Helge.Wagner at ge.com (Wagner, Helge (GE Germany)) Date: Mon, 23 Jul 2012 15:06:34 +0200 Subject: [flashrom] [PATCH] VIA VX900 Message-ID: <966E8B72E12C6C469AF763C7C8D09F51059B97D8@BUDMLVEM06.e2k.ad.ge.com> Hi all, please find attached our changes for the VIA VX900 chipset. Signed-off-by: Helge Wagner Regards, Helge -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: via-vx900.patch Type: application/octet-stream Size: 3055 bytes Desc: via-vx900.patch URL: From cerera at gmail.com Sun Jul 22 01:13:31 2012 From: cerera at gmail.com (Vitali Druzhinin) Date: Sun, 22 Jul 2012 02:13:31 +0300 Subject: [flashrom] Which hardware do you want supported? Message-ID: Hello! Did not find my motherboards in supported hardware list, but found chipsets. I would like to flash the following: ASUS M3A-H/HDMI (SB7x0/SB8x0/SB9x0 1002:439d) Elitegroup NFORCE6M-A2 (MCP61 10de:03e0) How safe is to try flash Coreboot on these MoBo? What information do you need else? BR, Vitali -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: M3A-H Type: application/octet-stream Size: 41249 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: NFORCE6M-A2 Type: application/octet-stream Size: 13933 bytes Desc: not available URL: From c-d.hailfinger.devel.2006 at gmx.net Tue Jul 24 00:59:16 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Tue, 24 Jul 2012 00:59:16 +0200 Subject: [flashrom] [PATCH 3/3] Not for merge: make the dummy programmer FAIL In-Reply-To: <1343050440-9116-4-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1343050440-9116-4-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <500DD744.7090609@gmx.net> Am 23.07.2012 15:34 schrieb Stefan Tauner: > blacklisting and ignorelisting opcodes is just not enough. > this patch does not introduce the most outstand failure injection ever, but > it certainly helped me testing the other patch. maybe we want to make > similar failures user configurable? > > Signed-off-by: Stefan Tauner I really like simulating chip failure. What about doing this with a programmer parameter, maybe erasestuckbyte=val at addr+count:val at addr+count etc. (essentially an AND mask for the desired erase result) writestuckbyte=val at addr+count:val at addr+count etc. (essentially an OR mask for the desired write result) val would be the hex representation of a single byte, addr would be the in-chip address where the stuck byte is placed, and count would be how often you have to write/erase to get the right value (with 0 as special count meaning the byte is stuck forever). For erasestuckbyte=0xfe at 0xbabe+2 we'd get the following result: 1. Address 0xbabe has value 0xfe&oldval_at_0xbabe 2. Run erase 3. Address 0xbabe has value 0xfe 4. Run erase again (same or different block size) 5. Address 0xbabe has value 0xff 6. Write anything to address 0xbabe 7. Address 0xbabe has desired value 8. If you erase again, address 0xbabe has value 0xfe Write resets the counter for erasestuckbyte. For writstuckbyte=0x01 at 0xbabe+2 we'd get the following result: 1. Address 0xbabe has value 0x01|oldval_at_0xbabe 2. Run erase 3. Address 0xbabe has value 0xff 4. Write newval to address 0xbabe 5. Address 0xbabe has value 0x01|newval_at_0xbabe 6. Write newval to address 0xbabe 7. Address 0xbabe has desired value Erase resets the counter for writestuckbyte What do you think? Is this completely overdesigning a solution, or is it a useful unit test? Regards, Carl-Daniel -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Tue Jul 24 01:15:51 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 24 Jul 2012 01:15:51 +0200 Subject: [flashrom] [PATCH 3/3] Not for merge: make the dummy programmer FAIL In-Reply-To: <500DD744.7090609@gmx.net> References: <1343050440-9116-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1343050440-9116-4-git-send-email-stefan.tauner@student.tuwien.ac.at> <500DD744.7090609@gmx.net> Message-ID: <201207232315.q6NNFpHq014313@mail2.student.tuwien.ac.at> On Tue, 24 Jul 2012 00:59:16 +0200 Carl-Daniel Hailfinger wrote: > What do you think? Is this completely overdesigning a solution, or is it > a useful unit test? imho there are more pressing problems (that patch pile has quite some mass for example ;) and even if someone implements the described behavior... it wont be trivial code hence it wont get reviewed soon just adding more pain - it is also of no use to users. but in general i think it would be nice to have... later (together with a real unit test framework)... much later. but i'll put it on my todo list because we both like it and that's what i wanted to find out with this patch. :) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Tue Jul 24 05:31:03 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 24 Jul 2012 05:31:03 +0200 Subject: [flashrom] [PATCH] Fix VIA VX*** support. In-Reply-To: <966E8B72E12C6C469AF763C7C8D09F51059B97D8@BUDMLVEM06.e2k.ad.ge.com> References: <966E8B72E12C6C469AF763C7C8D09F51059B97D8@BUDMLVEM06.e2k.ad.ge.com> Message-ID: <1343100663-21461-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Helge Wagner's patch that added VIA VX900 chipset support made me look closer at the datasheets which led to some concise documentation about newer VIA chipsets: http://flashrom.org/VIA Based on that this patch adds full support for VX800/VX820, VX855/VX875 and VX900, including SPI and LPC. VT8237S was not changed (SPI support only) because there is no public datasheet and it is not clear how to distinguish between LPC and SPI strapping and investigations in (NDAed) documents have not brought up anything conclusively. enable_flash_vt823x could probably be enhanced too due to various ignored LPC options of the chipset. Signed-off-by: Helge Wagner Signed-off-by: Stefan Tauner --- chipset_enable.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++------- ichspi.c | 9 +++---- programmer.h | 2 +- 3 files changed, 73 insertions(+), 17 deletions(-) diff --git a/chipset_enable.c b/chipset_enable.c index bde2e12..a977d68 100644 --- a/chipset_enable.c +++ b/chipset_enable.c @@ -6,6 +6,7 @@ * Copyright (C) 2006 Uwe Hermann * Copyright (C) 2007,2008,2009 Carl-Daniel Hailfinger * Copyright (C) 2009 Kontron Modular Computers GmbH + * Copyright (C) 2011, 2012 Stefan Tauner * * 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 @@ -508,12 +509,6 @@ static int enable_flash_tunnelcreek(struct pci_dev *dev, const char *name) return ret; } -static int enable_flash_vt8237s_spi(struct pci_dev *dev, const char *name) -{ - /* Do we really need no write enable? */ - return via_init_spi(dev); -} - static int enable_flash_ich_dc_spi(struct pci_dev *dev, const char *name, enum ich_chipset ich_generation) { @@ -680,7 +675,7 @@ static int enable_flash_vt823x(struct pci_dev *dev, const char *name) return -1; } - if (dev->device_id == 0x3227) { /* VT8237R */ + if (dev->device_id == 0x3227) { /* VT8237 */ /* All memory cycles, not just ROM ones, go to LPC. */ val = pci_read_byte(dev, 0x59); val &= ~0x80; @@ -690,6 +685,69 @@ static int enable_flash_vt823x(struct pci_dev *dev, const char *name) return 0; } +static int enable_flash_vt_vx(struct pci_dev *dev, const char *name) +{ + struct pci_dev *south_north = pci_dev_find(0x1106, 0xa353); + if (south_north == NULL) { + msg_perr("Could not find South-North Module Interface Control device!\n"); + return -1; + } + + msg_pdbg("Strapped to "); + if ((pci_read_byte(south_north, 0x56) & 0x01) == 0) { + msg_pdbg("LPC.\n"); + return enable_flash_vt823x(dev, name); + } + msg_pdbg("SPI.\n"); + + uint32_t mmio_base; + void *mmio_base_physmapped; + uint32_t spi_cntl; + #define SPI_CNTL_LEN 0x08 + uint32_t spi0_mm_base = 0; + switch(dev->device_id) { + case 0x8353: /* VX800/VX820 */ + spi0_mm_base = pci_read_long(dev, 0xbc) << 8; + break; + case 0x8409: /* VX855/VX875 */ + case 0x8410: /* VX900 */ + mmio_base = pci_read_long(dev, 0xbc) << 8; + mmio_base_physmapped = physmap("VIA VX MMIO register", mmio_base, SPI_CNTL_LEN); + if (mmio_base_physmapped == ERROR_PTR) { + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + return ERROR_FATAL; + } + + /* Offset 0 - Bit 0 holds SPI Bus0 Enable Bit. */ + spi_cntl = mmio_readl(mmio_base_physmapped) + 0x00; + if ((spi_cntl & 0x01) == 0) { + msg_pdbg ("SPI Bus0 disabled!\n"); + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + return ERROR_FATAL; + } + /* Offset 1-3 has SPI Bus Memory Map Base Address: */ + spi0_mm_base = spi_cntl & 0xFFFFFF00; + + /* Offset 4 - Bit 0 holds SPI Bus1 Enable Bit. */ + spi_cntl = mmio_readl(mmio_base_physmapped) + 0x04; + if ((spi_cntl & 0x01) == 1) + msg_pdbg2("SPI Bus1 is enabled too.\n"); + + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + break; + default: + msg_perr("%s: Unsupported chipset %x:%x!\n", __func__, dev->vendor_id, dev->device_id); + return ERROR_FATAL; + } + + return via_init_spi(dev, spi0_mm_base); +} + +static int enable_flash_vt8237s_spi(struct pci_dev *dev, const char *name) +{ + return via_init_spi(dev, pci_read_long(dev, 0xbc) << 8); +} + static int enable_flash_cs5530(struct pci_dev *dev, const char *name) { uint8_t reg8; @@ -1262,7 +1320,7 @@ const struct penable chipset_enables[] = { {0x1106, 0x0586, OK, "VIA", "VT82C586A/B", enable_flash_amd8111}, {0x1106, 0x0596, OK, "VIA", "VT82C596", enable_flash_amd8111}, {0x1106, 0x0686, OK, "VIA", "VT82C686A/B", enable_flash_amd8111}, - {0x1106, 0x3074, OK, "VIA", "VT8233", enable_flash_vt823x}, + {0x1106, 0x3074, OK, "VIA", "VT8233/VT8237R", enable_flash_vt823x}, {0x1106, 0x3147, OK, "VIA", "VT8233A", enable_flash_vt823x}, {0x1106, 0x3177, OK, "VIA", "VT8235", enable_flash_vt823x}, {0x1106, 0x3227, OK, "VIA", "VT8237", enable_flash_vt823x}, @@ -1270,8 +1328,9 @@ const struct penable chipset_enables[] = { {0x1106, 0x3372, OK, "VIA", "VT8237S", enable_flash_vt8237s_spi}, {0x1106, 0x8231, NT, "VIA", "VT8231", enable_flash_vt823x}, {0x1106, 0x8324, OK, "VIA", "CX700", enable_flash_vt823x}, - {0x1106, 0x8353, OK, "VIA", "VX800/VX820", enable_flash_vt8237s_spi}, - {0x1106, 0x8409, OK, "VIA", "VX855/VX875", enable_flash_vt823x}, + {0x1106, 0x8353, NT, "VIA", "VX800/VX820", enable_flash_vt_vx}, + {0x1106, 0x8409, NT, "VIA", "VX855/VX875", enable_flash_vt_vx}, + {0x1106, 0x8410, NT, "VIA", "VX900", enable_flash_vt_vx}, {0x1166, 0x0200, OK, "Broadcom", "OSB4", enable_flash_osb4}, {0x1166, 0x0205, OK, "Broadcom", "HT-1000", enable_flash_ht1000}, {0x17f3, 0x6030, OK, "RDC", "R8610/R3210", enable_flash_rdc_r8610}, diff --git a/ichspi.c b/ichspi.c index 792d35d..fb87459 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1844,17 +1844,14 @@ static const struct spi_programmer spi_programmer_via = { .write_aai = default_spi_write_aai, }; -int via_init_spi(struct pci_dev *dev) +int via_init_spi(struct pci_dev *dev, uint32_t mmio_base) { - uint32_t mmio_base; int i; - mmio_base = (pci_read_long(dev, 0xbc)) << 8; msg_pdbg("MMIO base at = 0x%x\n", mmio_base); - ich_spibar = physmap("VT8237S MMIO registers", mmio_base, 0x70); + ich_spibar = physmap("VIA SPI MMIO registers", mmio_base, 0x70); + /* Do we really need no write enable? Like the LPC one at D17F0 0x40 */ - /* Not sure if it speaks all these bus protocols. */ - internal_buses_supported = BUS_LPC | BUS_FWH; ich_generation = CHIPSET_ICH7; register_spi_programmer(&spi_programmer_via); diff --git a/programmer.h b/programmer.h index f511c71..cfdc677 100644 --- a/programmer.h +++ b/programmer.h @@ -561,7 +561,7 @@ enum ich_chipset { extern uint32_t ichspi_bbar; int ich_init_spi(struct pci_dev *dev, uint32_t base, void *rcrb, enum ich_chipset ich_generation); -int via_init_spi(struct pci_dev *dev); +int via_init_spi(struct pci_dev *dev, uint32_t mmio_base); /* it85spi.c */ int it85xx_spi_init(struct superio s); -- Kind regards, Stefan Tauner From Helge.Wagner at ge.com Tue Jul 24 10:19:29 2012 From: Helge.Wagner at ge.com (Wagner, Helge (GE Germany)) Date: Tue, 24 Jul 2012 10:19:29 +0200 Subject: [flashrom] [PATCH] Intel QM77 Message-ID: <966E8B72E12C6C469AF763C7C8D09F51059B9C1D@BUDMLVEM06.e2k.ad.ge.com> Hi all, Please find attached our changes for the QM77 chipset. I looked at the datasheet to be sure that the strap names (SPI, PCI, LPC) are the same as on the series 5 and 6 chipsets. Signed-off-by: Helge Wagner Best Regards, Helge Wagner -------------- next part -------------- A non-text attachment was scrubbed... Name: QM77.patch Type: application/octet-stream Size: 1641 bytes Desc: QM77.patch URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: QM77-E-V.LOG Type: application/octet-stream Size: 65835 bytes Desc: QM77-E-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: QM77-r-V.LOG Type: application/octet-stream Size: 22879 bytes Desc: QM77-r-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: QM77-V.LOG Type: application/octet-stream Size: 22774 bytes Desc: QM77-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: QM77-w-V.LOG Type: application/octet-stream Size: 66045 bytes Desc: QM77-w-V.LOG URL: From ajg4tadpole at gmail.com Tue Jul 24 11:51:23 2012 From: ajg4tadpole at gmail.com (Andrew Goodbody) Date: Tue, 24 Jul 2012 10:51:23 +0100 Subject: [flashrom] Which hardware do you want supported? In-Reply-To: References: Message-ID: <500E701B.9000404@gmail.com> On 22/07/12 00:13, Vitali Druzhinin wrote: > Hello! > > Did not find my motherboards in supported hardware list, but found chipsets. > > I would like to flash the following: > > ASUS M3A-H/HDMI (SB7x0/SB8x0/SB9x0 1002:439d) > Elitegroup NFORCE6M-A2 (MCP61 10de:03e0) > > How safe is to try flash Coreboot on these MoBo? What information do you > need else? > > BR, > Vitali Not safe at all. Flashrom may well work if the boards do not require board specific enables but coreboot requires a specific port to each motherboard in question. So you are very likely to end up with a motherboard that will not boot. If you want to do the coreboot ports then the coreboot mailing list will be the place to get the help you need. Andrew From cerera at gmail.com Tue Jul 24 12:19:02 2012 From: cerera at gmail.com (Vitali Druzhinin) Date: Tue, 24 Jul 2012 13:19:02 +0300 Subject: [flashrom] Which hardware do you want supported? In-Reply-To: <500E701B.9000404@gmail.com> References: <500E701B.9000404@gmail.com> Message-ID: Ok! Thank you! On Tuesday, July 24, 2012, Andrew Goodbody wrote: > On 22/07/12 00:13, Vitali Druzhinin wrote: >> >> Hello! >> >> Did not find my motherboards in supported hardware list, but found chipsets. >> >> I would like to flash the following: >> >> ASUS M3A-H/HDMI (SB7x0/SB8x0/SB9x0 1002:439d) >> Elitegroup NFORCE6M-A2 (MCP61 10de:03e0) >> >> How safe is to try flash Coreboot on these MoBo? What information do you >> need else? >> >> BR, >> Vitali > > Not safe at all. Flashrom may well work if the boards do not require board specific enables but coreboot requires a specific port to each motherboard in question. So you are very likely to end up with a motherboard that will not boot. > If you want to do the coreboot ports then the coreboot mailing list will be the place to get the help you need. > > Andrew > -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Tue Jul 24 13:46:38 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 24 Jul 2012 13:46:38 +0200 Subject: [flashrom] [PATCH] Enable VX855 chipset In-Reply-To: References: <201104260757.p3Q7vXbH019056@mail2.student.tuwien.ac.at> <1303805850.4073.18.camel@mattotaupa> Message-ID: <201207241146.q6OBkcUr006795@mail2.student.tuwien.ac.at> Hello John, i am writing to you because of your previous work on VIA-based boards. I have refined flashrom's handling of all VIA VX-family chipsets in a new patch. If you still have access to some VIA systems could you please apply the patch[1] and at least probe for a chip? Be aware that we require the -p internal option now to select the internal programmer (there is no implicit default programmer set at compilation time any more). [1]: http://patchwork.coreboot.org/patch/3695/ -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From Helge.Wagner at ge.com Tue Jul 24 09:47:42 2012 From: Helge.Wagner at ge.com (Wagner, Helge (GE Germany)) Date: Tue, 24 Jul 2012 09:47:42 +0200 Subject: [flashrom] [PATCH] Fix VIA VX*** support. In-Reply-To: <1343100663-21461-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <966E8B72E12C6C469AF763C7C8D09F51059B97D8@BUDMLVEM06.e2k.ad.ge.com> <1343100663-21461-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <966E8B72E12C6C469AF763C7C8D09F51059B9BB9@BUDMLVEM06.e2k.ad.ge.com> Hello Stefan, your patch looks good. I tried it on my VX900 system and found it fully working. Logs attached. Regards, Helge -------------- next part -------------- A non-text attachment was scrubbed... Name: VX900-E-V.LOG Type: application/octet-stream Size: 82712 bytes Desc: VX900-E-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: VX900-r-V.LOG Type: application/octet-stream Size: 39441 bytes Desc: VX900-r-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: VX900-V.LOG Type: application/octet-stream Size: 39737 bytes Desc: VX900-V.LOG URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: VX900-w-V.LOG Type: application/octet-stream Size: 83960 bytes Desc: VX900-w-V.LOG URL: From svn at flashrom.org Tue Jul 24 18:33:56 2012 From: svn at flashrom.org (repository service) Date: Tue, 24 Jul 2012 18:33:56 +0200 Subject: [flashrom] [commit] r1553 - trunk Message-ID: Author: stefanct Date: Tue Jul 24 18:33:55 2012 New Revision: 1553 URL: http://flashrom.org/trac/flashrom/changeset/1553 Log: Intel 7 Series fixes (addition of QM77, fixed straps printing). I looked at the datasheet to be sure that the strap names (SPI, PCI, LPC) are the same as on the series 5 and 6 chipsets. Signed-off-by: Helge Wagner Acked-by: Stefan Tauner Modified: trunk/chipset_enable.c Modified: trunk/chipset_enable.c ============================================================================== --- trunk/chipset_enable.c Sun Jul 22 14:01:43 2012 (r1552) +++ trunk/chipset_enable.c Tue Jul 24 18:33:55 2012 (r1553) @@ -526,7 +526,7 @@ static const char *const straps_names_EP80579[] = { "SPI", "reserved", "reserved", "LPC" }; static const char *const straps_names_ich7_nm10[] = { "reserved", "SPI", "PCI", "LPC" }; static const char *const straps_names_ich8910[] = { "SPI", "SPI", "PCI", "LPC" }; - static const char *const straps_names_pch56[] = { "LPC", "reserved", "PCI", "SPI" }; + static const char *const straps_names_pch567[] = { "LPC", "reserved", "PCI", "SPI" }; static const char *const straps_names_unknown[] = { "unknown", "unknown", "unknown", "unknown" }; switch (ich_generation) { @@ -546,7 +546,8 @@ break; case CHIPSET_5_SERIES_IBEX_PEAK: case CHIPSET_6_SERIES_COUGAR_POINT: - straps_names = straps_names_pch56; + case CHIPSET_7_SERIES_PANTHER_POINT: + straps_names = straps_names_pch567; break; default: msg_gerr("%s: unknown ICH generation. Please report!\n", @@ -1298,6 +1299,7 @@ {0x8086, 0x1e46, NT, "Intel", "Z75", enable_flash_pch7}, {0x8086, 0x1e49, NT, "Intel", "B75", enable_flash_pch7}, {0x8086, 0x1e4a, NT, "Intel", "H77", enable_flash_pch7}, + {0x8086, 0x1e55, OK, "Intel", "QM77", enable_flash_pch7}, {0x8086, 0x1e57, NT, "Intel", "HM77", enable_flash_pch7}, {0x8086, 0x1e58, NT, "Intel", "UM77", enable_flash_pch7}, {0x8086, 0x1e59, NT, "Intel", "HM76", enable_flash_pch7}, From stefan.tauner at student.tuwien.ac.at Tue Jul 24 18:34:52 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 24 Jul 2012 18:34:52 +0200 Subject: [flashrom] [PATCH] Intel QM77 In-Reply-To: <966E8B72E12C6C469AF763C7C8D09F51059B9C1D@BUDMLVEM06.e2k.ad.ge.com> References: <966E8B72E12C6C469AF763C7C8D09F51059B9C1D@BUDMLVEM06.e2k.ad.ge.com> Message-ID: <201207241634.q6OGYqxX003438@mail2.student.tuwien.ac.at> On Tue, 24 Jul 2012 10:19:29 +0200 "Wagner, Helge (GE Germany)" wrote: > Hi all, > > Please find attached our changes for the QM77 chipset. I looked at the > datasheet to be sure that the strap names (SPI, PCI, LPC) are the same > as on the series 5 and 6 chipsets. > > Signed-off-by: Helge Wagner Thanks for your patch, committed in r1553 without a code change. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From dhendrix at google.com Wed Jul 25 00:17:02 2012 From: dhendrix at google.com (David Hendricks) Date: Tue, 24 Jul 2012 15:17:02 -0700 Subject: [flashrom] annotate Numonyx/Micron N25Q064 Message-ID: This adds the following: - missing feature_bits to indicate WREN required before WRSR and the presence of OTP bytes - a comment mentioning SFDP support - voltage range Signed-off-by: David Hendricks Index: flashchips.c =================================================================== --- flashchips.c (revision 1553) +++ flashchips.c (working copy) @@ -5431,6 +5431,9 @@ .model_id = ST_N25Q064, .total_size = 8192, .page_size = 256, + /* supports SFDP */ + /* OTP: 64B total; read 0x4B, write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, @@ -5450,6 +5453,7 @@ .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, + .voltage = {2700, 3600}, }, { -- David Hendricks (dhendrix) Systems Software Engineer, Google Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Wed Jul 25 03:27:49 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 25 Jul 2012 03:27:49 +0200 Subject: [flashrom] annotate Numonyx/Micron N25Q064 In-Reply-To: References: Message-ID: <201207250127.q6P1RnVU025193@mail2.student.tuwien.ac.at> On Tue, 24 Jul 2012 15:17:02 -0700 David Hendricks wrote: > This adds the following: > - missing feature_bits to indicate WREN required before WRSR and the > presence of OTP bytes > - a comment mentioning SFDP support > - voltage range > > Signed-off-by: David Hendricks Acked-by: Stefan Tauner Thanks for that! i'll commit it in my tested_stuff branch (soon-ish). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 25 03:50:10 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 25 Jul 2012 03:50:10 +0200 Subject: [flashrom] EN25QH16 (2MiB) READ/PROBE success In-Reply-To: <1733891342901434@web8e.yandex.ru> References: <1733891342901434@web8e.yandex.ru> Message-ID: <201207250150.q6P1oAAi032231@mail2.student.tuwien.ac.at> On Sun, 22 Jul 2012 00:10:34 +0400 andrew at ncrmnt.org wrote: > Hello, > > Just reporting a chip marked as UNTESTED as working. > Checked: Probe, Read. > Write untested, read produced good bootable results. > Used buspirate_spi programmer. > Log attached. Hello Andrew, thanks for your report! I have marked the flash chip as probe and read tested and will commit that later together with other small changes. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Wed Jul 25 04:03:10 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 25 Jul 2012 04:03:10 +0200 Subject: [flashrom] Flashrom on stock X60(s) In-Reply-To: References: Message-ID: <201207250203.q6P23A6Q003619@mail2.student.tuwien.ac.at> On Tue, 10 Jul 2012 19:24:21 +0200 Tomasz Ostaszewski wrote: > Hi all. > I want to flash on of my X60s with a coreboot using flashrom. I did > search the flashrom list archive, and I found the "FAILED: MX25L1605 > on Thinkpad X60s" (http://bit.ly/NetLop) and related "Lenovo T60 Type > 8743-GZU - RAM Support? 3Gb or 4Gb" (http://bit.ly/Mfhi1W) threads. > Despite what the heading says, those threads do treat about a > successful flashing of a stock X60s with flahshrom utility. There is > is almost a complete descripton of what to do, and what to use. > However, for me there's one piece of the puzzle missing - the patch. > Peter writes: > > "[..]You need the flashrom source, a small patch, and my bucts utility > from http://git.stuge.se/?p=bucts.git" > > The flashrom is readily available from SVN, the bucts from git, but > what are the patches and where to get them from? > And, if worst comes to the worst and I brick my X60s, would I be able > to resurrect it using a programmer and a SOIC-8 clip > (http://bit.ly/Nj8Sdx)? Or rather (de)soldering would be necessary? the patch(es) and bucts are needed because the chipset is locked down by the vendor bios so much that vanilla flashrom can not cope with it (and modifying it so that it does is neither worth it nor trivial). please ask the coreboot guys about the details of the procedure. afaik desoldering is not necessary but an external programmer. if you already know the complete procedure please ask for a coreboot wiki account and create an article about it. it is recurring regularly here and on the coreboot ml (and obviously no one cares to document it fully). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From dhendrix at google.com Wed Jul 25 21:14:33 2012 From: dhendrix at google.com (David Hendricks) Date: Wed, 25 Jul 2012 12:14:33 -0700 Subject: [flashrom] How to suffix similar-but-different parts? Message-ID: There's a SPI chip named "N25Q064" with 1.8V and 3V variants N25Q064A11 and N25Q064A13, respectively. The 1.8V has A11 suffixed, and the 3V version has A13 suffixed. The 'A' indicates the process technology which is likely to change without a change of device ID, so it's likely that we'll see something like N25Q064B11 or N25Q064B13 in the future. Fortunately, the two variants have different JEDEC IDs (0xBA17 and 0xBB17). So at least we can tell them apart via probing. stefanct and I were discussing how to name this chip couldn't really come up with a good solution. I am thinking that "N25Q064" is sufficient and that we should just re-use the same .name for two chip entries with different .voltage parameters. Thoughts? -- David Hendricks (dhendrix) Systems Software Engineer, Google Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Wed Jul 25 23:03:30 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Wed, 25 Jul 2012 23:03:30 +0200 Subject: [flashrom] How to suffix similar-but-different parts? In-Reply-To: References: Message-ID: <201207252103.q6PL3UMo001934@mail2.student.tuwien.ac.at> On Wed, 25 Jul 2012 12:14:33 -0700 David Hendricks wrote: > There's a SPI chip named "N25Q064" with 1.8V and 3V variants N25Q064A11 and > N25Q064A13, respectively. The 1.8V has A11 suffixed, and the 3V version has > A13 suffixed. The 'A' indicates the process technology which is likely to > change without a change of device ID, so it's likely that we'll see > something like N25Q064B11 or N25Q064B13 in the future. > > Fortunately, the two variants have different JEDEC IDs (0xBA17 and 0xBB17). > So at least we can tell them apart via probing. > > stefanct and I were discussing how to name this chip couldn't really come > up with a good solution. I am thinking that "N25Q064" is sufficient and > that we should just re-use the same .name for two chip entries with > different .voltage parameters. > > Thoughts? > datasheets for the devices in question: 3V version: http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/n25q_64mb_3v_65nm.pdf 1.8V version: http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/n25q_64mb_1_8v_65nm.pdf david: you dont give a rationale why you think that N25Q064 is enough. my argumnt why it is not enough: the .name is used to distinguish what flashrom defines as individual chips when presenting them to the user. so it is not enough that flashrom can distinguish the chips by their IDs but also the user must be able to tell the difference hence there must be no duplicative names. fwiw: i think we need a place holder for "any character" in model names and propose "." so in this case: N25Q064..1 N25Q064..3 rationale: easily understandable, regex semantic, not part of actual chip names, non-distracting. alternatively we could just ignore that problem (it is a future problem after all) and use N25Q064A11 and N25Q064A13. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From dhendrix at google.com Wed Jul 25 23:49:38 2012 From: dhendrix at google.com (David Hendricks) Date: Wed, 25 Jul 2012 14:49:38 -0700 Subject: [flashrom] How to suffix similar-but-different parts? In-Reply-To: <201207252103.q6PL3UMo001934@mail2.student.tuwien.ac.at> References: <201207252103.q6PL3UMo001934@mail2.student.tuwien.ac.at> Message-ID: On Wed, Jul 25, 2012 at 2:03 PM, Stefan Tauner < stefan.tauner at student.tuwien.ac.at> wrote: > On Wed, 25 Jul 2012 12:14:33 -0700 > David Hendricks wrote: > > > There's a SPI chip named "N25Q064" with 1.8V and 3V variants N25Q064A11 > and > > N25Q064A13, respectively. The 1.8V has A11 suffixed, and the 3V version > has > > A13 suffixed. The 'A' indicates the process technology which is likely to > > change without a change of device ID, so it's likely that we'll see > > something like N25Q064B11 or N25Q064B13 in the future. > > > > Fortunately, the two variants have different JEDEC IDs (0xBA17 and > 0xBB17). > > So at least we can tell them apart via probing. > > > > stefanct and I were discussing how to name this chip couldn't really come > > up with a good solution. I am thinking that "N25Q064" is sufficient and > > that we should just re-use the same .name for two chip entries with > > different .voltage parameters. > > > > Thoughts? > > > > datasheets for the devices in question: > 3V version: > http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/n25q_64mb_3v_65nm.pdf > 1.8V version: > http://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/n25q_64mb_1_8v_65nm.pdf > > david: you dont give a rationale why you think that N25Q064 is enough. > > my argumnt why it is not enough: the .name is used to distinguish > what flashrom defines as individual chips when presenting them to the > user. so it is not enough that flashrom can distinguish the chips by > their IDs but also the user must be able to tell the difference hence > there must be no duplicative names. > > fwiw: i think we need a place holder for "any character" in model names > and propose "." > so in this case: > N25Q064..1 > N25Q064..3 > rationale: easily understandable, regex semantic, not part of actual > chip names, non-distracting. > I like this. It's easy on the eyes, abstracts irrelevant details, and can be reasonably expected to scale. We can't predict all the possible parts the vendor will come up with, but so long as they have a well-defined part numbering scheme and we can represent irrelevant letters and numbers with dots we can at least avoid being wrong. I'll update my other patch using this schema. > alternatively we could just ignore that problem (it is a future problem > after all) and use N25Q064A11 and N25Q064A13. > Please let's not do that :-) It causes headaches if the information presented falls out of date or shows up incorrect. -- David Hendricks (dhendrix) Systems Software Engineer, Google Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Thu Jul 26 00:04:18 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Thu, 26 Jul 2012 00:04:18 +0200 Subject: [flashrom] How to suffix similar-but-different parts? In-Reply-To: References: <201207252103.q6PL3UMo001934@mail2.student.tuwien.ac.at> Message-ID: <201207252204.q6PM4Iqr003180@mail2.student.tuwien.ac.at> On Wed, 25 Jul 2012 14:49:38 -0700 David Hendricks wrote: > > alternatively we could just ignore that problem (it is a future problem > > after all) and use N25Q064A11 and N25Q064A13. > > > > Please let's not do that :-) It causes headaches if the information > presented falls out of date or shows up incorrect. we cant predict what vendors do. if they decide to give N25Q064B13 another id the .. representation is not correct too. we cant save the world just make it as good as we can :) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From dhendrix at google.com Thu Jul 26 01:08:58 2012 From: dhendrix at google.com (David Hendricks) Date: Wed, 25 Jul 2012 16:08:58 -0700 Subject: [flashrom] Numonyx N25Q064 (second try) Message-ID: This patch differentiates between the N25Q064 1.8V version and 3.0V version which have different JEDEC IDs. It extends the chip name to include the first few characters in the part number. The first two of those characters indicate the process technology (65nm) and feature set, neither of which matter for Flashrom. The third and fourth characters specify voltage and block/sector size and uniformity, which are important. To abstract the irrelevant portions of the part number leading up to the characters we care about, dots are used. This helps prevent unwanted changes in chip name that can break fragile scripts and confuse people. More about this schema here: http://www.flashrom.org/pipermail/flashrom/2012-July/009595.html Signed-off-by: David Hendricks Index: flashchips.c =================================================================== --- flashchips.c (revision 1553) +++ flashchips.c (working copy) @@ -5425,12 +5425,16 @@ { .vendor = "Numonyx", - .name = "N25Q064", + /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ + .name = "N25Q064..1E", .bustype = BUS_SPI, .manufacture_id = ST_ID, - .model_id = ST_N25Q064, + .model_id = ST_N25Q064__1E, .total_size = 8192, .page_size = 256, + /* supports SFDP */ + /* OTP: 64B total; read 0x4B, write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, @@ -5450,9 +5454,44 @@ .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, + .voltage = {1700, 2000}, }, { + .vendor = "Numonyx", + /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ + .name = "N25Q064..3E", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_N25Q064__3E, + .total_size = 8192, + .page_size = 256, + /* supports SFDP */ + /* OTP: 64B total; read 0x4B, write 0x42 */ + .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_d8, + }, { + .eraseblocks = { {8 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, + }, + + { .vendor = "PMC", .name = "Pm25LV010", .bustype = BUS_SPI, Index: flashchips.h =================================================================== --- flashchips.h (revision 1553) +++ flashchips.h (working copy) @@ -586,7 +586,8 @@ #define ST_M29W010B 0x23 #define ST_M29W040B 0xE3 #define ST_M29W512B 0x27 -#define ST_N25Q064 0xBA17 +#define ST_N25Q064__3E 0xBA17 /* N25Q064, 3V, 64KB/4KB blocks/sectors */ +#define ST_N25Q064__1E 0xBB17 /* N25Q064, 1.8V, 64KB/4KB blocks/sectors */ #define SYNCMOS_MVC_ID 0x40 /* SyncMOS (SM) and Mosel Vitelic Corporation (MVC) */ #define MVC_V29C51000T 0x00 -- David Hendricks (dhendrix) Systems Software Engineer, Google Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: From paulepanter at users.sourceforge.net Thu Jul 26 10:33:12 2012 From: paulepanter at users.sourceforge.net (Paul Menzel) Date: Thu, 26 Jul 2012 10:33:12 +0200 Subject: [flashrom] flashrom v0.9.5.2-r1553: Success with ASRock A780FullHD Message-ID: <1343291592.4691.15.camel@mattotaupa> Dear flashrom folks, I successfully read, erased and wrote the flash chip of my ASRock A780FullHD [1]. Here is the short log of erasing the chip. $ sudo ./flashrom -p internal -E -o flashrom-E.txt flashrom v0.9.5.2-r1553 on Linux 3.5.0+ (i686) flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK. Found chipset "AMD SB7x0/SB8x0/SB9x0". Enabling flash write... OK. Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. Erasing and writing flash chip... Erase/write done. Please find the verbose log files of all three operations attached. Writing was tested by reading the content of the flash chip, erasing the flash chip and writing the read image back. Thanks, Paul [1] http://www.asrock.com/mb/overview.asp?Model=A780FullHD -------------- next part -------------- flashrom v0.9.5.2-r1553 on Linux 3.5.0+ (i686) flashrom was built with unknown PCI library, GCC 4.7.1, big endian Command line (5 args): ./flashrom -p internal -E -o flashrom-E.txt Calibrating delay loop... OS timer resolution is 2 usecs, 830M loops per second, 10 myus = 12 us, 100 myus = 101 us, 1000 myus = 1000 us, 10000 myus = 10014 us, 8 myus = 9 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: " " DMI string baseboard-product-name: "A780FullHD" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found Winbond Super I/O, id 88 Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=1, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=0, DropOneClkOnRd=0 NormSpeed is 33 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Chip status register is 00 Chip status register: Status Register Write Disable (SRWD) is not set Chip status register: Bit 6 is not set Chip status register: Bit 5 / Block Protect 3 (BP3) is not set Chip status register: Bit 4 / Block Protect 2 (BP2) is not set Chip status register: Bit 3 / Block Protect 1 (BP1) is not set Chip status register: Bit 2 / Block Protect 0 (BP0) is not set Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Unknown SFDP-capable chip, 0 kB: Signature = 0x00000000 (should be 0x50444653) No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0x56, id2 0x04, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Macronix flash chip "MX25L8005" (1024 kB, SPI). Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:E, 0x001000-0x001fff:E, 0x002000-0x002fff:E, 0x003000-0x003fff:E, 0x004000-0x004fff:E, 0x005000-0x005fff:E, 0x006000-0x006fff:E, 0x007000-0x007fff:E, 0x008000-0x008fff:E, 0x009000-0x009fff:E, 0x00a000-0x00afff:E, 0x00b000-0x00bfff:E, 0x00c000-0x00cfff:E, 0x00d000-0x00dfff:E, 0x00e000-0x00efff:E, 0x00f000-0x00ffff:E, 0x010000-0x010fff:E, 0x011000-0x011fff:E, 0x012000-0x012fff:E, 0x013000-0x013fff:E, 0x014000-0x014fff:E, 0x015000-0x015fff:E, 0x016000-0x016fff:E, 0x017000-0x017fff:E, 0x018000-0x018fff:E, 0x019000-0x019fff:E, 0x01a000-0x01afff:E, 0x01b000-0x01bfff:E, 0x01c000-0x01cfff:E, 0x01d000-0x01dfff:E, 0x01e000-0x01efff:E, 0x01f000-0x01ffff:E, 0x020000-0x020fff:E, 0x021000-0x021fff:E, 0x022000-0x022fff:E, 0x023000-0x023fff:E, 0x024000-0x024fff:E, 0x025000-0x025fff:E, 0x026000-0x026fff:E, 0x027000-0x027fff:E, 0x028000-0x028fff:E, 0x029000-0x029fff:E, 0x02a000-0x02afff:E, 0x02b000-0x02bfff:E, 0x02c000-0x02cfff:E, 0x02d000-0x02dfff:E, 0x02e000-0x02efff:E, 0x02f000-0x02ffff:E, 0x030000-0x030fff:E, 0x031000-0x031fff:E, 0x032000-0x032fff:E, 0x033000-0x033fff:E, 0x034000-0x034fff:E, 0x035000-0x035fff:E, 0x036000-0x036fff:E, 0x037000-0x037fff:E, 0x038000-0x038fff:E, 0x039000-0x039fff:E, 0x03a000-0x03afff:E, 0x03b000-0x03bfff:E, 0x03c000-0x03cfff:E, 0x03d000-0x03dfff:E, 0x03e000-0x03efff:E, 0x03f000-0x03ffff:E, 0x040000-0x040fff:E, 0x041000-0x041fff:E, 0x042000-0x042fff:E, 0x043000-0x043fff:E, 0x044000-0x044fff:E, 0x045000-0x045fff:E, 0x046000-0x046fff:E, 0x047000-0x047fff:E, 0x048000-0x048fff:E, 0x049000-0x049fff:E, 0x04a000-0x04afff:E, 0x04b000-0x04bfff:E, 0x04c000-0x04cfff:E, 0x04d000-0x04dfff:E, 0x04e000-0x04efff:E, 0x04f000-0x04ffff:E, 0x050000-0x050fff:E, 0x051000-0x051fff:E, 0x052000-0x052fff:E, 0x053000-0x053fff:E, 0x054000-0x054fff:E, 0x055000-0x055fff:E, 0x056000-0x056fff:E, 0x057000-0x057fff:E, 0x058000-0x058fff:E, 0x059000-0x059fff:E, 0x05a000-0x05afff:E, 0x05b000-0x05bfff:E, 0x05c000-0x05cfff:E, 0x05d000-0x05dfff:E, 0x05e000-0x05efff:E, 0x05f000-0x05ffff:E, 0x060000-0x060fff:E, 0x061000-0x061fff:E, 0x062000-0x062fff:E, 0x063000-0x063fff:E, 0x064000-0x064fff:E, 0x065000-0x065fff:E, 0x066000-0x066fff:E, 0x067000-0x067fff:E, 0x068000-0x068fff:E, 0x069000-0x069fff:E, 0x06a000-0x06afff:E, 0x06b000-0x06bfff:E, 0x06c000-0x06cfff:E, 0x06d000-0x06dfff:E, 0x06e000-0x06efff:E, 0x06f000-0x06ffff:E, 0x070000-0x070fff:E, 0x071000-0x071fff:E, 0x072000-0x072fff:E, 0x073000-0x073fff:E, 0x074000-0x074fff:E, 0x075000-0x075fff:E, 0x076000-0x076fff:E, 0x077000-0x077fff:E, 0x078000-0x078fff:E, 0x079000-0x079fff:E, 0x07a000-0x07afff:E, 0x07b000-0x07bfff:E, 0x07c000-0x07cfff:E, 0x07d000-0x07dfff:E, 0x07e000-0x07efff:E, 0x07f000-0x07ffff:E, 0x080000-0x080fff:E, 0x081000-0x081fff:E, 0x082000-0x082fff:E, 0x083000-0x083fff:E, 0x084000-0x084fff:E, 0x085000-0x085fff:E, 0x086000-0x086fff:E, 0x087000-0x087fff:E, 0x088000-0x088fff:E, 0x089000-0x089fff:E, 0x08a000-0x08afff:E, 0x08b000-0x08bfff:E, 0x08c000-0x08cfff:E, 0x08d000-0x08dfff:E, 0x08e000-0x08efff:E, 0x08f000-0x08ffff:E, 0x090000-0x090fff:E, 0x091000-0x091fff:E, 0x092000-0x092fff:E, 0x093000-0x093fff:E, 0x094000-0x094fff:E, 0x095000-0x095fff:E, 0x096000-0x096fff:E, 0x097000-0x097fff:E, 0x098000-0x098fff:E, 0x099000-0x099fff:E, 0x09a000-0x09afff:E, 0x09b000-0x09bfff:E, 0x09c000-0x09cfff:E, 0x09d000-0x09dfff:E, 0x09e000-0x09efff:E, 0x09f000-0x09ffff:E, 0x0a0000-0x0a0fff:E, 0x0a1000-0x0a1fff:E, 0x0a2000-0x0a2fff:E, 0x0a3000-0x0a3fff:E, 0x0a4000-0x0a4fff:E, 0x0a5000-0x0a5fff:E, 0x0a6000-0x0a6fff:E, 0x0a7000-0x0a7fff:E, 0x0a8000-0x0a8fff:E, 0x0a9000-0x0a9fff:E, 0x0aa000-0x0aafff:E, 0x0ab000-0x0abfff:E, 0x0ac000-0x0acfff:E, 0x0ad000-0x0adfff:E, 0x0ae000-0x0aefff:E, 0x0af000-0x0affff:E, 0x0b0000-0x0b0fff:E, 0x0b1000-0x0b1fff:E, 0x0b2000-0x0b2fff:E, 0x0b3000-0x0b3fff:E, 0x0b4000-0x0b4fff:E, 0x0b5000-0x0b5fff:E, 0x0b6000-0x0b6fff:E, 0x0b7000-0x0b7fff:E, 0x0b8000-0x0b8fff:E, 0x0b9000-0x0b9fff:E, 0x0ba000-0x0bafff:E, 0x0bb000-0x0bbfff:E, 0x0bc000-0x0bcfff:E, 0x0bd000-0x0bdfff:E, 0x0be000-0x0befff:E, 0x0bf000-0x0bffff:E, 0x0c0000-0x0c0fff:E, 0x0c1000-0x0c1fff:E, 0x0c2000-0x0c2fff:E, 0x0c3000-0x0c3fff:E, 0x0c4000-0x0c4fff:E, 0x0c5000-0x0c5fff:E, 0x0c6000-0x0c6fff:E, 0x0c7000-0x0c7fff:E, 0x0c8000-0x0c8fff:E, 0x0c9000-0x0c9fff:E, 0x0ca000-0x0cafff:E, 0x0cb000-0x0cbfff:E, 0x0cc000-0x0ccfff:E, 0x0cd000-0x0cdfff:E, 0x0ce000-0x0cefff:E, 0x0cf000-0x0cffff:E, 0x0d0000-0x0d0fff:E, 0x0d1000-0x0d1fff:E, 0x0d2000-0x0d2fff:E, 0x0d3000-0x0d3fff:E, 0x0d4000-0x0d4fff:E, 0x0d5000-0x0d5fff:E, 0x0d6000-0x0d6fff:E, 0x0d7000-0x0d7fff:E, 0x0d8000-0x0d8fff:E, 0x0d9000-0x0d9fff:E, 0x0da000-0x0dafff:E, 0x0db000-0x0dbfff:E, 0x0dc000-0x0dcfff:E, 0x0dd000-0x0ddfff:E, 0x0de000-0x0defff:E, 0x0df000-0x0dffff:E, 0x0e0000-0x0e0fff:E, 0x0e1000-0x0e1fff:E, 0x0e2000-0x0e2fff:E, 0x0e3000-0x0e3fff:E, 0x0e4000-0x0e4fff:E, 0x0e5000-0x0e5fff:E, 0x0e6000-0x0e6fff:E, 0x0e7000-0x0e7fff:E, 0x0e8000-0x0e8fff:E, 0x0e9000-0x0e9fff:E, 0x0ea000-0x0eafff:E, 0x0eb000-0x0ebfff:E, 0x0ec000-0x0ecfff:E, 0x0ed000-0x0edfff:E, 0x0ee000-0x0eefff:E, 0x0ef000-0x0effff:E, 0x0f0000-0x0f0fff:E, 0x0f1000-0x0f1fff:E, 0x0f2000-0x0f2fff:E, 0x0f3000-0x0f3fff:E, 0x0f4000-0x0f4fff:E, 0x0f5000-0x0f5fff:E, 0x0f6000-0x0f6fff:E, 0x0f7000-0x0f7fff:E, 0x0f8000-0x0f8fff:E, 0x0f9000-0x0f9fff:E, 0x0fa000-0x0fafff:E, 0x0fb000-0x0fbfff:E, 0x0fc000-0x0fcfff:E, 0x0fd000-0x0fdfff:E, 0x0fe000-0x0fefff:E, 0x0ff000-0x0fffff:E Erase/write done. -------------- next part -------------- flashrom v0.9.5.2-r1553 on Linux 3.5.0+ (i686) flashrom was built with unknown PCI library, GCC 4.7.1, big endian Command line (6 args): ./flashrom -p internal -r asrock-a780fullhd-BIOS-1.00.image -o flashrom-r.txt Calibrating delay loop... OS timer resolution is 2 usecs, 820M loops per second, 10 myus = 11 us, 100 myus = 100 us, 1000 myus = 988 us, 10000 myus = 9895 us, 8 myus = 10 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: " " DMI string baseboard-product-name: "A780FullHD" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found Winbond Super I/O, id 88 Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=1, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=0, DropOneClkOnRd=0 NormSpeed is 33 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Chip status register is 00 Chip status register: Status Register Write Disable (SRWD) is not set Chip status register: Bit 6 is not set Chip status register: Bit 5 / Block Protect 3 (BP3) is not set Chip status register: Bit 4 / Block Protect 2 (BP2) is not set Chip status register: Bit 3 / Block Protect 1 (BP1) is not set Chip status register: Bit 2 / Block Protect 0 (BP0) is not set Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Unknown SFDP-capable chip, 0 kB: Signature = 0x00000000 (should be 0x50444653) No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0x56, id2 0x04, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Macronix flash chip "MX25L8005" (1024 kB, SPI). Reading flash... done. -------------- next part -------------- flashrom v0.9.5.2-r1553 on Linux 3.5.0+ (i686) flashrom was built with unknown PCI library, GCC 4.7.1, big endian Command line (5 args): ./flashrom -p internal -V -o flashrom-V.txt Calibrating delay loop... OS timer resolution is 2 usecs, 830M loops per second, 10 myus = 12 us, 100 myus = 101 us, 1000 myus = 1000 us, 10000 myus = 10004 us, 8 myus = 10 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: " " DMI string baseboard-product-name: "A780FullHD" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found Winbond Super I/O, id 88 Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=1, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=0, DropOneClkOnRd=0 NormSpeed is 33 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Chip status register is 00 Chip status register: Status Register Write Disable (SRWD) is not set Chip status register: Bit 6 is not set Chip status register: Bit 5 / Block Protect 3 (BP3) is not set Chip status register: Bit 4 / Block Protect 2 (BP2) is not set Chip status register: Bit 3 / Block Protect 1 (BP1) is not set Chip status register: Bit 2 / Block Protect 0 (BP0) is not set Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Unknown SFDP-capable chip, 0 kB: Signature = 0x00000000 (should be 0x50444653) No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0x56, id2 0x04, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0x4d, id2 0x49, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xdd, id2 0x9e, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Macronix flash chip "MX25L8005" (1024 kB, SPI). No operations were specified. -------------- next part -------------- flashrom v0.9.5.2-r1553 on Linux 3.5.0+ (i686) flashrom was built with unknown PCI library, GCC 4.7.1, big endian Command line (6 args): ./flashrom -p internal -w asrock-a780fullhd-BIOS-1.00.image -o flashrom-w.txt Calibrating delay loop... OS timer resolution is 2 usecs, 827M loops per second, 10 myus = 11 us, 100 myus = 101 us, 1000 myus = 996 us, 10000 myus = 9979 us, 8 myus = 9 us, OK. Initializing internal programmer No coreboot table found. DMI string system-manufacturer: "To Be Filled By O.E.M." DMI string system-product-name: "To Be Filled By O.E.M." DMI string system-version: "To Be Filled By O.E.M." DMI string baseboard-manufacturer: " " DMI string baseboard-product-name: "A780FullHD" DMI string baseboard-version: " " DMI string chassis-type: "Desktop" Found Winbond Super I/O, id 88 Found chipset "AMD SB7x0/SB8x0/SB9x0" with PCI ID 1002:439d. Enabling flash write... SPI base address is at 0xfec10000 AltSpiCSEnable=0, SpiRomEnable=1, AbortEnable=0 PrefetchEnSPIFromIMC=0, PrefetchEnSPIFromHost=1, SpiOpEnInLpcMode=1 SpiArbEnable=1, SpiAccessMacRomEn=1, SpiHostAccessRomEn=1, ArbWaitCount=4, SpiBridgeDisable=0, DropOneClkOnRd=0 NormSpeed is 33 MHz GPIO11 used for SPI_DO GPIO12 used for SPI_DI GPIO31 used for SPI_HOLD GPIO32 used for SPI_CS GPIO47 used for SPI_CLK SB700 IMC is not active. ROM strap override is not active OK. The following protocols are supported: LPC, FWH, SPI. Probing for AMIC A25L05PT, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L05PU, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PT, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L10PU, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PT, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L20PU, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PT, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L40PU, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L80P, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PT, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L16PU, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L080, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L016, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25L032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for AMIC A25LQ032, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF021, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF041A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF321A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DF641(A), 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25DQ161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25F512B, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT25FS040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF041, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF081A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26DF161A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT26F004, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45CS1282, 16896 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB011D, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB021D, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB041D, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB081D, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB161D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321C, 4224 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB321D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel AT45DB642D, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for EMST F25L008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B05T, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B10T, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B20T, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B40T, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B80T, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B16T, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B32T, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25B64T, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F05, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25F32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q80(A), 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q32(A/B), 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon EN25QH32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for GigaDevice GD25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1005, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L2005, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L4005, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L8005, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Chip status register is 00 Chip status register: Status Register Write Disable (SRWD) is not set Chip status register: Bit 6 is not set Chip status register: Bit 5 / Block Protect 3 (BP3) is not set Chip status register: Bit 4 / Block Protect 2 (BP2) is not set Chip status register: Bit 3 / Block Protect 1 (BP1) is not set Chip status register: Bit 2 / Block Protect 0 (BP0) is not set Chip status register: Write Enable Latch (WEL) is not set Chip status register: Write In Progress (WIP/BUSY) is not set Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000. Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635D, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L1635E, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3205, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L3235D, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L6405, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix MX25L12805, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx M25PE16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Numonyx N25Q064, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV010, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV020, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV040, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC Pm25LV512, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo LF25FW203A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL004A, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL008A, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL016A, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL032A, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Spansion S25FL064A, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25LF040A, 512 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25LF080A, 1024 kB: probe_spi_res2: id1 0x13, id2 0x13 Probing for SST SST25VF010, 128 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF016B, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF032B, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF064C, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF040B, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST SST25VF040B.REMS, 512 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for SST SST25VF080B, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05-A, 64 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P05, 64 kB: Ignoring RES in favour of RDID. Probing for ST M25P10-A, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P10, 128 kB: Ignoring RES in favour of RDID. Probing for ST M25P20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P40-old, 512 kB: Ignoring RES in favour of RDID. Probing for ST M25P80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25P128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST M25PX64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25Q128, 16384 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X10, 128 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X20, 256 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X40, 512 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X80, 1024 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X16, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X32, 4096 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Winbond W25X64, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Unknown SFDP-capable chip, 0 kB: Signature = 0x00000000 (should be 0x50444653) No SFDP signature found. Probing for AMIC unknown AMIC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Atmel unknown Atmel SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Eon unknown Eon SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Macronix unknown Macronix SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for PMC unknown PMC SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for SST unknown SST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for ST unknown ST SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Sanyo unknown Sanyo SPI chip, 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (RDID), 0 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2014 Probing for Generic unknown SPI chip (REMS), 0 kB: probe_spi_rems: id1 0xc2, id2 0x13 Probing for AMIC A49LF040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT49LH002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AB, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 82802AC, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL002, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm49FL004, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LHF00L04, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF002A/B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF003A/B, 384 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004A/B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF004C, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF008C, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF016C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF020A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF080A, 1024 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST49LF160C, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW040B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080A, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FLW080B, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW002, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW016, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW040, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50FW080, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M50LPW116, 2048 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040C, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FA, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V040FC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080A, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002A, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W49V002FA, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W39V080FA (dual mode), 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Found Macronix flash chip "MX25L8005" (1024 kB, SPI). Flash image seems to be a legacy BIOS. Disabling coreboot-related checks. Reading old flash chip contents... done. Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:W, 0x001000-0x001fff:W, 0x002000-0x002fff:W, 0x003000-0x003fff:W, 0x004000-0x004fff:W, 0x005000-0x005fff:W, 0x006000-0x006fff:W, 0x007000-0x007fff:W, 0x008000-0x008fff:W, 0x009000-0x009fff:W, 0x00a000-0x00afff:W, 0x00b000-0x00bfff:S, 0x00c000-0x00cfff:S, 0x00d000-0x00dfff:S, 0x00e000-0x00efff:S, 0x00f000-0x00ffff:W, 0x010000-0x010fff:W, 0x011000-0x011fff:W, 0x012000-0x012fff:W, 0x013000-0x013fff:W, 0x014000-0x014fff:W, 0x015000-0x015fff:W, 0x016000-0x016fff:W, 0x017000-0x017fff:W, 0x018000-0x018fff:W, 0x019000-0x019fff:W, 0x01a000-0x01afff:W, 0x01b000-0x01bfff:W, 0x01c000-0x01cfff:W, 0x01d000-0x01dfff:W, 0x01e000-0x01efff:W, 0x01f000-0x01ffff:W, 0x020000-0x020fff:W, 0x021000-0x021fff:W, 0x022000-0x022fff:W, 0x023000-0x023fff:W, 0x024000-0x024fff:W, 0x025000-0x025fff:W, 0x026000-0x026fff:W, 0x027000-0x027fff:W, 0x028000-0x028fff:W, 0x029000-0x029fff:W, 0x02a000-0x02afff:W, 0x02b000-0x02bfff:W, 0x02c000-0x02cfff:W, 0x02d000-0x02dfff:W, 0x02e000-0x02efff:W, 0x02f000-0x02ffff:W, 0x030000-0x030fff:W, 0x031000-0x031fff:W, 0x032000-0x032fff:W, 0x033000-0x033fff:W, 0x034000-0x034fff:W, 0x035000-0x035fff:W, 0x036000-0x036fff:W, 0x037000-0x037fff:W, 0x038000-0x038fff:W, 0x039000-0x039fff:W, 0x03a000-0x03afff:W, 0x03b000-0x03bfff:W, 0x03c000-0x03cfff:W, 0x03d000-0x03dfff:W, 0x03e000-0x03efff:W, 0x03f000-0x03ffff:W, 0x040000-0x040fff:W, 0x041000-0x041fff:W, 0x042000-0x042fff:W, 0x043000-0x043fff:W, 0x044000-0x044fff:W, 0x045000-0x045fff:W, 0x046000-0x046fff:W, 0x047000-0x047fff:W, 0x048000-0x048fff:W, 0x049000-0x049fff:W, 0x04a000-0x04afff:W, 0x04b000-0x04bfff:W, 0x04c000-0x04cfff:W, 0x04d000-0x04dfff:W, 0x04e000-0x04efff:W, 0x04f000-0x04ffff:W, 0x050000-0x050fff:W, 0x051000-0x051fff:W, 0x052000-0x052fff:W, 0x053000-0x053fff:W, 0x054000-0x054fff:W, 0x055000-0x055fff:W, 0x056000-0x056fff:W, 0x057000-0x057fff:W, 0x058000-0x058fff:W, 0x059000-0x059fff:W, 0x05a000-0x05afff:W, 0x05b000-0x05bfff:W, 0x05c000-0x05cfff:W, 0x05d000-0x05dfff:W, 0x05e000-0x05efff:W, 0x05f000-0x05ffff:W, 0x060000-0x060fff:W, 0x061000-0x061fff:W, 0x062000-0x062fff:W, 0x063000-0x063fff:W, 0x064000-0x064fff:W, 0x065000-0x065fff:W, 0x066000-0x066fff:W, 0x067000-0x067fff:W, 0x068000-0x068fff:W, 0x069000-0x069fff:W, 0x06a000-0x06afff:W, 0x06b000-0x06bfff:W, 0x06c000-0x06cfff:W, 0x06d000-0x06dfff:W, 0x06e000-0x06efff:W, 0x06f000-0x06ffff:W, 0x070000-0x070fff:W, 0x071000-0x071fff:W, 0x072000-0x072fff:W, 0x073000-0x073fff:W, 0x074000-0x074fff:W, 0x075000-0x075fff:W, 0x076000-0x076fff:W, 0x077000-0x077fff:W, 0x078000-0x078fff:W, 0x079000-0x079fff:W, 0x07a000-0x07afff:W, 0x07b000-0x07bfff:W, 0x07c000-0x07cfff:W, 0x07d000-0x07dfff:W, 0x07e000-0x07efff:W, 0x07f000-0x07ffff:W, 0x080000-0x080fff:W, 0x081000-0x081fff:W, 0x082000-0x082fff:W, 0x083000-0x083fff:W, 0x084000-0x084fff:W, 0x085000-0x085fff:W, 0x086000-0x086fff:W, 0x087000-0x087fff:W, 0x088000-0x088fff:W, 0x089000-0x089fff:W, 0x08a000-0x08afff:W, 0x08b000-0x08bfff:W, 0x08c000-0x08cfff:W, 0x08d000-0x08dfff:W, 0x08e000-0x08efff:W, 0x08f000-0x08ffff:W, 0x090000-0x090fff:W, 0x091000-0x091fff:W, 0x092000-0x092fff:W, 0x093000-0x093fff:W, 0x094000-0x094fff:W, 0x095000-0x095fff:W, 0x096000-0x096fff:W, 0x097000-0x097fff:W, 0x098000-0x098fff:W, 0x099000-0x099fff:W, 0x09a000-0x09afff:W, 0x09b000-0x09bfff:W, 0x09c000-0x09cfff:W, 0x09d000-0x09dfff:W, 0x09e000-0x09efff:W, 0x09f000-0x09ffff:W, 0x0a0000-0x0a0fff:W, 0x0a1000-0x0a1fff:W, 0x0a2000-0x0a2fff:W, 0x0a3000-0x0a3fff:W, 0x0a4000-0x0a4fff:W, 0x0a5000-0x0a5fff:W, 0x0a6000-0x0a6fff:W, 0x0a7000-0x0a7fff:W, 0x0a8000-0x0a8fff:W, 0x0a9000-0x0a9fff:W, 0x0aa000-0x0aafff:W, 0x0ab000-0x0abfff:W, 0x0ac000-0x0acfff:W, 0x0ad000-0x0adfff:W, 0x0ae000-0x0aefff:W, 0x0af000-0x0affff:W, 0x0b0000-0x0b0fff:W, 0x0b1000-0x0b1fff:W, 0x0b2000-0x0b2fff:W, 0x0b3000-0x0b3fff:W, 0x0b4000-0x0b4fff:W, 0x0b5000-0x0b5fff:W, 0x0b6000-0x0b6fff:W, 0x0b7000-0x0b7fff:W, 0x0b8000-0x0b8fff:S, 0x0b9000-0x0b9fff:S, 0x0ba000-0x0bafff:S, 0x0bb000-0x0bbfff:S, 0x0bc000-0x0bcfff:S, 0x0bd000-0x0bdfff:S, 0x0be000-0x0befff:S, 0x0bf000-0x0bffff:S, 0x0c0000-0x0c0fff:S, 0x0c1000-0x0c1fff:S, 0x0c2000-0x0c2fff:S, 0x0c3000-0x0c3fff:S, 0x0c4000-0x0c4fff:S, 0x0c5000-0x0c5fff:S, 0x0c6000-0x0c6fff:S, 0x0c7000-0x0c7fff:S, 0x0c8000-0x0c8fff:S, 0x0c9000-0x0c9fff:S, 0x0ca000-0x0cafff:S, 0x0cb000-0x0cbfff:S, 0x0cc000-0x0ccfff:S, 0x0cd000-0x0cdfff:S, 0x0ce000-0x0cefff:S, 0x0cf000-0x0cffff:S, 0x0d0000-0x0d0fff:S, 0x0d1000-0x0d1fff:S, 0x0d2000-0x0d2fff:S, 0x0d3000-0x0d3fff:S, 0x0d4000-0x0d4fff:S, 0x0d5000-0x0d5fff:S, 0x0d6000-0x0d6fff:S, 0x0d7000-0x0d7fff:S, 0x0d8000-0x0d8fff:S, 0x0d9000-0x0d9fff:S, 0x0da000-0x0dafff:S, 0x0db000-0x0dbfff:S, 0x0dc000-0x0dcfff:S, 0x0dd000-0x0ddfff:S, 0x0de000-0x0defff:S, 0x0df000-0x0dffff:W, 0x0e0000-0x0e0fff:S, 0x0e1000-0x0e1fff:S, 0x0e2000-0x0e2fff:S, 0x0e3000-0x0e3fff:S, 0x0e4000-0x0e4fff:S, 0x0e5000-0x0e5fff:S, 0x0e6000-0x0e6fff:S, 0x0e7000-0x0e7fff:S, 0x0e8000-0x0e8fff:S, 0x0e9000-0x0e9fff:S, 0x0ea000-0x0eafff:S, 0x0eb000-0x0ebfff:S, 0x0ec000-0x0ecfff:W, 0x0ed000-0x0edfff:S, 0x0ee000-0x0eefff:S, 0x0ef000-0x0effff:S, 0x0f0000-0x0f0fff:W, 0x0f1000-0x0f1fff:W, 0x0f2000-0x0f2fff:W, 0x0f3000-0x0f3fff:W, 0x0f4000-0x0f4fff:W, 0x0f5000-0x0f5fff:W, 0x0f6000-0x0f6fff:W, 0x0f7000-0x0f7fff:W, 0x0f8000-0x0f8fff:W, 0x0f9000-0x0f9fff:W, 0x0fa000-0x0fafff:W, 0x0fb000-0x0fbfff:W, 0x0fc000-0x0fcfff:W, 0x0fd000-0x0fdfff:W, 0x0fe000-0x0fefff:W, 0x0ff000-0x0fffff:W Erase/write done. Verifying flash... VERIFIED. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part URL: From paulepanter at users.sourceforge.net Thu Jul 26 11:17:40 2012 From: paulepanter at users.sourceforge.net (Paul Menzel) Date: Thu, 26 Jul 2012 11:17:40 +0200 Subject: [flashrom] ASRock A780FullHD: Experience upgrading from BIOS 1.00 to 1.70 Message-ID: <1343294260.4691.39.camel@mattotaupa> Dear flashrom folks, first thanks to stefanct and patrickg in #flashrom. I tried to upgrade the BIOS of the ASRock A780FullHD [1] from version 1.00 to 1.70 [2]. To keep the MAC address of the board I compared the the 1.00 image read with flashrom from my board and 1.00 vendor image from [2]. After converting them with `od -tx1 -Ax` I compared both with `diff -u`. $ diff -u /tmp/vendor /tmp/myimage --- /tmp/3 2012-07-25 17:00:51.000000000 +0200 +++ /tmp/4 2012-07-25 17:22:56.000000000 +0200 @@ -50239,6 +50239,47 @@ 0dfff0 53 43 30 38 30 30 00 c0 8d d6 44 2b 14 00 fe 3f 0e0000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff * +0ec000 05 00 00 00 00 08 00 00 10 00 01 ff ff ff ff ff +0ec010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +* +0ec800 00 80 01 00 40 00 00 08 10 00 01 ff ff ff ff ff +0ec810 00 19 66 8b 09 1a 2e ff ff ff ff ff ff ff ff ff +0ec820 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +* +0ec840 81 00 02 00 00 03 40 08 10 00 01 ff ff ff ff ff +0ec850 10 04 01 00 01 00 00 00 01 00 40 00 01 00 80 00 +0ec860 01 00 a0 00 00 00 00 00 00 00 00 00 01 00 c0 00 +0ec870 01 00 e0 00 e0 3f 38 00 e0 3f 18 00 00 00 00 00 +0ec880 e0 3f 18 00 46 00 00 00 00 00 00 00 25 20 00 00 +0ec890 13 91 16 0c 20 12 a2 20 69 80 10 37 ff 02 00 ae +0ec8a0 03 00 00 00 00 00 2f 01 00 00 00 00 00 00 00 00 +0ec8b0 01 ff ff ff 22 13 11 10 15 15 15 15 15 14 14 15 +0ec8c0 15 00 00 00 00 2f 34 10 16 15 15 15 15 15 16 15 +0ec8d0 16 00 00 00 39 00 00 00 16 00 00 00 39 00 00 00 +0ec8e0 39 00 00 00 39 00 00 00 22 12 11 20 16 16 16 16 +0ec8f0 16 16 16 16 16 00 00 00 00 2f 2b 00 15 15 15 15 +0ec900 14 14 14 15 15 00 00 00 3b 00 00 00 3b 00 00 00 +0ec910 3b 00 00 00 3b 00 00 00 ef be ad de 01 ff ff ff +0ec920 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +* +0ecb40 08 00 03 00 eb 00 40 0b 10 00 01 ff ff ff ff ff +0ecb50 ff 04 20 08 8b 31 00 00 00 00 00 00 00 00 00 00 +0ecb60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +* +0ecb80 00 00 04 48 48 52 52 43 43 55 55 00 00 00 00 00 +0ecb90 00 00 00 01 00 02 03 04 05 06 07 00 00 00 00 02 +0ecba0 3d f7 75 18 00 00 00 00 00 00 00 00 00 00 00 00 +0ecbb0 00 00 00 00 00 00 00 00 01 00 02 03 04 05 06 07 +0ecbc0 08 09 0a 0b 00 00 00 00 01 52 5c 00 00 00 00 00 +0ecbd0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0ecbe0 00 00 00 00 00 00 01 02 03 00 01 02 03 00 01 02 +0ecbf0 03 04 05 00 00 00 00 02 58 cc 42 ca 00 00 00 00 +0ecc00 00 01 02 03 00 00 00 00 01 d1 6a 00 00 00 00 00 +0ecc10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 +0ecc20 03 04 05 06 07 08 09 00 00 00 00 0d 00 04 00 10 +0ecc30 03 2b 0c 10 00 01 ff ff ff ff ff ff ff ff ff ff +0ecc40 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff +* 0f0000 5e 9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * The MAC address is stored in the line +0ec810 00 19 66 8b 09 1a 2e ff ff ff ff ff ff ff ff ff although it is not clear what the `2e` means. So the vendor image leaves the area from 0e0000 to 0effff filled with ff. I would guess that on my board that area is filled with the chosen configurations in the BIOS setup menu. To keep that configuration I thought to not overwrite that area (0e0000? 0effff). The layout stuff in flashrom makes that possible. $ more asrock-a780fullhd-BIOS-flashrom.layout 000000:0dffff vendor1 0e0000:0effff custom 0f0000:0fffff vendor2 $ sudo ./flashrom -p internal --layout asrock-a780fullhd-BIOS-flashrom.layout --image vendor1 --image vendor2 -w A780FHD1.70 -o flashrom-w-A780FHD1.70.txt That worked without problem and reboot worked. The BIOS options were still reset to default due to some checksum error or other check stored in CMOS(?) or NVRAM(?). Starting Debian then worked. But after being happy suddenly the system just shut down after around twelve minutes. I heard some click sound from the case (like when rebooting or so) and the monitor just went black. The fans ? I do not know which, probably from the power supply ? were still running. I turned off the system by holding the power button for ten seconds. I did not find anything in the system logs. So it might be due to the new BIOS version 1.70, some random Debian error, I did not experience before and just happened by coincident, or something else. Although the timing after the BIOS upgrade and the running fans point to the BIOS in my opinion. Starting the system worked luckily and to not take any chances, I wrote the 1.00 BIOS image, which I had read with flashrom from the board in the very beginning, to the chip. Shutting down the system and starting it again did not work. Nothing on the monitor. Luckily turning the system off again and plugging out the power cord worked. Though note that the BIOS setting were again lost and set back to the defaults. This is probably again due to some checksum stored in CMOS/NVRAM(?). So all in all this is very strange. Especially since it looks like the BIOS settings were reset after each upgrade and downgrade process. If you have any ideas what happened here, I will be happy to hear them. Maybe in the future I will try upgrading again but maybe first write the pure vendor image overwriting all of the flash chip and later on trying to get the MAC address back. Thanks, Paul [1] http://www.asrock.com/mb/overview.asp?Model=A780FullHD [2] http://www.asrock.com/mb/download.asp?Model=A780FullHD&o=BIOS -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part URL: From mike.corcoran at wright.edu Thu Jul 26 18:07:06 2012 From: mike.corcoran at wright.edu (Corcoran, Mike) Date: Thu, 26 Jul 2012 16:07:06 +0000 Subject: [flashrom] thank you! Message-ID: <4A667345662C5E4A9C18BCF509CD8D3756E85F@SN2PRD0102MB143.prod.exchangelabs.com> Thank you for writing such a wonderful tool! I have been fighting this generic Sata disk controller card I bought for my home machine with a SIL3124 chip and having trouble with the Bios on it conflicting with the motherboard bios. I wanted to boot from my motherboard, but no matter how I set the boot disk priority on the motherboard, the system insisted on trying to boot from the SIL3124 card. I wanted to erase the bios on the SIL3124 card but did not know how. I found Your tool via google, and it worked flawlessly! Thanks again! [root at vmware]# flashrom --erase -V -p satasii flashrom v0.9.5.2-r1515 on Linux 2.6.32-220.23.1.el6.x86_64 (x86_64), built with libpci 3.1.4, GCC 4.4.6 20110731 (Red Hat 4.4.6-3), little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 3656M loops per second, 10 myus = 9 us, 100 myus = 104 us, 1000 myus = 1013 us, 10000 myus = 10021 us, 4 myus = 4 us, OK. Initializing satasii programmer Found "Silicon Image SiI 3124 PCI-X SATA Ctrl" (1095:3124, BDF 03:04.0). Requested BAR is MEM, 64bit, not prefetchable Mapping SATA SIL registers at 0xfbbff000, unaligned size 0x100. The following protocols are supported: Parallel. Probing for AMD Am29F010A/B, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BB, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BT, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F016D, 2048 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F040B, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F080B, 1024 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BB, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BT, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BB, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BT, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BB, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BT, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BB, 1024 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BT, 1024 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV040B, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV081B, 1024 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002B, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002T, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29040B, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C010A, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C040A, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49BV512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F002(N), 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F002(N)T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Catalyst CAT28F512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Bright BM29F040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for EMST F49B002UA, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Eon EN29F010, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)B, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)T, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004BC, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004TC, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F400BC, 512 kB: probe_m29f400bt: id1 0x55, id2 0x78 Probing for Fujitsu MBM29F400TC, 512 kB: probe_m29f400bt: id1 0x55, id2 0x78 Probing for Hyundai HY29F002T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Hyundai HY29F002B, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Hyundai HY29F040A, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F001BN/BX-B, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Intel 28F001BN/BX-T, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Intel 28F002BC/BL/BV/BX-T, 256 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F008S3/S5/SC, 512 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-B, 512 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-T, 512 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-B, 512 kB: probe_82802ab: id1 0x55, id2 0x78, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-T, 512 kB: probe_82802ab: id1 0x55, id2 0x78, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001B, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001T, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)B, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)T, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F040, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29LV040, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51000B, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51000T, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51400B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51400T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51000, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51001, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51002, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for PMC Pm29F002T, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm29F002B, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV010, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV020, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV040, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LH28F008BJT-BTLZ1, 1024 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST28SF040A, 512 kB: probe_82802ab: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29EE010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29LE010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29EE020A, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29LE020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF010A, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF020A, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Found SST flash chip "SST39VF010" (128 kB, Parallel) on satasii. Probing for SST SST39VF020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF080, 1024 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for ST M29F002B, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F002T/NT, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F040B, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F400BB, 512 kB: probe_m29f400bt: id1 0x55, id2 0x78 Probing for ST M29F400BT, 512 kB: probe_m29f400bt: id1 0x55, id2 0x78 Probing for ST M29W010B, 128 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W040B, 512 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W512B, 64 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51001B, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51001T, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51002B, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51002T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51004B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51004T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {S,V}29C31004B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {S,V}29C31004T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for TI TMS29F002RB, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for TI TMS29F002RT, 256 kB: probe_jedec_common: id1 0x55, id2 0xaa, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012-old, 128 kB: Old Winbond W29* probe method disabled because the probing sequence puts the AMIC A49LF040A in a funky state. Use 'flashrom -c W29C010(M)/W29C011A/W29EE011/W29EE012-old' if you have a board with such a chip. Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W29C020(C)/W29C022, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W29C040/P, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W39L040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W49F002U/N, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W49F020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Found SST flash chip "SST39VF010" (128 kB, Parallel). === This flash part has status UNTESTED for operations: WRITE The test status of this chip may have been updated in the latest development version of flashrom. If you are running the latest development version, please email a report to flashrom at flashrom.org if any of the above operations work correctly for you with this flash part. Please include the flashrom output with the additional -V option for all operations you tested (-V, -Vr, -VE, -Vw), and mention which mainboard or programmer you tested. Please mention your board in the subject line. Thanks for your help! Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:E, 0x001000-0x001fff:E, 0x002000-0x002fff:E, 0x003000-0x003fff:E, 0x004000-0x004fff:E, 0x005000-0x005fff:E, 0x006000-0x006fff:E, 0x007000-0x007fff:E, 0x008000-0x008fff:E, 0x009000-0x009fff:E, 0x00a000-0x00afff:E, 0x00b000-0x00bfff:E, 0x00c000-0x00cfff:E, 0x00d000-0x00dfff:E, 0x00e000-0x00efff:E, 0x00f000-0x00ffff:E, 0x010000-0x010fff:E, 0x011000-0x011fff:E, 0x012000-0x012fff:E, 0x013000-0x013fff:E, 0x014000-0x014fff:E, 0x015000-0x015fff:E, 0x016000-0x016fff:E, 0x017000-0x017fff:E, 0x018000-0x018fff:E, 0x019000-0x019fff:E, 0x01a000-0x01afff:E, 0x01b000-0x01bfff:E, 0x01c000-0x01cfff:E, 0x01d000-0x01dfff:E, 0x01e000-0x01efff:E, 0x01f000-0x01ffff:E Erase/write done. [root at vmware]# Mike -- Mike Corcoran Wright State University, Information Security and Systems Support Voice:937-775-2431, Fax:937-775-4049 http://www.wright.edu/security/ Don't be scammed, CaTS will NEVER ask for your password via e-mail! -------------- next part -------------- An HTML attachment was scrubbed... URL: From stefan.tauner at student.tuwien.ac.at Fri Jul 27 05:24:30 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 05:24:30 +0200 Subject: [flashrom] ASRock A780FullHD: Experience upgrading from BIOS 1.00 to 1.70 In-Reply-To: <1343294260.4691.39.camel@mattotaupa> References: <1343294260.4691.39.camel@mattotaupa> Message-ID: <201207270324.q6R3OUKC023856@mail2.student.tuwien.ac.at> Thanks for the write-up of your experience hopefully it might help others in the future. Most of your story sounds like persistent (config) data in CMOS + a stupid vendor firmware is the culprit, but that is not a big help, i know, sorry :) I have added your board to our list because technically speaking flashrom worked correctly. I have added a note with a link to this thread though for obvious reasons, thanks for your report! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 27 05:32:10 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 05:32:10 +0200 Subject: [flashrom] thank you! In-Reply-To: <4A667345662C5E4A9C18BCF509CD8D3756E85F@SN2PRD0102MB143.prod.exchangelabs.com> References: <4A667345662C5E4A9C18BCF509CD8D3756E85F@SN2PRD0102MB143.prod.exchangelabs.com> Message-ID: <201207270332.q6R3WAcT025774@mail2.student.tuwien.ac.at> On Thu, 26 Jul 2012 16:07:06 +0000 "Corcoran, Mike" wrote: Hello Mike, you are welcome (be aware of the double twist :) > Found SST flash chip "SST39VF010" (128 kB, Parallel). > === > This flash part has status UNTESTED for operations: WRITE > The test status of this chip may have been updated in the latest > development > version of flashrom. If you are running the latest development version, > please email a report to flashrom at flashrom.org if any of the above > operations > work correctly for you with this flash part. Please include the flashrom > output with the additional -V option for all operations you tested (-V, > -Vr, > -VE, -Vw), and mention which mainboard or programmer you tested. > Please mention your board in the subject line. Thanks for your help! If you like to help us, you can test writing the chip as well. Since erasing has worked, it is very likely that writing will too, but it would still be nice to know. Also, if you ever want to re-enable the firmware of the controller you would already know that it works (or if it currently does not work, you will have an updated, working version of flashrom already and dont need to wait ;) You can use any file of exactly 128 * 1024 B that does not contain 0xFF only, or the data already in the chip (flashrom would skip writing then). A file created by dd if=/dev/urandom of=testfile-128kB.bin bs=1k count=128 would be ok. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 27 05:48:35 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 05:48:35 +0200 Subject: [flashrom] Numonyx N25Q064 (second try) In-Reply-To: References: Message-ID: <201207270348.q6R3mZwN029330@mail2.student.tuwien.ac.at> On Wed, 25 Jul 2012 16:08:58 -0700 David Hendricks wrote: > This patch differentiates between the N25Q064 1.8V version and 3.0V version > which have different JEDEC IDs. > > It extends the chip name to include the first few characters in the part > number. The first two of those characters indicate the process technology > (65nm) and feature set, neither of which matter for Flashrom. The third and > fourth characters specify voltage and block/sector size and uniformity, > which are important. > > To abstract the irrelevant portions of the part number leading up to the > characters we care about, dots are used. This helps prevent unwanted > changes in chip name that can break fragile scripts and confuse people. > More about this schema here: > http://www.flashrom.org/pipermail/flashrom/2012-July/009595.html > > Signed-off-by: David Hendricks > > Index: flashchips.c > =================================================================== > --- flashchips.c (revision 1553) > +++ flashchips.c (working copy) > @@ -5425,12 +5425,16 @@ > > { > .vendor = "Numonyx", > - .name = "N25Q064", > + /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ > + .name = "N25Q064..1E", > .bustype = BUS_SPI, > .manufacture_id = ST_ID, > - .model_id = ST_N25Q064, > + .model_id = ST_N25Q064__1E, > .total_size = 8192, > .page_size = 256, > + /* supports SFDP */ > + /* OTP: 64B total; read 0x4B, write 0x42 */ > + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, > .tested = TEST_OK_PREW, did you really test the 1.8V version too? > .probe = probe_spi_rdid, > .probe_timing = TIMING_ZERO, > @@ -5450,9 +5454,44 @@ > .unlock = spi_disable_blockprotect, > .write = spi_chip_write_256, > .read = spi_chip_read, > + .voltage = {1700, 2000}, > }, > > { > + .vendor = "Numonyx", > + /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ > + .name = "N25Q064..3E", > + .bustype = BUS_SPI, > + .manufacture_id = ST_ID, > + .model_id = ST_N25Q064__3E, > + .total_size = 8192, > + .page_size = 256, > + /* supports SFDP */ Does it work as expected (testable by removing the chip definition)? There are a number of other N25Q* chips available apparently. Do you plan to add them too (NB: http://patchwork.coreboot.org/patch/3652/)? Anyone else? Steven, our datasheet muncher maybe? :) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 27 16:05:25 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 16:05:25 +0200 Subject: [flashrom] P5B-VM DO support In-Reply-To: <87bol6qw9f.fsf@glimpse.justinbogner.com> References: <87bol6qw9f.fsf@glimpse.justinbogner.com> Message-ID: <201207271405.q6RE5PQD018429@mail2.student.tuwien.ac.at> On Tue, 29 May 2012 19:43:08 -0600 Justin Bogner wrote: > Hello, > > I tried out flashrom on one of my machines and it asked me to send a > verbose log here, since my mainboard isn't listed on the supported > hardware page. > > The non-verbose log errors with "FREG4: WARNING: Platform Data region is > locked" and the chipset is Intel ICH8DO. The mainboard is this one: > > http://www.asus.com/Motherboards/Intel_Socket_775/P5BVM_DO > Hello Justin, i think this is actually a false positive: FREG4 is all zeroes and should be ignored. This is not specified in public documentation by Intel, but i am quite sure. We had a similar case (newer Intel chipset though) a few months ago. When using the ich_spi_force parameter (please look at the manpage for details, i dont want to spoil how to do it to not encourage others to try without reading the details) flashrom should work on your board. Please be aware that MAC addresses of onboard NICs are sometimes saved in flash and need special handling then, so make a backup of the old contents before trying anything (this is always a good idea actually ;) I will fix the false detection soon-ish, thanks for bringing this up! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 27 17:36:53 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 17:36:53 +0200 Subject: [flashrom] [PATCH] ichspi: ignore bogus FREGs. In-Reply-To: <201207271405.q6RE5PQD018429@mail2.student.tuwien.ac.at> References: <201207271405.q6RE5PQD018429@mail2.student.tuwien.ac.at> Message-ID: <1343403413-5749-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Some vendors forget to disable regions properly and set their FRAP bits and FREG to 0. While not documented publicly this is being ignored by the chipset(s)[1] and hence flashrom should do so too. Without this patch flashrom prints a warning and disables writes. The check for i (region index) excludes the descriptor region which should not be becessary because specs suggest that the descriptor region should not be locked, but if vendors would follow the specs this patch would not have been necessary in the first place. [1]: http://www.flashrom.org/pipermail/flashrom/2012-May/009303.html Signed-off-by: Stefan Tauner --- Justin, you could help testing this patch by applying it to the latest development source from http://flashrom.org/Downloads and sending us the flashrom output as before. You will need to specify -p internal when running that version of flashrom due to some other change. If you need any help feel free to ask or join our IRC channel. ichspi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ichspi.c b/ichspi.c index 0223ae3..d4849c2 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1441,7 +1441,7 @@ static int ich9_handle_frap(uint32_t frap, int i) base = ICH_FREG_BASE(freg); limit = ICH_FREG_LIMIT(freg); - if (base > limit) { + if (base > limit || (freg == 0 && i > 0)) { /* this FREG is disabled */ msg_pdbg2("0x%02X: 0x%08x FREG%i: %s region is unused.\n", offset, freg, i, region_names[i]); -- Kind regards, Stefan Tauner From mike.corcoran at wright.edu Fri Jul 27 17:15:59 2012 From: mike.corcoran at wright.edu (Corcoran, Mike) Date: Fri, 27 Jul 2012 15:15:59 +0000 Subject: [flashrom] thank you! In-Reply-To: <201207270332.q6R3WAcT025774@mail2.student.tuwien.ac.at> References: <4A667345662C5E4A9C18BCF509CD8D3756E85F@SN2PRD0102MB143.prod.exchangelabs.com> <201207270332.q6R3WAcT025774@mail2.student.tuwien.ac.at> Message-ID: <4A667345662C5E4A9C18BCF509CD8D3756F3A6@SN2PRD0102MB143.prod.exchangelabs.com> Yes I will be glad to help. I saved the old bios to a file first so I'll see if I can put it back this weekend. This is my vmware host so I have to shut Down all my vm's first. Stay tuned. Mike -- Mike Corcoran Wright State University, Information Security and Systems Support Voice:937-775-2431, Fax:937-775-4049 http://www.wright.edu/security/ Don't be scammed, CaTS will NEVER ask for your password via e-mail! -----Original Message----- From: Stefan Tauner [mailto:stefan.tauner at student.tuwien.ac.at] Sent: Thursday, July 26, 2012 11:32 PM To: Corcoran, Mike Cc: flashrom at flashrom.org Subject: Re: [flashrom] thank you! On Thu, 26 Jul 2012 16:07:06 +0000 "Corcoran, Mike" wrote: Hello Mike, you are welcome (be aware of the double twist :) > Found SST flash chip "SST39VF010" (128 kB, Parallel). > === > This flash part has status UNTESTED for operations: WRITE > The test status of this chip may have been updated in the latest > development > version of flashrom. If you are running the latest development version, > please email a report to flashrom at flashrom.org if any of the above > operations > work correctly for you with this flash part. Please include the flashrom > output with the additional -V option for all operations you tested (-V, > -Vr, > -VE, -Vw), and mention which mainboard or programmer you tested. > Please mention your board in the subject line. Thanks for your help! If you like to help us, you can test writing the chip as well. Since erasing has worked, it is very likely that writing will too, but it would still be nice to know. Also, if you ever want to re-enable the firmware of the controller you would already know that it works (or if it currently does not work, you will have an updated, working version of flashrom already and dont need to wait ;) You can use any file of exactly 128 * 1024 B that does not contain 0xFF only, or the data already in the chip (flashrom would skip writing then). A file created by dd if=/dev/urandom of=testfile-128kB.bin bs=1k count=128 would be ok. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Fri Jul 27 17:52:42 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Fri, 27 Jul 2012 17:52:42 +0200 Subject: [flashrom] Log for Gigabyte GA-H61M-D2H-USB3 In-Reply-To: <1338214562.10131.6.camel@localhost> References: <1338214562.10131.6.camel@localhost> Message-ID: <201207271552.q6RFqgdU018224@mail2.student.tuwien.ac.at> On Mon, 28 May 2012 18:16:02 +0400 user wrote: > Log for Gigabyte GA-H61M-D2H-USB3 motherboard on a Intel H61 chipset for > read and write operations. Hello, thanks for your report! I have added your board to our list of supported hardware and will commit that later together with other small changes. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From mike.corcoran at wright.edu Fri Jul 27 23:43:07 2012 From: mike.corcoran at wright.edu (Corcoran, Mike) Date: Fri, 27 Jul 2012 21:43:07 +0000 Subject: [flashrom] test write of SST39VF010 on SIL3124 Sata Card Message-ID: <4A667345662C5E4A9C18BCF509CD8D3756F490@SN2PRD0102MB143.prod.exchangelabs.com> Successful read, erase, and write. Thanks again! I also documented the use of your tool on my online docs web site so others can solve Similar problems and find your tool as well: http://www.wright.edu/~mike.corcoran/htmldocs/peripherals/sata/sil3124/sil3124-erasing-bios.html Script started on Fri 27 Jul 2012 05:18:26 PM EDT root at vmware:/usr/local/src/flashrom root at vmware flashrom]# cat doitwrite flashrom --write sil3124-rom-save.bin -V -p satasii root at vmware flashrom]# ./doitwrite flashrom v0.9.5.2-r1515 on Linux 2.6.32-220.23.1.el6.x86_64 (x86_64), built with libpci 3.1.4, GCC 4.4.6 20110731 (Red Hat 4.4.6-3), little endian flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OS timer resolution is 1 usecs, 3772M loops per second, 10 myus = 10 us, 100 myus = 99 us, 1000 myus = 1014 us, 10000 myus = 9999 us, 4 myus = 5 us, OK. Initializing satasii programmer Found "Silicon Image SiI 3124 PCI-X SATA Ctrl" (1095:3124, BDF 03:04.0). Requested BAR is MEM, 64bit, not prefetchable Mapping SATA SIL registers at 0xfbbff000, unaligned size 0x100. Warning: Flash seems unconnected. The following protocols are supported: Parallel. Probing for AMD Am29F010A/B, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F002(N)BT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F016D, 2048 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29F080B, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BB, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV001BT, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV002BT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BB, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV004BT, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BB, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV008BT, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMD Am29LV081B, 1024 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29002T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for AMIC A29040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Atmel AT29C512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C010A, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT29C040A, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49BV512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F002(N), 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Atmel AT49F002(N)T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Catalyst CAT28F512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Bright BM29F040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for EMST F49B002UA, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Eon EN29F010, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Eon EN29F002(A)(N)T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004BC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F004TC, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Fujitsu MBM29F400BC, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for Fujitsu MBM29F400TC, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for Hyundai HY29F002T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Hyundai HY29F002B, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Hyundai HY29F040A, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F001BN/BX-B, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Intel 28F001BN/BX-T, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Intel 28F002BC/BL/BV/BX-T, 256 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F008S3/S5/SC, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F004B5/BE/BV/BX-T, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-B, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Intel 28F400BV/BX/CE/CV-T, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001B, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F001T, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F002(N)T, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29F040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Macronix MX29LV040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for MoselVitelic V29C51000B, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51000T, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51400B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29C51400T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51000, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51001, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for MoselVitelic V29LC51002, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for PMC Pm29F002T, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm29F002B, 256 kB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV010, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV020, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for PMC Pm39LV040, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Sharp LH28F008BJT-BTLZ1, 1024 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST28SF040A, 512 kB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SST SST29EE010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29LE010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29EE020A, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST29LE020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF010A, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF020A, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39SF040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF512, 64 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF010, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Found SST flash chip "SST39VF010" (128 kB, Parallel) on satasii. Probing for SST SST39VF020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SST SST39VF080, 1024 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for ST M29F002B, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F002T/NT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29F400BB, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for ST M29F400BT, 512 kB: probe_m29f400bt: id1 0xff, id2 0xff Probing for ST M29W010B, 128 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W040B, 512 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for ST M29W512B, 64 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for SyncMOS/MoselVitelic {F,S,V}29C51001B, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51001T, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51002B, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51002T, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51004B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {F,S,V}29C51004T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {S,V}29C31004B, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for SyncMOS/MoselVitelic {S,V}29C31004T, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for TI TMS29F002RB, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for TI TMS29F002RT, 256 kB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012-old, 128 kB: Old Winbond W29* probe method disabled because the probing sequence puts the AMIC A49LF040A in a funky state. Use 'flashrom -c W29C010(M)/W29C011A/W29EE011/W29EE012-old' if you have a board with such a chip. Probing for Winbond W29C010(M)/W29C011A/W29EE011/W29EE012, 128 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W29C020(C)/W29C022, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W29C040/P, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W39L040, 512 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W49F002U/N, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Probing for Winbond W49F020, 256 kB: probe_jedec_common: id1 0xbf, id2 0xd5 Found SST flash chip "SST39VF010" (128 kB, Parallel). === This flash part has status UNTESTED for operations: WRITE The test status of this chip may have been updated in the latest development version of flashrom. If you are running the latest development version, please email a report to flashrom at flashrom.org if any of the above operations work correctly for you with this flash part. Please include the flashrom output with the additional -V option for all operations you tested (-V, -Vr, -VE, -Vw), and mention which mainboard or programmer you tested. Please mention your board in the subject line. Thanks for your help! Reading old flash chip contents... done. Erasing and writing flash chip... Trying erase function 0... 0x000000-0x000fff:W, 0x001000-0x001fff:W, 0x002000-0x002fff:W, 0x003000-0x003fff:W, 0x004000-0x004fff:W, 0x005000-0x005fff:W, 0x006000-0x006fff:W, 0x007000-0x007fff:W, 0x008000-0x008fff:W, 0x009000-0x009fff:W, 0x00a000-0x00afff:W, 0x00b000-0x00bfff:W, 0x00c000-0x00cfff:W, 0x00d000-0x00dfff:W, 0x00e000-0x00efff:W, 0x00f000-0x00ffff:W, 0x010000-0x010fff:S, 0x011000-0x011fff:S, 0x012000-0x012fff:S, 0x013000-0x013fff:S, 0x014000-0x014fff:S, 0x015000-0x015fff:S, 0x016000-0x016fff:S, 0x017000-0x017fff:S, 0x018000-0x018fff:S, 0x019000-0x019fff:S, 0x01a000-0x01afff:S, 0x01b000-0x01bfff:S, 0x01c000-0x01cfff:S, 0x01d000-0x01dfff:S, 0x01e000-0x01efff:S, 0x01f000-0x01ffff:W Erase/write done. Verifying flash... VERIFIED. root at vmware flashrom]# exit Script done on Fri 27 Jul 2012 05:19:05 PM EDT Rebooted, verified bios was functioning again, then erased again. :-) From stefan.tauner at student.tuwien.ac.at Sat Jul 28 04:54:18 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sat, 28 Jul 2012 04:54:18 +0200 Subject: [flashrom] test write of SST39VF010 on SIL3124 Sata Card In-Reply-To: <4A667345662C5E4A9C18BCF509CD8D3756F490@SN2PRD0102MB143.prod.exchangelabs.com> References: <4A667345662C5E4A9C18BCF509CD8D3756F490@SN2PRD0102MB143.prod.exchangelabs.com> Message-ID: <201207280254.q6S2sIrC018926@mail2.student.tuwien.ac.at> On Fri, 27 Jul 2012 21:43:07 +0000 "Corcoran, Mike" wrote: > Successful read, erase, and write. Thanks again! Thanks! Unfortunately i missed that someone has tested that already last month and i just did not commit it yet, so the additional testing i requested was unnecessary, sorry! > I also documented the use of your tool on my online docs web site so others can solve > Similar problems and find your tool as well: > http://www.wright.edu/~mike.corcoran/htmldocs/peripherals/sata/sil3124/sil3124-erasing-bios.html awesome :) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From svn at flashrom.org Sat Jul 28 05:17:16 2012 From: svn at flashrom.org (repository service) Date: Sat, 28 Jul 2012 05:17:16 +0200 Subject: [flashrom] [commit] r1554 - in trunk: . Documentation Message-ID: Author: stefanct Date: Sat Jul 28 05:17:15 2012 New Revision: 1554 URL: http://flashrom.org/trac/flashrom/changeset/1554 Log: Add a bunch of new/tested stuff and various small changes 13. Tested Mainboards: OK: - ASRock A780FullHD http://www.flashrom.org/pipermail/flashrom/2012-July/009599.html - ASRock 880G Pro3 http://www.flashrom.org/pipermail/flashrom/2012-July/009492.html - ASRock N61P-S http://www.flashrom.org/pipermail/flashrom/2012-May/009316.html - ASUS M2N68-VM http://www.flashrom.org/pipermail/flashrom/2012-May/009334.html - ASUS M3N78 PRO http://www.flashrom.org/pipermail/flashrom/2012-July/009519.html - ASUS M4N68T V2 http://www.flashrom.org/pipermail/flashrom/2012-May/009277.html - ASUS M5A78L-M LX reported by clavile on IRC - ASUS P8P67 PRO (rev. 3.0) http://www.flashrom.org/pipermail/flashrom/2012-April/009188.html - ASUS P8Z68-V reported by Kano on IRC http://paste.flashrom.org/view.php?id=1232 - ASUS SABERTOOTH 990FX http://paste.flashrom.org/view.php?id=1214 - Dell Inspiron 1420 http://www.flashrom.org/pipermail/flashrom/2012-May/009196.html - ECS GF8200A http://www.flashrom.org/pipermail/flashrom/2012-May/009256.html - GIGABYTE GA-H61M-D2H-USB3 http://www.flashrom.org/pipermail/flashrom/2012-May/009333.html - MSI MS-7250 (K9N SLI (rev 2.1)) http://www.flashrom.org/pipermail/flashrom/2012-June/009436.html - MSI MS-7676 (Z68MA-G45 (B3)) http://www.flashrom.org/pipermail/flashrom/2012-June/009424.html - Palit N61S http://www.flashrom.org/pipermail/flashrom/2012-May/009212.html NOT OK: - ASRock H61M-ITX http://www.flashrom.org/pipermail/flashrom/2012-May/009224.html - Dell Latitude E6520 http://www.flashrom.org/pipermail/flashrom/2012-May/009197.html - Dell Vostro 3700 http://www.flashrom.org/pipermail/flashrom/2012-May/009197.html - Intel DH61AG http://www.flashrom.org/pipermail/flashrom/2012-June/009417.html - Intel DQ965GF http://www.flashrom.org/pipermail/flashrom/2012-May/009295.html - HP/Compaq 8100 Elite CMT PC (304Bh) http://paste.flashrom.org/view.php?id=1182 - HP Z400 Workstation (0AE4h) http://www.flashrom.org/pipermail/flashrom/2012-June/009350.html - Supermicro X9DR3-F http://www.flashrom.org/pipermail/flashrom/2012-June/009422.html Tested flash chips: - mark AMIC A25L032 as TEST_OK_PREW (+PREW) http://www.flashrom.org/pipermail/flashrom/2012-June/009363.html - mark Atmel AT25DF321A as TEST_OK_PREW (+REW) http://www.flashrom.org/pipermail/flashrom/2012-July/009492.html - mark Atmel AT26DF161 as TEST_OK_PR (+PR) http://www.flashrom.org/pipermail/flashrom/2012-June/009350.html - mark Eon EN25QH16 as TEST_OK_PR (+PR) http://www.flashrom.org/pipermail/flashrom/2012-July/009566.html - mark SST SST39VF010 as TEST_OK_PREW (+W) http://www.flashrom.org/pipermail/flashrom/2012-June/009425.html - mark ST M25P64 as TEST_OK_PREW (+PREW) http://www.flashrom.org/pipermail/flashrom/2012-May/009332.html Tested chipset enables: - Intel 3420 http://www.flashrom.org/pipermail/flashrom/2012-May/009332.html - Add board enable for ASUS P5GD2-X lspci: http://paste.flashrom.org/view.php?id=1234 write: http://paste.flashrom.org/view.php?id=1240 Miscellaneous - Reorder some boards in print.c. - Remove broken abit URLs. - Whitespace changes. - Fix the maximum number of southbridge straps in the ICH descriptor structs. - Refine documentation regarding ICH region lock bits. - Demote verbosity of ICH Opcode reprogramming to -VV. - Exclude Pony-SPI for DOS targets (missing serial support). Signed-off-by: Stefan Tauner Acked-by: Stefan Tauner Modified: trunk/Documentation/mysteries_intel.txt trunk/Makefile trunk/board_enable.c trunk/chipset_enable.c trunk/flashchips.c trunk/ich_descriptors.h trunk/ichspi.c trunk/print.c Modified: trunk/Documentation/mysteries_intel.txt ============================================================================== --- trunk/Documentation/mysteries_intel.txt Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/Documentation/mysteries_intel.txt Sat Jul 28 05:17:15 2012 (r1554) @@ -14,10 +14,18 @@ when trying to touch an address outside of any region. See also http://www.flashrom.org/pipermail/flashrom/2011-August/007606.html -= Unlocking the ME region = += (Un)locking the ME region = If the ME region is locked by the FRAP register in descriptor mode, the host - software is not allowed to read or write any address inside that region. There - are different ways to unlock access: + software is not allowed to read or write any address inside that region. + Although the chipset datasheets specify that "[t]he contents of this register + are that of the Flash Descriptor" [PANTHER], this is not entirely true. + The firmware has to fill at least some of the registers involved. It is not + known when they become read-only or any other details, but there is at least + one HM67-based board, that provides an user-changeable setting in the firmware + user interface to enable ME region updates that lead to a FRAP content that is + not equal to the descriptor region bits [NC9B]. + + There are different ways to unlock access: - A pin strap: Flash Descriptor Security Override Strap (as indicated by the Flash Descriptor Override Pin Strap Status (FDOPSS) in HSFS. That pin is @@ -81,6 +89,11 @@ vendor tools use it for updates. This needs to be investigated further before drawing any conclusion. +[PANTHER] Intel 7 Series Chipset Family Platform Controller Hub (PCH) Datasheet + Document Number: 326776, April 2012, page 857 +[NC9B] Jetway NC9B flashrom v0.9.5.2-r1517 log with ME region unlocked. + NB: "FRAP 0e0f" vs. "FLMSTR1 0a0b". + http://paste.flashrom.org/view.php?id=1215 [MODE_CTRL] Client Platform Enabling Tour: Platform Software Document Number: 439167, Revision 1.2, page 52 [MEBX] Intel Management Engine BIOS Extension (MEBX) User's Guide Modified: trunk/Makefile ============================================================================== --- trunk/Makefile Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/Makefile Sat Jul 28 05:17:15 2012 (r1554) @@ -73,7 +73,7 @@ CPPFLAGS += -Wno-format # FIXME Check if we can achieve the same effect with -L../libgetopt -lgetopt LIBS += ../libgetopt/libgetopt.a -# Bus Pirate and Serprog are not supported under DOS (missing serial support). +# Bus Pirate, Serprog and Pony-SPI are not supported under DOS (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -84,6 +84,11 @@ else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported under DOS (missing USB support). ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -547,7 +552,7 @@ FEATURE_LIBS += $(shell LC_ALL=C grep -q "NEEDLIBZ := yes" .libdeps && printf "%s" "-lz") LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) -OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS) +OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS) $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) Modified: trunk/board_enable.c ============================================================================== --- trunk/board_enable.c Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/board_enable.c Sat Jul 28 05:17:15 2012 (r1554) @@ -2348,6 +2348,7 @@ {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x814e, "^P5GD1-VM$", NULL, NULL, P3, "ASUS", "P5GD1-VM/S", 0, OK, intel_ich_gpio21_raise}, {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x814e, NULL, NULL, NULL, P3, "ASUS", "P5GD1(-VM)", 0, NT, intel_ich_gpio21_raise}, {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x813d, "^P5GD2-Premium$", NULL, NULL, P3, "ASUS", "P5GD2 Premium", 0, OK, intel_ich_gpio21_raise}, + {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x81a6, "^P5GD2-X$", NULL, NULL, P3, "ASUS", "P5GD2-X", 0, OK, intel_ich_gpio21_raise}, {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x813d, "^P5GDC-V$", NULL, NULL, P3, "ASUS", "P5GDC-V Deluxe", 0, OK, intel_ich_gpio21_raise}, {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x813d, "^P5GDC$", NULL, NULL, P3, "ASUS", "P5GDC Deluxe", 0, OK, intel_ich_gpio21_raise}, {0x8086, 0x266a, 0x1043, 0x80a6, 0x8086, 0x2668, 0x1043, 0x813d, NULL, NULL, NULL, P3, "ASUS", "P5GD2/C variants", 0, NT, intel_ich_gpio21_raise}, Modified: trunk/chipset_enable.c ============================================================================== --- trunk/chipset_enable.c Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/chipset_enable.c Sat Jul 28 05:17:15 2012 (r1554) @@ -1358,7 +1358,7 @@ {0x8086, 0x3b0e, NT, "Intel", "B55", enable_flash_pch5}, {0x8086, 0x3b0f, OK, "Intel", "QS57", enable_flash_pch5}, {0x8086, 0x3b12, NT, "Intel", "3400", enable_flash_pch5}, - {0x8086, 0x3b14, NT, "Intel", "3420", enable_flash_pch5}, + {0x8086, 0x3b14, OK, "Intel", "3420", enable_flash_pch5}, {0x8086, 0x3b16, NT, "Intel", "3450", enable_flash_pch5}, {0x8086, 0x3b1e, NT, "Intel", "B55", enable_flash_pch5}, {0x8086, 0x5031, OK, "Intel", "EP80579", enable_flash_ich7}, Modified: trunk/flashchips.c ============================================================================== --- trunk/flashchips.c Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/flashchips.c Sat Jul 28 05:17:15 2012 (r1554) @@ -1133,7 +1133,7 @@ .page_size = 256, /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = @@ -1559,7 +1559,7 @@ .page_size = 256, /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .tested = TEST_OK_PROBE, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = @@ -1854,7 +1854,7 @@ .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PR, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = @@ -3543,7 +3543,7 @@ /* supports SFDP */ /* OTP: 512B total; enter 0x3A */ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PR, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = @@ -6739,7 +6739,7 @@ .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PRE, + .tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .block_erasers = @@ -7549,7 +7549,7 @@ .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = Modified: trunk/ich_descriptors.h ============================================================================== --- trunk/ich_descriptors.h Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/ich_descriptors.h Sat Jul 28 05:17:15 2012 (r1554) @@ -242,7 +242,7 @@ struct ich_desc_south_strap { union { - uint32_t STRPs[16]; /* current maximum: ibex peak */ + uint32_t STRPs[18]; /* current maximum: cougar point */ struct { /* ich8 */ struct { /* STRP1 */ uint32_t ME_DISABLE :1, Modified: trunk/ichspi.c ============================================================================== --- trunk/ichspi.c Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/ichspi.c Sat Jul 28 05:17:15 2012 (r1554) @@ -414,7 +414,7 @@ curopcodes->opcode[oppos].spi_type = spi_type; program_opcodes(curopcodes, 0); oppos = find_opcode(curopcodes, opcode); - msg_pdbg ("on-the-fly OPCODE (0x%02X) re-programmed, op-pos=%d\n", opcode, oppos); + msg_pdbg2("on-the-fly OPCODE (0x%02X) re-programmed, op-pos=%d\n", opcode, oppos); return oppos; } @@ -535,7 +535,7 @@ opmenu[1] |= ((uint32_t) op->opcode[a].opcode) << ((a - 4) * 8); } - msg_pdbg("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]); + msg_pdbg2("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]); switch (ich_generation) { case CHIPSET_ICH7: /* Register undo only for enable_undo=1, i.e. first call. */ Modified: trunk/print.c ============================================================================== --- trunk/print.c Tue Jul 24 18:33:55 2012 (r1553) +++ trunk/print.c Sat Jul 28 05:17:15 2012 (r1554) @@ -552,22 +552,22 @@ const struct board_info boards_known[] = { #if defined(__i386__) || defined(__x86_64__) B("A-Trend", "ATC-6220", 1, "http://www.motherboard.cz/mb/atrend/atc6220.htm", NULL), - B("abit", "A-S78H", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=A-S78H&fMTYPE=Socket+AM2", NULL), - B("abit", "AN-M2", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20AM2&pMODEL_NAME=AN-M2", NULL), - B("abit", "AV8", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=AV8", NULL), - B("abit", "AX8", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=AX8", NULL), - B("abit", "BM6", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=BM6&fMTYPE=Socket%20370", NULL), - B("abit", "Fatal1ty F-I90HD", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=Fatal1ty+F-I90HD&fMTYPE=LGA775", NULL), - B("abit", "IC7", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=IC7&fMTYPE=Socket%20478", NULL), - B("abit", "IP35", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=LGA775&pMODEL_NAME=IP35", NULL), - B("abit", "IP35 Pro", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=LGA775&pMODEL_NAME=IP35%20Pro", NULL), - B("abit", "IS-10", 0, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=IS-10&fMTYPE=Socket+478", "Reported by deejkuba at aol.com to flashrom at coreboot.org, no public archive. Missing board enable and/or M50FW040 unlocking. May work now."), - B("abit", "KN8 Ultra", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=KN8%20Ultra", NULL), - B("abit", "NF-M2 nView", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=Socket%20AM2&pMODEL_NAME=NF-M2%20nView", NULL), - B("abit", "NF-M2S", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=NF-M2S&fMTYPE=Socket%20AM2", NULL), - B("abit", "NF7-S", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=Socket%20A&pMODEL_NAME=NF7-S", NULL), - B("abit", "VA6", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=Slot%201&pMODEL_NAME=VA6", NULL), - B("abit", "VT6X4", 1, "http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=Slot%201&pMODEL_NAME=VT6X4", NULL), + B("abit", "A-S78H", 1, NULL, NULL), + B("abit", "AN-M2", 1, NULL, NULL), + B("abit", "AV8", 1, NULL, NULL), + B("abit", "AX8", 1, NULL, NULL), + B("abit", "BM6", 1, NULL, NULL), + B("abit", "Fatal1ty F-I90HD", 1, NULL, NULL), + B("abit", "IC7", 1, NULL, NULL), + B("abit", "IP35", 1, NULL, NULL), + B("abit", "IP35 Pro", 1, NULL, NULL), + B("abit", "IS-10", 0, NULL, "Reported by deejkuba at aol.com to flashrom at coreboot.org, no public archive. Missing board enable and/or M50FW040 unlocking. May work now."), + B("abit", "KN8 Ultra", 1, NULL, NULL), + B("abit", "NF-M2 nView", 1, NULL, NULL), + B("abit", "NF-M2S", 1, NULL, NULL), + B("abit", "NF7-S", 1, NULL, NULL), + B("abit", "VA6", 1, NULL, NULL), + B("abit", "VT6X4", 1, NULL, NULL), B("Acorp", "6A815EPD", 1, "http://web.archive.org/web/20021206163652/www.acorp.com.tw/English/default.asp", NULL), B("Advantech", "PCM-5820", 1, "http://www.emacinc.com/sbc_pc_compatible/pcm_5820.htm", NULL), B("agami", "Aruma", 1, "http://web.archive.org/web/20080212111524/http://www.agami.com/site/ais-6000-series", NULL), @@ -578,19 +578,23 @@ B("Artec Group","DBE62", 1, "http://wiki.thincan.org/DBE62", NULL), B("ASI", "MB-5BLMP", 1, "http://www.hojerteknik.com/winnet.htm", "Used in the IGEL WinNET III thin client."), B("ASRock", "775i65G", 1, "http://www.asrock.com/mb/overview.asp?Model=775i65G", NULL), + B("ASRock", "880G Pro3", 1, "http://www.asrock.com/mb/overview.asp?Model=880G%20Pro3", NULL), B("ASRock", "890GX Extreme3", 1, "http://www.asrock.com/mb/overview.asp?Model=890GX%20Extreme3", NULL), B("ASRock", "939A785GMH/128M", 1, "http://www.asrock.com/mb/overview.asp?Model=939A785GMH/128M", NULL), B("ASRock", "A330GC", 1, "http://www.asrock.com/mb/overview.asp?Model=A330GC", NULL), B("ASRock", "A770CrossFire", 1, "http://www.asrock.com/mb/overview.asp?Model=A770CrossFire", NULL), + B("ASRock", "A780FullHD", 1, "http://www.asrock.com/mb/overview.asp?Model=A780FullHD", "While flashrom is working correctly, there might be problems with the firmware images themselves. Please see http://www.flashrom.org/pipermail/flashrom/2012-July/009600.html for details."), B("ASRock", "ALiveNF6G-DVI", 1, "http://www.asrock.com/mb/overview.asp?Model=ALiveNF6G-DVI", NULL), B("ASRock", "AM2NF6G-VSTA", 1, "http://www.asrock.com/mb/overview.asp?Model=AM2NF6G-VSTA", NULL), B("ASRock", "ConRoeXFire-eSATA2", 1, "http://www.asrock.com/mb/overview.asp?model=conroexfire-esata2", NULL), + B("ASRock", "H61M-ITX", 0, "http://www.asrock.com/mb/overview.asp?Model=H61M-ITX", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASRock", "H67M", 0, "http://www.asrock.com/mb/overview.asp?Model=H67M", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASRock", "K7S41", 1, "http://www.asrock.com/mb/overview.asp?Model=K7S41", NULL), B("ASRock", "K7S41GX", 1, "http://www.asrock.com/mb/overview.asp?Model=K7S41GX", NULL), B("ASRock", "K7VT4A+", 0, "http://www.asrock.com/mb/overview.asp?Model=K7VT4A%2b", "No chip found, probably due to flash translation. http://www.flashrom.org/pipermail/flashrom/2009-August/000393.html"), B("ASRock", "K8S8X", 1, "http://www.asrock.com/mb/overview.asp?Model=K8S8X", NULL), B("ASRock", "M3A790GXH/128M", 1, "http://www.asrock.com/mb/overview.asp?Model=M3A790GXH/128M", NULL), + B("ASRock", "N61P-S", 1, "http://www.asrock.com/mb/overview.asp?Model=N61P-S", NULL), B("ASRock", "P4i65GV", 1, "http://www.asrock.com/mb/overview.asp?Model=P4i65GV", NULL), B("ASUS", "A7N8X Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8X_Deluxe/", NULL), B("ASUS", "A7N8X-E Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8XE_Deluxe/", NULL), @@ -627,6 +631,7 @@ B("ASUS", "M2A-MX", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2AMX/", NULL), B("ASUS", "M2A-VM (HDMI)", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2AVM/", NULL), B("ASUS", "M2N32-SLI Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2N32SLI_DeluxeWireless_Edition/", NULL), + B("ASUS", "M2N68-VM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M2N68VM/", NULL), B("ASUS", "M2N-E", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NE/", "If the machine doesn't come up again after flashing, try resetting the NVRAM(CMOS). The MAC address of the onboard network card will change to the value stored in the new image, so backup the old address first. See http://www.flashrom.org/pipermail/flashrom/2009-November/000879.html"), B("ASUS", "M2N-E SLI", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NE_SLI/", NULL), B("ASUS", "M2N-SLI Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NSLI_Deluxe/", NULL), @@ -637,6 +642,7 @@ B("ASUS", "M3A", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A/", NULL), B("ASUS", "M3A76-CM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A76CM/", NULL), B("ASUS", "M3A78-EM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A78EM/", NULL), + B("ASUS", "M3N78 PRO", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78_PRO/", NULL), B("ASUS", "M3N78-VM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78VM/", NULL), B("ASUS", "M4A78-EM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4A78EM/", NULL), B("ASUS", "M4A785T-M", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TM/", NULL), @@ -646,7 +652,9 @@ B("ASUS", "M4A79T Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A79T_Deluxe/", NULL), B("ASUS", "M4A87TD/USB3", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A87TDUSB3/", NULL), B("ASUS", "M4A89GTD PRO", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A89GTD_PRO/", NULL), + B("ASUS", "M4N68T V2", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4N68T_V2/", NULL), B("ASUS", "M4N78 PRO", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4N78_PRO/", NULL), + B("ASUS", "M5A78L-M LX", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A78LM_LX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see http://www.flashrom.org/pipermail/flashrom/2012-May/009200.html"), B("ASUS", "M5A99X EVO", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A99X_EVO/", NULL), B("ASUS", "Maximus IV Extreme", 0, "http://www.asus.com/Motherboards/Intel_Socket_1155/Maximus_IV_Extreme/", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASUS", "MEW-AM", 0, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/", "No public report found. Owned by Uwe Hermann . May work now."), @@ -668,10 +676,10 @@ B("ASUS", "P4P800", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800/", NULL), B("ASUS", "P4P800-E Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800E_Deluxe/", NULL), B("ASUS", "P4P800-VM", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800VM/", NULL), - B("ASUS", "P4SC-E", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4sc-e/", "Part of ASUS Terminator P4 533 barebone system"), - B("ASUS", "P4SD-LA", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00022505", NULL), B("ASUS", "P4S533-X", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4s533-x/", NULL), B("ASUS", "P4S800-MX", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4S800MX/", NULL), + B("ASUS", "P4SC-E", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4sc-e/", "Part of ASUS Terminator P4 533 barebone system"), + B("ASUS", "P4SD-LA", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00022505", NULL), B("ASUS", "P5A", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock7/ali/p5a/", NULL), B("ASUS", "P5B", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B/", NULL), B("ASUS", "P5B-Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5B_Deluxe/", NULL), @@ -682,6 +690,7 @@ B("ASUS", "P5GD1-VM/S", 1, NULL, "This is an OEM board from FSC. Although flashrom supports it and can probably not distinguish it from the P5GD1-VM, please note that the P5GD1-VM BIOS does not support the FSC variants completely."), B("ASUS", "P5GD1(-VM)", 0, NULL, "Untested board enable."), B("ASUS", "P5GD2 Premium", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2_Premium/", NULL), + B("ASUS", "P5GD2-X", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2X/", NULL), B("ASUS", "P5GDC Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDC_Deluxe/", NULL), B("ASUS", "P5GDC-V Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDCV_Deluxe/", NULL), B("ASUS", "P5GD2/C variants", 0, NULL, "Untested board enable."), @@ -717,8 +726,11 @@ B("ASUS", "P8H67-M PRO", 0, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASUS", "P8P67 (rev. 3.1)", 0, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASUS", "P8P67 LE", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8P67 PRO (rev. 3.0)", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8P67_PRO/", NULL), + B("ASUS", "P8Z68-V", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), B("ASUS", "P8Z68-V PRO", 0, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("ASUS", "P8Z68-V PRO/GEN3", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V_PROGEN3/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), + B("ASUS", "SABERTOOTH 990FX", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/SABERTOOTH_990FX/", NULL), B("ASUS", "TUSL2-C", 0, "http://support.asus.com/download.aspx?SLanguage=en&p=1&s=4&m=TUSL2-C&os=&hashedid=n/a", "Untested board enable."), B("ASUS", "Z8NA-D6C", 1, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8NAD6C/", NULL), B("ASUS", "Z8PE-D12", 1, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8PED12/", NULL), @@ -743,6 +755,7 @@ B("DFI", "Blood-Iron P35 T2RL", 1, "http://lp.lanparty.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?itemId=516&downloadFlag=false&action=1", NULL), B("Elitegroup", "GeForce6100SM-M ", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=685&MenuID=24", NULL), B("Elitegroup", "GF7100PVT-M3 (V1.0)", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=853&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), + B("Elitegroup", "GF8200A", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=873&CategoryID=1&MenuID=20&LanID=0", NULL), B("Elitegroup", "K7S5A", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=279&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL), B("Elitegroup", "K7S6A", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=77&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL), B("Elitegroup", "K7SEM (V1.0A)", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=229&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), @@ -791,6 +804,7 @@ B("GIGABYTE", "GA-EP31-DS3L (rev. 2.1)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2964", NULL), B("GIGABYTE", "GA-EP35-DS3L", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2778", NULL), B("GIGABYTE", "GA-H61M-D2-B3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3773", NULL), + B("GIGABYTE", "GA-H61M-D2H-USB3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=4004", NULL), B("GIGABYTE", "GA-EX58-UD4P", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2986", NULL), B("GIGABYTE", "GA-K8N-SLI", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1928", NULL), B("GIGABYTE", "GA-K8N51GMF", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1950", NULL), @@ -816,6 +830,7 @@ B("GIGABYTE", "GA-X58A-UDR3 (rev. 2.0)", 1, NULL, NULL), B("GIGABYTE", "GA-Z68MX-UD2H-B (rev. 1.3)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3854", NULL), B("GIGABYTE", "GA-Z68XP-UD3 (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3892", NULL), + B("HP", "8100 Elite CMT PC (304Bh)", 0, NULL, "SPI lock down, PR, read-only descriptor, locked ME region."), B("HP", "e-Vectra P2706T", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=77515&prodTypeId=12454", NULL), B("HP", "ProLiant DL145 G3", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00816835&lang=en&cc=us&taskId=101&prodSeriesId=3219755&prodTypeId=15351", NULL), B("HP", "ProLiant DL165 G6", 1, "http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/15351-15351-3328412-241644-3328421-3955644.html", NULL), @@ -828,6 +843,7 @@ B("HP", "xw6400", 0, NULL, "No chip found, see http://www.flashrom.org/pipermail/flashrom/2012-March/009006.html"), B("HP", "xw9300", 0, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodTypeId=12454&prodSeriesId=459226", "Missing board enable, see http://www.flashrom.org/pipermail/flashrom/2012-February/008862.html"), B("HP", "xw9400", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=3211286&prodTypeId=12454", "Boot block is write protected unless the solder points next to F2 are shorted."), + B("HP", "Z400 Workstation (0AE4h)", 0, NULL, "ICH10R with BIOS lock enable and a protected range PR0, see http://www.flashrom.org/pipermail/flashrom/2012-June/009350.html"), B("IBASE", "MB899", 1, "http://www.ibase-i.com.tw/2009/mb899.html", NULL), B("IBM", "x3455", 1, "http://www-03.ibm.com/systems/x/hardware/rack/x3455/index.html", NULL), B("IEI", "PICOe-9452", 1, "http://www.ieiworld.com/product_groups/industrial/content.aspx?keyword=WSB&gid=00001000010000000001&cid=08125380291060861658&id=08142308605814597144", NULL), @@ -835,7 +851,9 @@ B("Intel", "D425KT", 0, "http://www.intel.com/content/www/us/en/motherboards/desktop-motherboards/desktop-board-d425kt.html", "NM10 with SPI lock down, BIOS lock, see http://www.flashrom.org/pipermail/flashrom/2012-January/008600.html"), B("Intel", "D865GLC", 0, NULL, "ICH5 with BIOS lock enable, see http://paste.flashrom.org/view.php?id=775"), B("Intel", "DG45ID", 0, "http://www.intel.com/products/desktop/motherboards/dg45id/dg45id-overview.htm", "Probing works (Winbond W25x32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), - B("Intel", "DG965OT", 0, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF080B, 1024 kB, SPI). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), + B("Intel", "DQ965GF", 0, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF016B, 2048 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), + B("Intel", "DG965OT", 0, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF080B, 1024 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), + B("Intel", "DH61AG ", 0, NULL, "H61 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2012-June/009417.html"), B("Intel", "DH67CF", 0, NULL, "H67 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2011-September/007789.html"), B("Intel", "DN2800MT (Marshalltown)", 0, NULL, "BIOS locked via BIOS_CNTL."), B("Intel", "EP80759", 1, NULL, NULL), @@ -875,6 +893,7 @@ B("MSI", "MS-7207 (K8NGM2-L)", 1, "http://www.msi.com/product/mb/K8NGM2-FID--IL--L.html", NULL), B("MSI", "MS-7211 (PM8M3-V)", 1, "http://www.msi.com/product/mb/PM8M3-V.html", NULL), B("MSI", "MS-7236 (945PL Neo3)", 1, "http://www.msi.com/product/mb/945PL-Neo3.html", NULL), + B("MSI", "MS-7250 (K9N SLI (rev 2.1))", 1, "http://www.msi.com/product/mb/K9N--SLI.html", NULL), B("MSI", "MS-7253 (K9VGM-V)", 1, "http://www.msi.com/product/mb/K9VGM-V.html", NULL), B("MSI", "MS-7255 (P4M890M)", 1, "http://www.msi.com/product/mb/P4M890M-L-IL.html", NULL), B("MSI", "MS-7260 (K9N Neo PCB 1.0)", 0, "http://www.msi.com/product/mb/K9N-Neo--PCB-1-0-.html", "Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot. Owned by Uwe Hermann ."), @@ -895,11 +914,13 @@ B("MSI", "MS-7640 (890FXA-GD70)",1, "http://www.msi.com/product/mb/890FXA-GD70.html", NULL), B("MSI", "MS-7642 (890GXM-G65)", 1, "http://www.msi.com/product/mb/890GXM-G65.html", NULL), B("MSI", "MS-7676 (H67MA-ED55(B3))", 1, "http://www.msi.com/product/mb/H67MA-ED55--B3-.html", "Seems to work fine basically, but user reported (hopefully unrelated) buggy behavior of the board after a firmware upgrade. See http://www.flashrom.org/pipermail/flashrom/2012-January/008547.html"), + B("MSI", "MS-7676 (Z68MA-G45 (B3))", 1, "http://www.msi.com/product/mb/Z68MA-G45--B3-.html", NULL), B("MSI", "MS-7696 (A75MA-G55)", 1, "http://www.msi.com/product/mb/A75MA-G55.html", NULL), B("MSI", "MS-7698 (E350IA-E45)", 1, "http://www.msi.com/product/mb/E350IA-E45.html", NULL), B("MSI", "MS-7740 (H61MA-E35(B3))", 1, "http://www.msi.com/product/mb/H61MA-E35--B3-.html", NULL), B("NEC", "PowerMate 2000", 1, "http://support.necam.com/mobilesolutions/hardware/Desktops/pm2000/celeron/", NULL), B("Nokia", "IP530", 1, NULL, NULL), + B("Palit", "N61S", 1, NULL, NULL), B("PCCHIPS ", "M598LMR (V9.0)", 1, NULL, NULL), B("PCCHIPS ", "M863G (V5.1A)", 1, "http://www.pcchips.com.tw/PCCWebSite/Products/ProductsDetail.aspx?CategoryID=1&DetailID=343&DetailName=Feature&MenuID=1&LanID=0", NULL), B("PC Engines", "Alix.1c", 1, "http://pcengines.ch/alix1c.htm", NULL), @@ -943,6 +964,7 @@ B("Supermicro", "X8DTU-F", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTU-F.cfm", NULL), B("Supermicro", "X8SIE(-F)", 0, "http://www.supermicro.com/products/motherboard/Xeon3000/3400/X8SIE.cfm?IPMI=N&TYP=LN2", "Requires unlocking the ME although the registers are set up correctly by the descriptor/BIOS already (tested with swseq and hwseq)."), B("Supermicro", "X8STi", 1, "http://www.supermicro.com/products/motherboard/Xeon3000/X58/X8STi.cfm", NULL), + B("Supermicro", "X9DR3-F", 0, "http://www.supermicro.com/products/motherboard/xeon/c600/x9dr3-f.cfm", "Probing works (Numonyx N25Q128 (supported by SFDP only atm), 16384 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("Supermicro", "X9SCA-F", 0, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCA-F.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("Supermicro", "X9SCL", 0, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCL.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), B("T-Online", "S-100", 1, "http://wiki.freifunk-hannover.de/T-Online_S_100", NULL), @@ -1013,7 +1035,10 @@ B("ASUS", "Eee PC 701 4G", 0, "http://www.asus.com/Eee/Eee_PC/Eee_PC_4G/", "It seems the chip (25X40VSIG) is behind some SPI flash translation layer (likely in the EC, the ENE KB3310)."), B("ASUS", "M6Ne", 0, "http://www.asus.com/Notebooks/Versatile_Performance/M6NNe/", "Untested board enable."), B("Clevo", "P150HM", 0, "http://www.clevo.com.tw/en/products/prodinfo_2.asp?productid=307", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Dell", "Inspiron 1420", 1, NULL, NULL), B("Dell", "Latitude CPi A366XT", 0, "http://www.coreboot.org/Dell_Latitude_CPi_A366XT", "The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop."), + B("Dell", "Vostro 3700", 0, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-May/009197.html."), + B("Dell", "Latitude E6520", 0, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-June/009420.html."), B("HP/Compaq", "nx9005", 0, "http://h18000.www1.hp.com/products/quickspecs/11602_na/11602_na.HTML", "Shuts down when probing for a chip. http://www.flashrom.org/pipermail/flashrom/2010-May/003321.html"), B("HP/Compaq", "nx9010", 0, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514", "Hangs upon '''flashrom -V''' (needs hard power-cycle then)."), B("IBM/Lenovo", "Thinkpad T40p", 0, "http://www.thinkwiki.org/wiki/Category:T40p", NULL), From mike.corcoran at wright.edu Sat Jul 28 09:58:21 2012 From: mike.corcoran at wright.edu (Corcoran, Mike) Date: Sat, 28 Jul 2012 07:58:21 +0000 Subject: [flashrom] test write of SST39VF010 on SIL3124 Sata Card In-Reply-To: <201207280254.q6S2sIrC018926@mail2.student.tuwien.ac.at> References: <4A667345662C5E4A9C18BCF509CD8D3756F490@SN2PRD0102MB143.prod.exchangelabs.com> <201207280254.q6S2sIrC018926@mail2.student.tuwien.ac.at> Message-ID: <4A667345662C5E4A9C18BCF509CD8D3756F5D5@SN2PRD0102MB143.prod.exchangelabs.com> Hey you know what? Most people would not have said anything. The fact that You admitted the mistake makes you a very honest person and I now have more respect for you, Because there are not many honest people left in the world, at least not in the United States. If I can do anything else for you let me know. Mike -----Original Message----- From: Stefan Tauner [mailto:stefan.tauner at student.tuwien.ac.at] Sent: Friday, July 27, 2012 10:54 PM To: Corcoran, Mike Cc: flashrom at flashrom.org Subject: Re: test write of SST39VF010 on SIL3124 Sata Card On Fri, 27 Jul 2012 21:43:07 +0000 "Corcoran, Mike" wrote: > Successful read, erase, and write. Thanks again! Thanks! Unfortunately i missed that someone has tested that already last month and i just did not commit it yet, so the additional testing i requested was unnecessary, sorry! > I also documented the use of your tool on my online docs web site so others can solve > Similar problems and find your tool as well: > http://www.wright.edu/~mike.corcoran/htmldocs/peripherals/sata/sil3124/sil3124-erasing-bios.html awesome :) -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Sat Jul 28 16:30:51 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sat, 28 Jul 2012 16:30:51 +0200 Subject: [flashrom] [PATCH 1/7] Introduce and use enum test_state In-Reply-To: <4F529BF7.3000604@gmx.net> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-2-git-send-email-stefan.tauner@student.tuwien.ac.at> <4F529BF7.3000604@gmx.net> Message-ID: <201207281430.q6SEUpQg018671@mail2.student.tuwien.ac.at> On Sat, 03 Mar 2012 23:32:23 +0100 Carl-Daniel Hailfinger wrote: > Is it possible that this patch made the board table one or two tabs > wider? The patch looks like that, and while I agree that some > files/sections should not have line length limits, adding another 16 > columns of whitespace is something I'd like to avoid. in general the url is the source of length problem. does making the table longer by putting the URL in a line of its own make sense? i personally would drop the URL anyway.. useless, partially misleading (for boards with multiple variants) and work for me (only, as i must emphasize :) iirc uwe was strongly against this, but i would be lying if would say that his matters much to me in this case (because the tested stuff branch is the most boring work i do for this project, not because i dont respect his view). -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From c-d.hailfinger.devel.2006 at gmx.net Sat Jul 28 16:38:05 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Sat, 28 Jul 2012 16:38:05 +0200 Subject: [flashrom] [PATCH 1/7] Introduce and use enum test_state In-Reply-To: <201207281430.q6SEUpQg018671@mail2.student.tuwien.ac.at> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-2-git-send-email-stefan.tauner@student.tuwien.ac.at> <4F529BF7.3000604@gmx.net> <201207281430.q6SEUpQg018671@mail2.student.tuwien.ac.at> Message-ID: <5013F94D.9050206@gmx.net> Am 28.07.2012 16:30 schrieb Stefan Tauner: > On Sat, 03 Mar 2012 23:32:23 +0100 > Carl-Daniel Hailfinger wrote: > >> Is it possible that this patch made the board table one or two tabs >> wider? The patch looks like that, and while I agree that some >> files/sections should not have line length limits, adding another 16 >> columns of whitespace is something I'd like to avoid. > in general the url is the source of length problem. > does making the table longer by putting the URL in a line > of its own make sense? It's certainly a novel idea, and it has some appeal. > i personally would drop the URL anyway.. useless, partially misleading > (for boards with multiple variants) and work for me (only, as i must > emphasize :) Yes, now that Uwe is essentially a fulltime sigrok developer, he's not maintaining that stuff anymore. What do you think about asking someone else to do the tested_stuff maintenance? > iirc uwe was strongly against this, but i would be lying if would say > that his matters much to me in this case (because the tested stuff > branch is the most boring work i do for this project, not because i dont > respect his view). Back then the policy was accepted because he handled the board testing maintenance. We might have to rethink this. Regards, Carl-Daniel -- http://www.hailfinger.org/ From svn at flashrom.org Sat Jul 28 21:35:27 2012 From: svn at flashrom.org (repository service) Date: Sat, 28 Jul 2012 21:35:27 +0200 Subject: [flashrom] [commit] r1555 - trunk Message-ID: Author: stefanct Date: Sat Jul 28 21:35:26 2012 New Revision: 1555 URL: http://flashrom.org/trac/flashrom/changeset/1555 Log: Introduce enum test_state. Previously boards in the wiki were tagged either as working or as known bad. But we added support to various boards via board enables that were then never tested because the owners have not reported back. This can now be tagged with NT and is shown appropriately. Also, the underlying data structure indicating state was converted from macros to an enum while preserving original integer values and is used for programmers and chipsets too. Signed-off-by: Stefan Tauner Acked-by: Stefan Tauner Modified: trunk/flash.h trunk/print.c trunk/print_wiki.c trunk/programmer.h Modified: trunk/flash.h ============================================================================== --- trunk/flash.h Sat Jul 28 05:17:15 2012 (r1554) +++ trunk/flash.h Sat Jul 28 21:35:26 2012 (r1555) @@ -253,8 +253,11 @@ int read_buf_from_file(unsigned char *buf, unsigned long size, const char *filename); int write_buf_to_file(unsigned char *buf, unsigned long size, const char *filename); -#define OK 0 -#define NT 1 /* Not tested */ +enum test_state { + OK = 0, + NT = 1, /* Not tested */ + BAD +}; /* Something happened that shouldn't happen, but we can go on. */ #define ERROR_NONFATAL 0x100 Modified: trunk/print.c ============================================================================== --- trunk/print.c Sat Jul 28 05:17:15 2012 (r1554) +++ trunk/print.c Sat Jul 28 21:35:26 2012 (r1555) @@ -358,14 +358,15 @@ for (i = 0; i < maxchipsetlen - strlen(c->device_name); i++) msg_ginfo(" "); msg_ginfo("%04x:%04x%s\n", c->vendor_id, c->device_id, - (c->status == OK) ? "" : " (untested)"); + (c->status == NT) ? " (untested)" : ""); } } static void print_supported_boards_helper(const struct board_info *boards, const char *devicetype) { - int i, boardcount_good = 0, boardcount_bad = 0; + int i; + unsigned int boardcount_good = 0, boardcount_bad = 0, boardcount_nt = 0; const struct board_match *e = board_matches; const struct board_info *b = boards; int maxvendorlen = strlen("Vendor") + 1; @@ -374,16 +375,19 @@ for (b = boards; b->vendor != NULL; b++) { maxvendorlen = max(maxvendorlen, strlen(b->vendor)); maxboardlen = max(maxboardlen, strlen(b->name)); - if (b->working) + if (b->working == OK) boardcount_good++; + else if (b->working == NT) + boardcount_nt++; else boardcount_bad++; } maxvendorlen++; maxboardlen++; - msg_ginfo("Known %s (good: %d, bad: %d):\n\n", - devicetype, boardcount_good, boardcount_bad); + msg_ginfo("%d known %s (good: %d, untested: %d, bad: %d):\n\n", + boardcount_good + boardcount_nt + boardcount_bad, + devicetype, boardcount_good, boardcount_nt, boardcount_bad); msg_ginfo("Vendor"); for (i = strlen("Vendor"); i < maxvendorlen; i++) @@ -405,7 +409,12 @@ msg_ginfo("%s", b->name); for (i = 0; i < maxboardlen - strlen(b->name); i++) msg_ginfo(" "); - msg_ginfo((b->working) ? "OK " : "BAD "); + if (b->working == OK) + msg_ginfo("OK "); + else if (b->working == NT) + msg_ginfo("NT "); + else + msg_ginfo("BAD "); for (e = board_matches; e->vendor_name != NULL; e++) { if (strcmp(e->vendor_name, b->vendor) @@ -551,476 +560,476 @@ /* Please keep this list alphabetically ordered by vendor/board. */ const struct board_info boards_known[] = { #if defined(__i386__) || defined(__x86_64__) - B("A-Trend", "ATC-6220", 1, "http://www.motherboard.cz/mb/atrend/atc6220.htm", NULL), - B("abit", "A-S78H", 1, NULL, NULL), - B("abit", "AN-M2", 1, NULL, NULL), - B("abit", "AV8", 1, NULL, NULL), - B("abit", "AX8", 1, NULL, NULL), - B("abit", "BM6", 1, NULL, NULL), - B("abit", "Fatal1ty F-I90HD", 1, NULL, NULL), - B("abit", "IC7", 1, NULL, NULL), - B("abit", "IP35", 1, NULL, NULL), - B("abit", "IP35 Pro", 1, NULL, NULL), - B("abit", "IS-10", 0, NULL, "Reported by deejkuba at aol.com to flashrom at coreboot.org, no public archive. Missing board enable and/or M50FW040 unlocking. May work now."), - B("abit", "KN8 Ultra", 1, NULL, NULL), - B("abit", "NF-M2 nView", 1, NULL, NULL), - B("abit", "NF-M2S", 1, NULL, NULL), - B("abit", "NF7-S", 1, NULL, NULL), - B("abit", "VA6", 1, NULL, NULL), - B("abit", "VT6X4", 1, NULL, NULL), - B("Acorp", "6A815EPD", 1, "http://web.archive.org/web/20021206163652/www.acorp.com.tw/English/default.asp", NULL), - B("Advantech", "PCM-5820", 1, "http://www.emacinc.com/sbc_pc_compatible/pcm_5820.htm", NULL), - B("agami", "Aruma", 1, "http://web.archive.org/web/20080212111524/http://www.agami.com/site/ais-6000-series", NULL), - B("Albatron", "PM266A Pro", 1, "http://www.albatron.com.tw/English/Product/MB/pro_detail.asp?rlink=Overview&no=56", NULL), /* FIXME */ - B("AOpen", "i945GMx-VFX", 1, NULL, "This is (also?) an OEM board from FSC (used in e.g. ESPRIMO Q5010 with designation D2544-B1)."), - B("AOpen", "vKM400Am-S", 1, "http://usa.aopen.com/products_detail.aspx?Auno=824", NULL), - B("Artec Group","DBE61", 1, "http://wiki.thincan.org/DBE61", NULL), - B("Artec Group","DBE62", 1, "http://wiki.thincan.org/DBE62", NULL), - B("ASI", "MB-5BLMP", 1, "http://www.hojerteknik.com/winnet.htm", "Used in the IGEL WinNET III thin client."), - B("ASRock", "775i65G", 1, "http://www.asrock.com/mb/overview.asp?Model=775i65G", NULL), - B("ASRock", "880G Pro3", 1, "http://www.asrock.com/mb/overview.asp?Model=880G%20Pro3", NULL), - B("ASRock", "890GX Extreme3", 1, "http://www.asrock.com/mb/overview.asp?Model=890GX%20Extreme3", NULL), - B("ASRock", "939A785GMH/128M", 1, "http://www.asrock.com/mb/overview.asp?Model=939A785GMH/128M", NULL), - B("ASRock", "A330GC", 1, "http://www.asrock.com/mb/overview.asp?Model=A330GC", NULL), - B("ASRock", "A770CrossFire", 1, "http://www.asrock.com/mb/overview.asp?Model=A770CrossFire", NULL), - B("ASRock", "A780FullHD", 1, "http://www.asrock.com/mb/overview.asp?Model=A780FullHD", "While flashrom is working correctly, there might be problems with the firmware images themselves. Please see http://www.flashrom.org/pipermail/flashrom/2012-July/009600.html for details."), - B("ASRock", "ALiveNF6G-DVI", 1, "http://www.asrock.com/mb/overview.asp?Model=ALiveNF6G-DVI", NULL), - B("ASRock", "AM2NF6G-VSTA", 1, "http://www.asrock.com/mb/overview.asp?Model=AM2NF6G-VSTA", NULL), - B("ASRock", "ConRoeXFire-eSATA2", 1, "http://www.asrock.com/mb/overview.asp?model=conroexfire-esata2", NULL), - B("ASRock", "H61M-ITX", 0, "http://www.asrock.com/mb/overview.asp?Model=H61M-ITX", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASRock", "H67M", 0, "http://www.asrock.com/mb/overview.asp?Model=H67M", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASRock", "K7S41", 1, "http://www.asrock.com/mb/overview.asp?Model=K7S41", NULL), - B("ASRock", "K7S41GX", 1, "http://www.asrock.com/mb/overview.asp?Model=K7S41GX", NULL), - B("ASRock", "K7VT4A+", 0, "http://www.asrock.com/mb/overview.asp?Model=K7VT4A%2b", "No chip found, probably due to flash translation. http://www.flashrom.org/pipermail/flashrom/2009-August/000393.html"), - B("ASRock", "K8S8X", 1, "http://www.asrock.com/mb/overview.asp?Model=K8S8X", NULL), - B("ASRock", "M3A790GXH/128M", 1, "http://www.asrock.com/mb/overview.asp?Model=M3A790GXH/128M", NULL), - B("ASRock", "N61P-S", 1, "http://www.asrock.com/mb/overview.asp?Model=N61P-S", NULL), - B("ASRock", "P4i65GV", 1, "http://www.asrock.com/mb/overview.asp?Model=P4i65GV", NULL), - B("ASUS", "A7N8X Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8X_Deluxe/", NULL), - B("ASUS", "A7N8X-E Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8XE_Deluxe/", NULL), - B("ASUS", "A7N8X-VM/400", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8XVM400/", NULL), - B("ASUS", "A7V133", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socka/kt133a/a7v133/", NULL), - B("ASUS", "A7V333", 1, "ftp://ftp.asus.com.tw/pub/asus/mb/socka/kt333/a7v333/", NULL), - B("ASUS", "A7V400-MX", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V400MX/", NULL), - B("ASUS", "A7V600-X", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V600X/", NULL), - B("ASUS", "A7V8X", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8X/", NULL), - B("ASUS", "A7V8X-MX", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XMX/", NULL), - B("ASUS", "A7V8X-MX SE", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XMX_SE/", NULL), - B("ASUS", "A7V8X-X", 1, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XX/", NULL), - B("ASUS", "A8M2N-LA (NodusM3-GL8E)", 1, "http://h10010.www1.hp.com/ewfrf/wc/document?docname=c00757531&cc=us&dlc=en&lc=en", "This is an OEM board from HP, the HP name is NodusM3-GL8E."), - B("ASUS", "A8N-E", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NE/", NULL), - B("ASUS", "A8N-LA (Nagami-GL8E)", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?lc=en&cc=us&docname=c00647121&dlc=en", "This is an OEM board from HP, the HP name is Nagami-GL8E."), - B("ASUS", "A8N-SLI", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NSLI/", NULL), - B("ASUS", "A8N-SLI Deluxe", 0, NULL, "Untested board enable."), - B("ASUS", "A8N-SLI Premium", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NSLI_Premium/", NULL), - B("ASUS", "A8N-VM", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NVM/", NULL), - B("ASUS", "A8N-VM CSM", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NVM_CSM/", NULL), - B("ASUS", "A8NE-FM/S", 1, "http://www.hardwareschotte.de/hardware/preise/proid_1266090/preis_ASUS+A8NE-FM", NULL), - B("ASUS", "A8V Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8V_Deluxe/", NULL), - B("ASUS", "A8V-E Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8VE_Deluxe/", NULL), - B("ASUS", "A8V-E SE", 1, "http://www.asus.com/Motherboards/AMD_Socket_939/A8VE_SE/", "See http://www.coreboot.org/pipermail/coreboot/2007-October/026496.html"), - B("ASUS", "Crosshair II Formula", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/Crosshair_II_Formula/", NULL), - B("ASUS", "Crosshair IV Extreme", 1, "http://www.asus.com/Motherboards/AMD_AM3/Crosshair_IV_Extreme/", NULL), - B("ASUS", "E35M1-I DELUXE", 1, "http://www.asus.com/Motherboards/AMD_CPU_on_Board/E35M1I_DELUXE/", NULL), - B("ASUS", "K8N", 1, "http://www.asus.com/Motherboards/AMD_Socket_754/K8N/", NULL), - B("ASUS", "K8V", 1, "http://www.asus.com/Motherboards/AMD_Socket_754/K8V/", NULL), - B("ASUS", "K8V SE Deluxe", 1, "http://www.asus.com/Motherboards/AMD_Socket_754/K8V_SE_Deluxe/", NULL), - B("ASUS", "K8V-X", 1, "http://www.asus.com/Motherboards/AMD_Socket_754/K8VX/", NULL), - B("ASUS", "K8V-X SE", 1, "http://www.asus.com/Motherboards/AMD_Socket_754/K8VX_SE/", NULL), - B("ASUS", "KFSN4-DRE/SAS", 1, "http://www.asus.com/Server_Workstation/Server_Motherboards/KFSN4DRESAS/", NULL), - B("ASUS", "M2A-MX", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2AMX/", NULL), - B("ASUS", "M2A-VM (HDMI)", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2AVM/", NULL), - B("ASUS", "M2N32-SLI Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2N32SLI_DeluxeWireless_Edition/", NULL), - B("ASUS", "M2N68-VM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M2N68VM/", NULL), - B("ASUS", "M2N-E", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NE/", "If the machine doesn't come up again after flashing, try resetting the NVRAM(CMOS). The MAC address of the onboard network card will change to the value stored in the new image, so backup the old address first. See http://www.flashrom.org/pipermail/flashrom/2009-November/000879.html"), - B("ASUS", "M2N-E SLI", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NE_SLI/", NULL), - B("ASUS", "M2N-SLI Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NSLI_Deluxe/", NULL), - B("ASUS", "M2NBP-VM CSM", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NBPVM_CSM/", NULL), - B("ASUS", "M2NPV-VM", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2NPVVM/", NULL), - B("ASUS", "M2V", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2V/", NULL), - B("ASUS", "M2V-MX", 1, "http://www.asus.com/Motherboards/AMD_AM2/M2VMX/", NULL), - B("ASUS", "M3A", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A/", NULL), - B("ASUS", "M3A76-CM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A76CM/", NULL), - B("ASUS", "M3A78-EM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A78EM/", NULL), - B("ASUS", "M3N78 PRO", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78_PRO/", NULL), - B("ASUS", "M3N78-VM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78VM/", NULL), - B("ASUS", "M4A78-EM", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4A78EM/", NULL), - B("ASUS", "M4A785T-M", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TM/", NULL), - B("ASUS", "M4A785TD-M EVO", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TDM_EVO/", NULL), - B("ASUS", "M4A785TD-V EVO", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TDV_EVO/", NULL), - B("ASUS", "M4A78LT-M LE", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A78LTM_LE/", NULL), - B("ASUS", "M4A79T Deluxe", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A79T_Deluxe/", NULL), - B("ASUS", "M4A87TD/USB3", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A87TDUSB3/", NULL), - B("ASUS", "M4A89GTD PRO", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4A89GTD_PRO/", NULL), - B("ASUS", "M4N68T V2", 1, "http://www.asus.com/Motherboards/AMD_AM3/M4N68T_V2/", NULL), - B("ASUS", "M4N78 PRO", 1, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4N78_PRO/", NULL), - B("ASUS", "M5A78L-M LX", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A78LM_LX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see http://www.flashrom.org/pipermail/flashrom/2012-May/009200.html"), - B("ASUS", "M5A99X EVO", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A99X_EVO/", NULL), - B("ASUS", "Maximus IV Extreme", 0, "http://www.asus.com/Motherboards/Intel_Socket_1155/Maximus_IV_Extreme/", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "MEW-AM", 0, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/", "No public report found. Owned by Uwe Hermann . May work now."), - B("ASUS", "MEW-VM", 0, "http://www.elhvb.com/mboards/OEM/HP/manual/ASUS%20MEW-VM.htm", "No public report found. Owned by Uwe Hermann . May work now."), - B("ASUS", "OPLX-M", 0, NULL, "Untested board enable."), - B("ASUS", "P2B", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b/", NULL), - B("ASUS", "P2B-D", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/", NULL), - B("ASUS", "P2B-DS", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-ds/", NULL), - B("ASUS", "P2B-F", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/", NULL), - B("ASUS", "P2B-N", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-n/", NULL), - B("ASUS", "P2E-M", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440ex/p2e-m/", NULL), - B("ASUS", "P2L97-S", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440lx/p2l97-s/", NULL), - B("ASUS", "P3B-F", 0, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p3b-f/", "No public report found. Owned by Uwe Hermann . May work now."), - B("ASUS", "P4B266", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4b266/", NULL), - B("ASUS", "P4B266-LM", 1, "http://esupport.sony.com/US/perl/swu-list.pl?mdl=PCVRX650", NULL), - B("ASUS", "P4B533-E", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4b533-e/", NULL), - B("ASUS", "P4C800-E Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4C800E_Deluxe/", NULL), - B("ASUS", "P4GV-LA (Guppy)", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00363478", NULL), - B("ASUS", "P4P800", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800/", NULL), - B("ASUS", "P4P800-E Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800E_Deluxe/", NULL), - B("ASUS", "P4P800-VM", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800VM/", NULL), - B("ASUS", "P4S533-X", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4s533-x/", NULL), - B("ASUS", "P4S800-MX", 1, "http://www.asus.com/Motherboards/Intel_Socket_478/P4S800MX/", NULL), - B("ASUS", "P4SC-E", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4sc-e/", "Part of ASUS Terminator P4 533 barebone system"), - B("ASUS", "P4SD-LA", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00022505", NULL), - B("ASUS", "P5A", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock7/ali/p5a/", NULL), - B("ASUS", "P5B", 1, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B/", NULL), - B("ASUS", "P5B-Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5B_Deluxe/", NULL), - B("ASUS", "P5BV-M", 0, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-VM/", "Reported by Bernhard M. Wiedemann to flashrom at coreboot.org, no public archive. Missing board enable and/or SST49LF008A unlocking. May work now."), - B("ASUS", "P5BV-R", 1, "http://www.asus.com/Server_Workstation/Servers/RS120E5PA2/", "Used in RS120-E5/PA2 servers."), - B("ASUS", "P5GC-MX/1333", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GCMX1333/", NULL), - B("ASUS", "P5GD1 Pro", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD1_PRO/", NULL), - B("ASUS", "P5GD1-VM/S", 1, NULL, "This is an OEM board from FSC. Although flashrom supports it and can probably not distinguish it from the P5GD1-VM, please note that the P5GD1-VM BIOS does not support the FSC variants completely."), - B("ASUS", "P5GD1(-VM)", 0, NULL, "Untested board enable."), - B("ASUS", "P5GD2 Premium", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2_Premium/", NULL), - B("ASUS", "P5GD2-X", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2X/", NULL), - B("ASUS", "P5GDC Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDC_Deluxe/", NULL), - B("ASUS", "P5GDC-V Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDCV_Deluxe/", NULL), - B("ASUS", "P5GD2/C variants", 0, NULL, "Untested board enable."), - B("ASUS", "P5K-V", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KV/", NULL), - B("ASUS", "P5K-VM", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KVM/", NULL), - B("ASUS", "P5KC", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KC/", NULL), - B("ASUS", "P5KPL-CM", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KPLCM/", NULL), - B("ASUS", "P5L-MX", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5LMX/", NULL), - B("ASUS", "P5L-VM 1394", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5LVM_1394/", NULL), - B("ASUS", "P5LD2", 0, NULL, "Untested board enable."), - B("ASUS", "P5LP-LE (Lithium-UL8E)", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00379616&tmp_task=prodinfoCategory&cc=us&dlc=en&lc=en&product=1159887", "This is an OEM board from HP."), - B("ASUS", "P5LP-LE (Epson OEM)", 1, NULL, "This is an OEM board from Epson (e.g. Endeavor MT7700)."), - B("ASUS", "P5LP-LE", 0, NULL, "This designation is used for OEM boards from HP, Epson and maybe others. The HP names vary and not all of them have been tested yet. Please report any success or failure, thanks."), - B("ASUS", "P5N-E SLI", 0, "http://www.asus.com/Motherboards/Intel_Socket_775/P5NE_SLI/", "Needs a board enable (http://patchwork.coreboot.org/patch/3298/)."), - B("ASUS", "P5N-D", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5ND/", NULL), - B("ASUS", "P5N-E SLI", 0, "http://www.asus.com/Motherboards/Intel_Socket_775/P5NE_SLI/", "Untested board enable."), - B("ASUS", "P5N32-E SLI", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5N32E_SLI/", NULL), - B("ASUS", "P5N7A-VM", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5N7AVM/", NULL), - B("ASUS", "P5ND2-SLI Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5ND2SLI_Deluxe/", NULL), - B("ASUS", "P5PE-VM", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5PEVM/", NULL), - B("ASUS", "P5QPL-AM", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5QPLAM/", NULL), - B("ASUS", "P5VD1-X", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5VD1X/", NULL), - B("ASUS", "P5VD2-MX", 1, "http://www.asus.com/Motherboards/Intel_Socket_775/P5VD2MX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see http://www.flashrom.org/pipermail/flashrom/2012-March/009014.html"), - B("ASUS", "P6T SE", 1, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_SE/", NULL), - B("ASUS", "P6T Deluxe", 1, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe/", NULL), - B("ASUS", "P6T Deluxe V2", 1, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe_V2/", NULL), - B("ASUS", "P7H57D-V EVO", 1, "http://www.asus.com/Motherboards/Intel_Socket_1156/P7H57DV_EVO/", NULL), - B("ASUS", "P7H55-M LX", 0, NULL, "flashrom works correctly, but GbE LAN is nonworking (probably due to a missing/bogus MAC address; see http://www.flashrom.org/pipermail/flashrom/2011-July/007432.html and http://ubuntuforums.org/showthread.php?t=1534389 for a possible workaround)"), - B("ASUS", "P8B-E/4L", 0, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8B WS", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8H61 PRO", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8H61-M LE/USB3", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8H67-M PRO", 0, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8P67 (rev. 3.1)", 0, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8P67 LE", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8P67 PRO (rev. 3.0)", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8P67_PRO/", NULL), - B("ASUS", "P8Z68-V", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), - B("ASUS", "P8Z68-V PRO", 0, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ASUS", "P8Z68-V PRO/GEN3", 1, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V_PROGEN3/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), - B("ASUS", "SABERTOOTH 990FX", 1, "http://www.asus.com/Motherboards/AMD_AM3Plus/SABERTOOTH_990FX/", NULL), - B("ASUS", "TUSL2-C", 0, "http://support.asus.com/download.aspx?SLanguage=en&p=1&s=4&m=TUSL2-C&os=&hashedid=n/a", "Untested board enable."), - B("ASUS", "Z8NA-D6C", 1, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8NAD6C/", NULL), - B("ASUS", "Z8PE-D12", 1, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8PED12/", NULL), - B("Bachmann", "OT200", 1, "http://www.bachmann.info/produkte/bedien-und-beobachtungsgeraete/operator-terminals/", NULL), - B("BCOM", "WinNET100", 1, "http://www.coreboot.org/BCOM_WINNET100", "Used in the IGEL-316 thin client."), - B("Bifferos", "Bifferboard", 1, "http://bifferos.co.uk/", NULL), - B("Biostar", "H61MU3", 0, NULL, "Probing works (Eon EN25Q32(A/B), 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("Biostar", "M6TBA", 0, "ftp://ftp.biostar-usa.com/manuals/M6TBA/", "No public report found. Owned by Uwe Hermann . May work now."), - B("Biostar", "M7NCD Pro", 1, "http://www.biostar.com.tw/app/en/mb/content.php?S_ID=260", NULL), - B("Biostar", "M7VIQ", 0, NULL, "Missing board enable (W83697HF/F/HG/G), see http://www.flashrom.org/pipermail/flashrom/2012-February/008863.html"), - B("Biostar", "N61PB-M2S", 1, NULL, NULL), - B("Biostar", "N68S3+", 1, NULL, NULL), - B("Biostar", "P4M80-M4", 1, "http://www.biostar-usa.com/mbdetails.asp?model=p4m80-m4", NULL), - B("Biostar", "TA780G M2+", 1, "http://www.biostar.com.tw/app/en/t-series/content.php?S_ID=344", NULL), - B("Boser", "HS-6637", 0, "http://www.boser.com.tw/manual/HS-62376637v3.4.pdf", "Reported by Mark Robinson to flashrom at coreboot.org, no public archive. Missing board enable and/or F29C51002T unlocking. May work now."), - B("Congatec", "conga-X852", 1, "http://www.congatec.com/single_news+M57715f6263d.html?&L=1", NULL), - B("Dell", "Inspiron 580", 0, "http://support.dell.com/support/edocs/systems/insp580/en/index.htm", "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("Dell", "OptiPlex GX1", 1, "http://support.dell.com/support/edocs/systems/ban_gx1/en/index.htm", NULL), - B("Dell", "PowerEdge 1850", 1, "http://support.dell.com/support/edocs/systems/pe1850/en/index.htm", NULL), - B("Dell", "Vostro 460", 0, "http://support.dell.com/support/edocs/systems/vos460/en/index.htm", "Mainboard model is 0Y2MRG. Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), - B("DFI", "855GME-MGF", 0, "http://www.dfi.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?action=e&downloadType=&windowstate=normal&mode=view&downloadFlag=false&itemId=433", "Probably needs a board enable. http://www.coreboot.org/pipermail/coreboot/2009-May/048549.html"), - B("DFI", "Blood-Iron P35 T2RL", 1, "http://lp.lanparty.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?itemId=516&downloadFlag=false&action=1", NULL), - B("Elitegroup", "GeForce6100SM-M ", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=685&MenuID=24", NULL), - B("Elitegroup", "GF7100PVT-M3 (V1.0)", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=853&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), - B("Elitegroup", "GF8200A", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=873&CategoryID=1&MenuID=20&LanID=0", NULL), - B("Elitegroup", "K7S5A", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=279&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL), - B("Elitegroup", "K7S6A", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=77&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL), - B("Elitegroup", "K7SEM (V1.0A)", 1, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=229&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), - B("Elitegroup", "K7VTA3", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=264&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL), - B("Elitegroup", "P4M800PRO-M (V1.0A, V2.0)", 1, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&DetailID=574&DetailName=Feature&MenuID=52&LanID=0", NULL), - B("Elitegroup", "P4VXMS (V1.0A)", 1, NULL, NULL), - B("Elitegroup", "P6IWP-Fe", 1, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&TypeID=3&DetailID=95&DetailName=Feature&MenuID=1&LanID=0", NULL), - B("Elitegroup", "P6VAP-A+", 1, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=117&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL), - B("Elitegroup", "RS485M-M", 1, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&DetailID=654&DetailName=Feature&MenuID=1&LanID=0", NULL), - B("Emerson", "ATCA-7360", 1, "http://www.emerson.com/sites/Network_Power/en-US/Products/Product_Detail/Product1/Pages/EmbCompATCA-7360.aspx", NULL), - B("EPoX", "EP-3PTA", 0, NULL, "Missing board enable (W83627HF/F/HG/G), see http://www.flashrom.org/pipermail/flashrom/2012-April/009043.html"), - B("EPoX", "EP-8K5A2", 1, "http://www.epox.com/product.asp?ID=EP-8K5A2", NULL), - B("EPoX", "EP-8NPA7I", 1, "http://www.epox.com/product.asp?ID=EP-8NPA7I", NULL), - B("EPoX", "EP-8RDA3+", 1, "http://www.epox.com/product.asp?ID=EP-8RDA3plus", NULL), - B("EPoX", "EP-9NPA7I", 1, "http://www.epox.com/product.asp?ID=EP-9NPA7I", NULL), - B("EPoX", "EP-BX3", 1, "http://www.epox.com/product.asp?ID=EP-BX3", NULL), - B("EVGA", "132-CK-NF78", 1, "http://www.evga.com/articles/385.asp", NULL), - B("EVGA", "270-WS-W555-A2 (Classified SR-2)", 1, "http://www.evga.com/products/moreInfo.asp?pn=270-WS-W555-A2", NULL), - B("FIC", "VA-502", 0, "ftp://ftp.fic.com.tw/motherboard/manual/socket7/va-502/", "No public report found. Owned by Uwe Hermann . Seems the PCI subsystem IDs are identical with the Tekram P6Pro-A5. May work now."), - B("Foxconn", "6150K8MD-8EKRSH", 1, "http://www.foxconnchannel.com/product/motherboards/detail_overview.aspx?id=en-us0000157", NULL), - B("Foxconn", "A6VMX", 1, "http://www.foxconnchannel.com/product/motherboards/detail_overview.aspx?id=en-us0000346", NULL), - B("Foxconn", "P4M800P7MA-RS2", 1, "http://www.foxconnchannel.com/Product/Motherboards/detail_overview.aspx?id=en-us0000138", NULL), - B("Freetech", "P6F91i", 1, "http://web.archive.org/web/20010417035034/http://www.freetech.com/prod/P6F91i.html", NULL), - B("Fujitsu-Siemens", "ESPRIMO P5915", 1, "http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/professionalpc/ESPRIMO/P/EsprimoP5915-6.htm", "Mainboard model is D2312-A2."), - B("Fujitsu-Siemens", "CELSIUS W410", 0, "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("GIGABYTE", "GA-2761GXDK", 1, "http://www.computerbase.de/news/hardware/mainboards/amd-systeme/2007/mai/gigabyte_dtx-mainboard/", NULL), - B("GIGABYTE", "GA-6BXC", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1445", NULL), - B("GIGABYTE", "GA-6BXDU", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1429", NULL), - B("GIGABYTE", "GA-6IEM", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1379", NULL), - B("GIGABYTE", "GA-6VXE7+", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2410", NULL), - B("GIGABYTE", "GA-6ZMA", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1541", NULL), - B("GIGABYTE", "GA-MA785GMT-UD2H (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3156", NULL), - B("GIGABYTE", "GA-770TA-UD3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3272", NULL), - B("GIGABYTE", "GA-7DXR", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1302", NULL), - B("GIGABYTE", "GA-7VT600", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1666", NULL), - B("GIGABYTE", "GA-7ZM", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1366", "Works fine if you remove jumper JP9 on the board and disable the flash protection BIOS option."), - B("GIGABYTE", "GA-880GMA-USB3 (rev. 3.1)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3817", NULL), - B("GIGABYTE", "GA-8I945GZME-RH", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2304", NULL), - B("GIGABYTE", "GA-8IP775", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1830", NULL), - B("GIGABYTE", "GA-8IRML", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1343", NULL), - B("GIGABYTE", "GA-8PE667 Ultra 2", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1607", NULL), - B("GIGABYTE", "GA-8SIMLH", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1399", NULL), - B("GIGABYTE", "GA-945PL-S3P (rev. 6.6)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2541", NULL), - B("GIGABYTE", "GA-965GM-S2 (rev. 2.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2617", NULL), - B("GIGABYTE", "GA-965P-DS4", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2288", NULL), - B("GIGABYTE", "GA-EP31-DS3L (rev. 2.1)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2964", NULL), - B("GIGABYTE", "GA-EP35-DS3L", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2778", NULL), - B("GIGABYTE", "GA-H61M-D2-B3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3773", NULL), - B("GIGABYTE", "GA-H61M-D2H-USB3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=4004", NULL), - B("GIGABYTE", "GA-EX58-UD4P", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2986", NULL), - B("GIGABYTE", "GA-K8N-SLI", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1928", NULL), - B("GIGABYTE", "GA-K8N51GMF", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1950", NULL), - B("GIGABYTE", "GA-K8N51GMF-9", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=1939", NULL), - B("GIGABYTE", "GA-K8NS Pro-939", 0, "http://www.gigabyte.com/products/product-page.aspx?pid=1875", "Untested board enable."), - B("GIGABYTE", "GA-M57SLI-S4", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2287", NULL), - B("GIGABYTE", "GA-M61P-S3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2434", NULL), - B("GIGABYTE", "GA-M720-US3", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3006", NULL), - B("GIGABYTE", "GA-MA69VM-S2", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2500", NULL), - B("GIGABYTE", "GA-MA74GM-S2H (rev. 3.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3152", NULL), - B("GIGABYTE", "GA-MA770-UD3 (rev. 2.1)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3302", NULL), - B("GIGABYTE", "GA-MA770T-UD3P", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3096", NULL), - B("GIGABYTE", "GA-MA780G-UD3H", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3004", NULL), - B("GIGABYTE", "GA-MA78G-DS3H (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2800", NULL), - B("GIGABYTE", "GA-MA78GM-S2H", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2758", NULL), /* TODO: Rev. 1.0, 1.1, or 2.x? */ - B("GIGABYTE", "GA-MA78GPM-DS2H", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2859", NULL), - B("GIGABYTE", "GA-MA790FX-DQ6", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2690", NULL), - B("GIGABYTE", "GA-MA790GP-DS4H", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=2887", NULL), - B("GIGABYTE", "GA-MA790XT-UD4P (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3010", NULL), - B("GIGABYTE", "GA-P55A-UD4 (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3436", NULL), - B("GIGABYTE", "GA-P67A-UD3P", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3649", NULL), - B("GIGABYTE", "GA-X58A-UD7 (rev. 2.0)", 1, NULL, NULL), - B("GIGABYTE", "GA-X58A-UDR3 (rev. 2.0)", 1, NULL, NULL), - B("GIGABYTE", "GA-Z68MX-UD2H-B (rev. 1.3)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3854", NULL), - B("GIGABYTE", "GA-Z68XP-UD3 (rev. 1.0)", 1, "http://www.gigabyte.com/products/product-page.aspx?pid=3892", NULL), - B("HP", "8100 Elite CMT PC (304Bh)", 0, NULL, "SPI lock down, PR, read-only descriptor, locked ME region."), - B("HP", "e-Vectra P2706T", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=77515&prodTypeId=12454", NULL), - B("HP", "ProLiant DL145 G3", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00816835&lang=en&cc=us&taskId=101&prodSeriesId=3219755&prodTypeId=15351", NULL), - B("HP", "ProLiant DL165 G6", 1, "http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/15351-15351-3328412-241644-3328421-3955644.html", NULL), - B("HP", "ProLiant N40L", 1, NULL, NULL), - B("HP", "Puffer2-UL8E", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00300023", NULL), - B("HP", "dc7800", 0, "http://h10010.www1.hp.com/wwpc/us/en/sm/WF06a/12454-12454-64287-321860-3328898-3459241.html?dnr=1", "ICH9DO with SPI lock down, BIOS lock, PR, read-only descriptor, locked ME region."), - B("HP", "Vectra VL400", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00060658&lang=en&cc=us", NULL), - B("HP", "Vectra VL420 SFF", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00060661&lang=en&cc=us", NULL), - B("HP", "xw4400 (0A68h)", 0, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00775230", "ICH7 with SPI lock down, BIOS lock, flash block detection (SST25VF080B); see http://paste.flashrom.org/view.php?id=686"), - B("HP", "xw6400", 0, NULL, "No chip found, see http://www.flashrom.org/pipermail/flashrom/2012-March/009006.html"), - B("HP", "xw9300", 0, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodTypeId=12454&prodSeriesId=459226", "Missing board enable, see http://www.flashrom.org/pipermail/flashrom/2012-February/008862.html"), - B("HP", "xw9400", 1, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=3211286&prodTypeId=12454", "Boot block is write protected unless the solder points next to F2 are shorted."), - B("HP", "Z400 Workstation (0AE4h)", 0, NULL, "ICH10R with BIOS lock enable and a protected range PR0, see http://www.flashrom.org/pipermail/flashrom/2012-June/009350.html"), - B("IBASE", "MB899", 1, "http://www.ibase-i.com.tw/2009/mb899.html", NULL), - B("IBM", "x3455", 1, "http://www-03.ibm.com/systems/x/hardware/rack/x3455/index.html", NULL), - B("IEI", "PICOe-9452", 1, "http://www.ieiworld.com/product_groups/industrial/content.aspx?keyword=WSB&gid=00001000010000000001&cid=08125380291060861658&id=08142308605814597144", NULL), - B("Intel", "D201GLY", 1, "http://www.intel.com/support/motherboards/desktop/d201gly/index.htm", NULL), - B("Intel", "D425KT", 0, "http://www.intel.com/content/www/us/en/motherboards/desktop-motherboards/desktop-board-d425kt.html", "NM10 with SPI lock down, BIOS lock, see http://www.flashrom.org/pipermail/flashrom/2012-January/008600.html"), - B("Intel", "D865GLC", 0, NULL, "ICH5 with BIOS lock enable, see http://paste.flashrom.org/view.php?id=775"), - B("Intel", "DG45ID", 0, "http://www.intel.com/products/desktop/motherboards/dg45id/dg45id-overview.htm", "Probing works (Winbond W25x32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), - B("Intel", "DQ965GF", 0, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF016B, 2048 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), - B("Intel", "DG965OT", 0, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF080B, 1024 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), - B("Intel", "DH61AG ", 0, NULL, "H61 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2012-June/009417.html"), - B("Intel", "DH67CF", 0, NULL, "H67 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2011-September/007789.html"), - B("Intel", "DN2800MT (Marshalltown)", 0, NULL, "BIOS locked via BIOS_CNTL."), - B("Intel", "EP80759", 1, NULL, NULL), - B("Intel", "Foxhollow", 1, NULL, "Intel reference board."), - B("Intel", "Greencity", 1, NULL, "Intel reference board."), - B("Intel", "SE440BX-2", 0, "http://downloadcenter.intel.com/SearchResult.aspx?lang=eng&ProductFamily=Desktop+Boards&ProductLine=Discontinued+Motherboards&ProductProduct=Intel%C2%AE+SE440BX-2+Motherboard", "Probably won't work, see http://www.coreboot.org/pipermail/flashrom/2010-July/003952.html"), - B("IWILL", "DK8-HTX", 1, "http://web.archive.org/web/20060507170150/http://www.iwill.net/product_2.asp?p_id=98", NULL), - B("Jetway", "J-7BXAN", 1, "http://www.jetway.com.tw/evisn/download/d7BXAS.htm", NULL), - B("Jetway", "J7F4K1G5D-PB", 1, "http://www.jetway.com.tw/jw/ipcboard_view.asp?productid=282&proname=J7F4K1G5D", NULL), - B("Kontron", "986LCD-M", 1, "http://de.kontron.com/products/boards+and+mezzanines/embedded+motherboards/miniitx+motherboards/986lcdmmitx.html", NULL), - B("Lanner", "EM-8510C", 1, NULL, NULL), - B("Lex", "CV700A", 1, "http://www.lex.com.tw/product/CV700A-spec.htm", NULL), - B("Mitac", "6513WU", 1, "http://web.archive.org/web/20050313054828/http://www.mitac.com/micweb/products/tyan/6513wu/6513wu.htm", NULL), - B("MSC", "Q7-TCTC", 1, "http://www.msc-ge.com/en/produkte/com/moduls/overview/5779-www.html", NULL), - B("MSI", "MS-6153", 1, "http://www.msi.com/product/mb/MS-6153.html", NULL), - B("MSI", "MS-6156", 1, "http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/boards/Motherboards/MicroStar/Ms6156/MS6156.htm", NULL), - B("MSI", "MS-6163 (MS-6163 Pro)",1, "http://www.msi.com/product/mb/MS-6163-Pro.html", NULL), - B("MSI", "MS-6178", 0, "http://www.msi.com/product/mb/MS-6178.html", "Immediately powers off if you try to hot-plug the chip. However, this does '''not''' happen if you use coreboot. Owned by Uwe Hermann ."), - B("MSI", "MS-6330 (K7T Turbo)", 1, "http://www.msi.com/product/mb/K7T-Turbo.html", NULL), - B("MSI", "MS-6391 (845 Pro4)", 1, "http://www.msi.com/product/mb/845-Pro4.html", NULL), - B("MSI", "MS-6561 (745 Ultra)", 1, "http://www.msi.com/product/mb/745-Ultra.html", NULL), - B("MSI", "MS-6566 (845 Ultra-C)",1, "http://www.msi.com/product/mb/845-Ultra-C.html", NULL), - B("MSI", "MS-6570 (K7N2)", 1, "http://www.msi.com/product/mb/K7N2.html", NULL), - B("MSI", "MS-6577 (Xenon)", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?product=90390&lc=en&cc=us&dlc=en&docname=bph07843", "This is an OEM board from HP, the HP name is Xenon."), - B("MSI", "MS-6590 (KT4 Ultra)", 1, "http://www.msi.com/product/mb/KT4-Ultra.html", NULL), - B("MSI", "MS-6702E (K8T Neo2-F)",1, "http://www.msi.com/product/mb/K8T-Neo2-F--FIR.html", NULL), - B("MSI", "MS-6712 (KT4V)", 1, "http://www.msi.com/product/mb/KT4V---KT4V-L--v1-0-.html", NULL), - B("MSI", "MS-6787 (P4MAM-V/P4MAM-L)", 1, "http://www.msi.com/service/search/?kw=6787&type=product", NULL), - B("MSI", "MS-7005 (651M-L)", 1, "http://www.msi.com/product/mb/651M-L.html", NULL), - B("MSI", "MS-7025 (K8N Neo2 Platinum)", 1, "http://www.msi.com/product/mb/K8N-Neo2-Platinum.html", NULL), - B("MSI", "MS-7046", 1, "http://www.heimir.de/ms7046/", NULL), - B("MSI", "MS-7061 (KM4M-V/KM4AM-V)", 1, "http://www.msi.com/service/search/?kw=7061&type=product", NULL), - B("MSI", "MS-7065", 1, "http://browse.geekbench.ca/geekbench2/view/53114", NULL), - B("MSI", "MS-7135 (K8N Neo3)", 1, "http://www.msi.com/product/mb/K8N-Neo3.html", NULL), - B("MSI", "MS-7142 (K8MM-V)", 1, "http://www.msi.com/product/mb/K8MM-V.html", NULL), - B("MSI", "MS-7168 (Orion)", 1, "http://support.packardbell.co.uk/uk/item/index.php?i=spec_orion&pi=platform_honeymoon_istart", NULL), - B("MSI", "MS-7207 (K8NGM2-L)", 1, "http://www.msi.com/product/mb/K8NGM2-FID--IL--L.html", NULL), - B("MSI", "MS-7211 (PM8M3-V)", 1, "http://www.msi.com/product/mb/PM8M3-V.html", NULL), - B("MSI", "MS-7236 (945PL Neo3)", 1, "http://www.msi.com/product/mb/945PL-Neo3.html", NULL), - B("MSI", "MS-7250 (K9N SLI (rev 2.1))", 1, "http://www.msi.com/product/mb/K9N--SLI.html", NULL), - B("MSI", "MS-7253 (K9VGM-V)", 1, "http://www.msi.com/product/mb/K9VGM-V.html", NULL), - B("MSI", "MS-7255 (P4M890M)", 1, "http://www.msi.com/product/mb/P4M890M-L-IL.html", NULL), - B("MSI", "MS-7260 (K9N Neo PCB 1.0)", 0, "http://www.msi.com/product/mb/K9N-Neo--PCB-1-0-.html", "Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot. Owned by Uwe Hermann ."), - B("MSI", "MS-7309 (K9N6PGM2-V2)", 1, "http://www.msi.com/product/mb/K9N6PGM2-V2.html", NULL), - B("MSI", "MS-7312 (K9MM-V)", 1, "http://www.msi.com/product/mb/K9MM-V.html", NULL), - B("MSI", "MS-7345 (P35 Neo2-FIR)", 1, "http://www.msi.com/product/mb/P35-Neo2-FR---FIR.html", NULL), - B("MSI", "MS-7368 (K9AG Neo2-Digital)", 1, "http://www.msi.com/product/mb/K9AG-Neo2-Digital.html", NULL), - B("MSI", "MS-7369 (K9N Neo V2)", 1, "http://www.msi.com/product/mb/K9N-Neo-V2.html", NULL), - B("MSI", "MS-7376 (K9A2 Platinum V1)", 1, "http://www.msi.com/product/mb/K9A2-Platinum.html", NULL), - B("MSI", "MS-7529 (G31M3-L(S) V2)", 1, "http://www.msi.com/product/mb/G31M3-L-V2---G31M3-LS-V2.html", NULL), - B("MSI", "MS-7529 (G31TM-P21)", 1, "http://www.msi.com/product/mb/G31TM-P21.html", NULL), - B("MSI", "MS-7548 (Aspen-GL8E)", 1, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c01635688&lc=en&cc=us&dlc=en", NULL), - B("MSI", "MS-7596 (785GM-E51)", 1, "http://www.msi.com/product/mb/785GM-E51.html", NULL), - B("MSI", "MS-7597 (GF615M-P33)", 0, NULL, "Missing board enable/SIO support (Fintek F71889), see http://www.flashrom.org/pipermail/flashrom/2012-March/008956.html"), - B("MSI", "MS-7599 (870-C45)", 1, "http://www.msi.com/product/mb/870-C45.html", NULL), - B("MSI", "MS-7613 (Iona-GL8E)", 0, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c02014355&lc=en&cc=dk&dlc=en&product=4348478", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("MSI", "MS-7635 (H55M-ED55)", 0, "http://www.msi.com/product/mb/H55M-ED55.html", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("MSI", "MS-7640 (890FXA-GD70)",1, "http://www.msi.com/product/mb/890FXA-GD70.html", NULL), - B("MSI", "MS-7642 (890GXM-G65)", 1, "http://www.msi.com/product/mb/890GXM-G65.html", NULL), - B("MSI", "MS-7676 (H67MA-ED55(B3))", 1, "http://www.msi.com/product/mb/H67MA-ED55--B3-.html", "Seems to work fine basically, but user reported (hopefully unrelated) buggy behavior of the board after a firmware upgrade. See http://www.flashrom.org/pipermail/flashrom/2012-January/008547.html"), - B("MSI", "MS-7676 (Z68MA-G45 (B3))", 1, "http://www.msi.com/product/mb/Z68MA-G45--B3-.html", NULL), - B("MSI", "MS-7696 (A75MA-G55)", 1, "http://www.msi.com/product/mb/A75MA-G55.html", NULL), - B("MSI", "MS-7698 (E350IA-E45)", 1, "http://www.msi.com/product/mb/E350IA-E45.html", NULL), - B("MSI", "MS-7740 (H61MA-E35(B3))", 1, "http://www.msi.com/product/mb/H61MA-E35--B3-.html", NULL), - B("NEC", "PowerMate 2000", 1, "http://support.necam.com/mobilesolutions/hardware/Desktops/pm2000/celeron/", NULL), - B("Nokia", "IP530", 1, NULL, NULL), - B("Palit", "N61S", 1, NULL, NULL), - B("PCCHIPS ", "M598LMR (V9.0)", 1, NULL, NULL), - B("PCCHIPS ", "M863G (V5.1A)", 1, "http://www.pcchips.com.tw/PCCWebSite/Products/ProductsDetail.aspx?CategoryID=1&DetailID=343&DetailName=Feature&MenuID=1&LanID=0", NULL), - B("PC Engines", "Alix.1c", 1, "http://pcengines.ch/alix1c.htm", NULL), - B("PC Engines", "Alix.2c2", 1, "http://pcengines.ch/alix2c2.htm", NULL), - B("PC Engines", "Alix.2c3", 1, "http://pcengines.ch/alix2c3.htm", NULL), - B("PC Engines", "Alix.2d3", 1, "http://pcengines.ch/alix2d3.htm", NULL), - B("PC Engines", "Alix.3c3", 1, "http://pcengines.ch/alix3c3.htm", NULL), - B("PC Engines", "Alix.3d3", 1, "http://pcengines.ch/alix3d3.htm", NULL), - B("PC Engines", "Alix.6f2", 1, "http://pcengines.ch/alix6f2.htm", NULL), - B("PC Engines", "WRAP.2E", 1, "http://pcengines.ch/wrap2e1.htm", NULL), - B("Portwell", "PEB-4700VLA", 1, "http://www.portwell.com/products/detail.asp?CUSTCHAR1=PEB-4700VLA", NULL), - B("RCA", "RM4100", 1, "http://www.settoplinux.org/index.php?title=RCA_RM4100", NULL), - B("Samsung", "Polaris 32", 1, NULL, NULL), - B("Shuttle", "AK31", 1, "http://www.motherboard.cz/mb/shuttle/AK31.htm", NULL), - B("Shuttle", "AK38N", 1, "http://eu.shuttle.com/en/desktopdefault.aspx/tabid-36/558_read-9889/", NULL), - B("Shuttle", "AV11V30", 1, NULL, NULL), - B("Shuttle", "AV18E2", 1, "http://www.shuttle.eu/_archive/older/de/av18.htm", NULL), - B("Shuttle", "FD37", 1, "http://www.shuttle.eu/products/discontinued/barebones/sd37p2/", NULL), - B("Shuttle", "FH67", 1, "http://www.shuttle.eu/products/mini-pc/sh67h3/specification/", NULL), - B("Shuttle", "FN25", 1, "http://www.shuttle.eu/products/discontinued/barebones/sn25p/?0=", NULL), - B("Shuttle", "X50/X50(B)", 1, "http://au.shuttle.com/product_detail_spec.jsp?PI=1241", NULL), - B("Soyo", "SY-5VD", 0, "http://www.soyo.com/content/Downloads/163/&c=80&p=464&l=English", "No public report found. Owned by Uwe Hermann . May work now."), - B("Soyo", "SY-6BA+ III", 1, "http://www.motherboard.cz/mb/soyo/SY-6BA+III.htm", NULL), - B("Soyo", "SY-7VCA", 1, "http://www.tomshardware.com/reviews/12-socket-370-motherboards,196-15.html", NULL), - B("Sun", "Blade x6250", 1, "http://www.sun.com/servers/blades/x6250/", NULL), - B("Sun", "Fire x4150", 0, "http://www.sun.com/servers/x64/x4150/", "No public report found. May work now."), - B("Sun", "Fire x4200", 0, "http://www.sun.com/servers/entry/x4200/", "No public report found. May work now."), - B("Sun", "Fire x4540", 0, "http://www.sun.com/servers/x64/x4540/", "No public report found. May work now."), - B("Sun", "Fire x4600", 0, "http://www.sun.com/servers/x64/x4600/", "No public report found. May work now."), - B("Sun", "Ultra 40 M2", 1, "http://download.oracle.com/docs/cd/E19127-01/ultra40.ws/820-0123-13/intro.html", NULL), - B("Supermicro", "H8QC8", 1, "http://www.supermicro.com/Aplus/motherboard/Opteron/nforce/H8QC8.cfm", NULL), - B("Supermicro", "X5DP8-G2", 1, "http://www.supermicro.com/products/motherboard/Xeon/E7501/X5DP8-G2.cfm", NULL), - B("Supermicro", "X7DBT-INF", 1, "http://www.supermicro.com/products/motherboard/Xeon1333/5000P/X7DBT-INF.cfm", NULL), - B("Supermicro", "X7SPA-HF", 1, "http://www.supermicro.com/products/motherboard/ATOM/ICH9/X7SPA.cfm?typ=H&IPMI=Y", NULL), - B("Supermicro", "X8DT3", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DT3.cfm", NULL), - B("Supermicro", "X8DTE-F", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DT6-F.cfm?IPMI=Y&SAS=N", NULL), - B("Supermicro", "X8DTH-6F", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTH-6F.cfm", NULL), - B("Supermicro", "X8DTT-F", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTT-F.cfm", NULL), - B("Supermicro", "X8DTT-HIBQF", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTT-H.cfm", NULL), - B("Supermicro", "X8DTU-6TF+", 0, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTU_.cfm?TYP=SAS&LAN=10", "Probing works (Atmel AT25DF321A, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("Supermicro", "X8DTU-F", 1, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTU-F.cfm", NULL), - B("Supermicro", "X8SIE(-F)", 0, "http://www.supermicro.com/products/motherboard/Xeon3000/3400/X8SIE.cfm?IPMI=N&TYP=LN2", "Requires unlocking the ME although the registers are set up correctly by the descriptor/BIOS already (tested with swseq and hwseq)."), - B("Supermicro", "X8STi", 1, "http://www.supermicro.com/products/motherboard/Xeon3000/X58/X8STi.cfm", NULL), - B("Supermicro", "X9DR3-F", 0, "http://www.supermicro.com/products/motherboard/xeon/c600/x9dr3-f.cfm", "Probing works (Numonyx N25Q128 (supported by SFDP only atm), 16384 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("Supermicro", "X9SCA-F", 0, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCA-F.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("Supermicro", "X9SCL", 0, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCL.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("T-Online", "S-100", 1, "http://wiki.freifunk-hannover.de/T-Online_S_100", NULL), - B("Tekram", "P6Pro-A5", 1, "http://www.motherboard.cz/mb/tekram/P6Pro-A5.htm", NULL), - B("Termtek", "TK-3370 (Rev:2.5B)", 1, NULL, NULL), - B("Thomson", "IP1000", 1, "http://www.settoplinux.org/index.php?title=Thomson_IP1000", NULL), - B("TriGem", "Anaheim-3", 1, "http://www.e4allupgraders.info/dir1/motherboards/socket370/anaheim3.shtml", NULL), - B("TriGem", "Lomita", 1, "http://www.e4allupgraders.info/dir1/motherboards/socket370/lomita.shtml", NULL), - B("Tyan", "S1846 (Tsunami ATX)", 1, "http://www.tyan.com/archive/products/html/tsunamiatx.html", NULL), - B("Tyan", "S2466 (Tiger MPX)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=461", NULL), - B("Tyan", "S2498 (Tomcat K7M)", 1, "http://www.tyan.com/archive/products/html/tomcatk7m.html", NULL), - B("Tyan", "S2723 (Tiger i7501)", 1, "http://www.tyan.com/archive/products/html/tigeri7501.html", NULL), - B("Tyan", "S2875 (Tiger K8W)", 1, "http://www.tyan.com/archive/products/html/tigerk8w.html", NULL), - B("Tyan", "S2881 (Thunder K8SR)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=115", NULL), - B("Tyan", "S2882-D (Thunder K8SD Pro)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=127", NULL), - B("Tyan", "S2882 (Thunder K8S Pro)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=121", NULL), - B("Tyan", "S2891 (Thunder K8SRE)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=144", NULL), - B("Tyan", "S2892 (Thunder K8SE)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=145", NULL), - B("Tyan", "S2895 (Thunder K8WE)", 1, "http://www.tyan.com/archive/products/html/thunderk8we.html", NULL), - B("Tyan", "S2912 (Thunder n3600R)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=157", NULL), - B("Tyan", "S2915-E (Thunder n6650W)", 1, "http://tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=541&SKU=600000041", NULL), - B("Tyan", "S2915 (Thunder n6650W)", 1, "http://tyan.com/product_board_detail.aspx?pid=163", NULL), - B("Tyan", "S2933 (Thunder n3600S)", 1, "http://tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=478&SKU=600000063", NULL), - B("Tyan", "S3095 (Tomcat i945GM)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=181", NULL), - B("Tyan", "S3992 (Thunder h2000M)", 1, "http://tyan.com/product_board_detail.aspx?pid=235", NULL), - B("Tyan", "S5180 (Toledo i965R)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=456", NULL), - B("Tyan", "S5191 (Toledo i3000R)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=343", NULL), - B("Tyan", "S5197 (Toledo i3010W)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=349", NULL), - B("Tyan", "S5211-1U (Toledo i3200R)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=593", NULL), - B("Tyan", "S5211 (Toledo i3210W)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=591", NULL), - B("Tyan", "S5220 (Toledo q35T)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=597", NULL), - B("Tyan", "S5375-1U (Tempest i5100X)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=610", NULL), - B("Tyan", "S5375 (Tempest i5100X)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=566", NULL), - B("Tyan", "S5376 (Tempest i5100W)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=605", "Both S5376G2NR and S5376WAG2NR should work."), - B("Tyan", "S5377 (Tempest i5100T)", 1, "http://www.tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=642&SKU=600000017", NULL), - B("Tyan", "S5382 (Tempest i5000PW)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=439", NULL), - B("Tyan", "S5397 (Tempest i5400PW)", 1, "http://www.tyan.com/product_board_detail.aspx?pid=560", NULL), - B("VIA", "EPIA M/MII/...", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=202", NULL), /* EPIA-MII link for now */ - B("VIA", "EPIA SP", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=261", NULL), - B("VIA", "EPIA-CN", 1, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=400", NULL), - B("VIA", "EPIA EK", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?motherboard_id=420", NULL), - B("VIA", "EPIA-EX15000G", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=450", NULL), - B("VIA", "EPIA-LN", 1, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=473", NULL), - B("VIA", "EPIA-M700", 1, "http://via.com.tw/servlet/downloadSvl?motherboard_id=670&download_file_id=3700", NULL), - B("VIA", "EPIA-N/NL", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=221", NULL), /* EPIA-N link for now */ - B("VIA", "EPIA-NX15000G", 1, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=470", NULL), - B("VIA", "NAB74X0", 1, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=590", NULL), - B("VIA", "pc2500e", 1, "http://www.via.com.tw/en/initiatives/empowered/pc2500_mainboard/index.jsp", NULL), - B("VIA", "PC3500G", 1, "http://www.via.com.tw/en/initiatives/empowered/pc3500_mainboard/index.jsp", NULL), - B("VIA", "VB700X", 1, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=490", NULL), - B("ZOTAC", "Fusion-ITX WiFi (FUSION350-A-E)", 1, NULL, NULL), - B("ZOTAC", "GeForce 8200", 1, NULL, NULL), - B("ZOTAC", "H67-ITX WiFi (H67ITX-C-E)", 0, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("ZOTAC", "nForce 630i Supreme (N73U-Supreme)", 1, NULL, NULL), - B("ZOTAC", "ZBOX AD02 (PLUS)", 1, NULL, NULL), - B("ZOTAC", "ZBOX HD-ID11", 1, NULL, NULL), + B("A-Trend", "ATC-6220", OK, "http://www.motherboard.cz/mb/atrend/atc6220.htm", NULL), + B("abit", "A-S78H", OK, NULL, NULL), + B("abit", "AN-M2", OK, NULL, NULL), + B("abit", "AV8", OK, NULL, NULL), + B("abit", "AX8", OK, NULL, NULL), + B("abit", "BM6", OK, NULL, NULL), + B("abit", "Fatal1ty F-I90HD", OK, NULL, NULL), + B("abit", "IC7", OK, NULL, NULL), + B("abit", "IP35", OK, NULL, NULL), + B("abit", "IP35 Pro", OK, NULL, NULL), + B("abit", "IS-10", BAD, NULL, "Reported by deejkuba at aol.com to flashrom at coreboot.org, no public archive. Missing board enable and/or M50FW040 unlocking. May work now."), + B("abit", "KN8 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), + B("abit", "VA6", OK, NULL, NULL), + B("abit", "VT6X4", OK, NULL, NULL), + B("Acorp", "6A815EPD", OK, "http://web.archive.org/web/20021206163652/www.acorp.com.tw/English/default.asp", NULL), + B("Advantech", "PCM-5820", OK, "http://www.emacinc.com/sbc_pc_compatible/pcm_5820.htm", NULL), + B("agami", "Aruma", OK, "http://web.archive.org/web/20080212111524/http://www.agami.com/site/ais-6000-series", NULL), + B("Albatron", "PM266A Pro", OK, "http://www.albatron.com.tw/English/Product/MB/pro_detail.asp?rlink=Overview&no=56", NULL), /* FIXME */ + B("AOpen", "i945GMx-VFX", OK, NULL, "This is (also?) an OEM board from FSC (used in e.g. ESPRIMO Q5010 with designation D2544-B1)."), + B("AOpen", "vKM400Am-S", OK, "http://usa.aopen.com/products_detail.aspx?Auno=824", NULL), + B("Artec Group","DBE61", OK, "http://wiki.thincan.org/DBE61", NULL), + B("Artec Group","DBE62", OK, "http://wiki.thincan.org/DBE62", NULL), + B("ASI", "MB-5BLMP", OK, "http://www.hojerteknik.com/winnet.htm", "Used in the IGEL WinNET III thin client."), + B("ASRock", "775i65G", OK, "http://www.asrock.com/mb/overview.asp?Model=775i65G", NULL), + B("ASRock", "880G Pro3", OK, "http://www.asrock.com/mb/overview.asp?Model=880G%20Pro3", NULL), + B("ASRock", "890GX Extreme3", OK, "http://www.asrock.com/mb/overview.asp?Model=890GX%20Extreme3", NULL), + B("ASRock", "939A785GMH/128M", OK, "http://www.asrock.com/mb/overview.asp?Model=939A785GMH/128M", NULL), + B("ASRock", "A330GC", OK, "http://www.asrock.com/mb/overview.asp?Model=A330GC", NULL), + B("ASRock", "A770CrossFire", OK, "http://www.asrock.com/mb/overview.asp?Model=A770CrossFire", NULL), + B("ASRock", "A780FullHD", OK, "http://www.asrock.com/mb/overview.asp?Model=A780FullHD", "While flashrom is working correctly, there might be problems with the firmware images themselves. Please see http://www.flashrom.org/pipermail/flashrom/2012-July/009600.html for details."), + B("ASRock", "ALiveNF6G-DVI", OK, "http://www.asrock.com/mb/overview.asp?Model=ALiveNF6G-DVI", NULL), + B("ASRock", "AM2NF6G-VSTA", OK, "http://www.asrock.com/mb/overview.asp?Model=AM2NF6G-VSTA", NULL), + B("ASRock", "ConRoeXFire-eSATA2", OK, "http://www.asrock.com/mb/overview.asp?model=conroexfire-esata2", NULL), + B("ASRock", "H61M-ITX", BAD, "http://www.asrock.com/mb/overview.asp?Model=H61M-ITX", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASRock", "H67M", BAD, "http://www.asrock.com/mb/overview.asp?Model=H67M", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASRock", "K7S41", OK, "http://www.asrock.com/mb/overview.asp?Model=K7S41", NULL), + B("ASRock", "K7S41GX", OK, "http://www.asrock.com/mb/overview.asp?Model=K7S41GX", NULL), + B("ASRock", "K7VT4A+", BAD, "http://www.asrock.com/mb/overview.asp?Model=K7VT4A%2b", "No chip found, probably due to flash translation. http://www.flashrom.org/pipermail/flashrom/2009-August/000393.html"), + B("ASRock", "K8S8X", OK, "http://www.asrock.com/mb/overview.asp?Model=K8S8X", NULL), + B("ASRock", "M3A790GXH/128M", OK, "http://www.asrock.com/mb/overview.asp?Model=M3A790GXH/128M", NULL), + B("ASRock", "N61P-S", OK, "http://www.asrock.com/mb/overview.asp?Model=N61P-S", NULL), + B("ASRock", "P4i65GV", OK, "http://www.asrock.com/mb/overview.asp?Model=P4i65GV", NULL), + B("ASUS", "A7N8X Deluxe", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8X_Deluxe/", NULL), + B("ASUS", "A7N8X-E Deluxe", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8XE_Deluxe/", NULL), + B("ASUS", "A7N8X-VM/400", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7N8XVM400/", NULL), + B("ASUS", "A7V133", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socka/kt133a/a7v133/", NULL), + B("ASUS", "A7V333", OK, "ftp://ftp.asus.com.tw/pub/asus/mb/socka/kt333/a7v333/", NULL), + B("ASUS", "A7V400-MX", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V400MX/", NULL), + B("ASUS", "A7V600-X", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V600X/", NULL), + B("ASUS", "A7V8X", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8X/", NULL), + B("ASUS", "A7V8X-MX", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XMX/", NULL), + B("ASUS", "A7V8X-MX SE", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XMX_SE/", NULL), + B("ASUS", "A7V8X-X", OK, "http://www.asus.com/Motherboards/AMD_Socket_A/A7V8XX/", NULL), + B("ASUS", "A8M2N-LA (NodusM3-GL8E)", OK, "http://h10010.www1.hp.com/ewfrf/wc/document?docname=c00757531&cc=us&dlc=en&lc=en", "This is an OEM board from HP, the HP name is NodusM3-GL8E."), + B("ASUS", "A8N-E", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NE/", NULL), + B("ASUS", "A8N-LA (Nagami-GL8E)", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?lc=en&cc=us&docname=c00647121&dlc=en", "This is an OEM board from HP, the HP name is Nagami-GL8E."), + B("ASUS", "A8N-SLI", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NSLI/", NULL), + B("ASUS", "A8N-SLI Deluxe", NT, NULL, "Untested board enable."), + B("ASUS", "A8N-SLI Premium", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NSLI_Premium/", NULL), + B("ASUS", "A8N-VM", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NVM/", NULL), + B("ASUS", "A8N-VM CSM", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8NVM_CSM/", NULL), + B("ASUS", "A8NE-FM/S", OK, "http://www.hardwareschotte.de/hardware/preise/proid_1266090/preis_ASUS+A8NE-FM", NULL), + B("ASUS", "A8V Deluxe", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8V_Deluxe/", NULL), + B("ASUS", "A8V-E Deluxe", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8VE_Deluxe/", NULL), + B("ASUS", "A8V-E SE", OK, "http://www.asus.com/Motherboards/AMD_Socket_939/A8VE_SE/", "See http://www.coreboot.org/pipermail/coreboot/2007-October/026496.html"), + B("ASUS", "Crosshair II Formula", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/Crosshair_II_Formula/", NULL), + B("ASUS", "Crosshair IV Extreme", OK, "http://www.asus.com/Motherboards/AMD_AM3/Crosshair_IV_Extreme/", NULL), + B("ASUS", "E35M1-I DELUXE", OK, "http://www.asus.com/Motherboards/AMD_CPU_on_Board/E35M1I_DELUXE/", NULL), + B("ASUS", "K8N", OK, "http://www.asus.com/Motherboards/AMD_Socket_754/K8N/", NULL), + B("ASUS", "K8V", OK, "http://www.asus.com/Motherboards/AMD_Socket_754/K8V/", NULL), + B("ASUS", "K8V SE Deluxe", OK, "http://www.asus.com/Motherboards/AMD_Socket_754/K8V_SE_Deluxe/", NULL), + B("ASUS", "K8V-X", OK, "http://www.asus.com/Motherboards/AMD_Socket_754/K8VX/", NULL), + B("ASUS", "K8V-X SE", OK, "http://www.asus.com/Motherboards/AMD_Socket_754/K8VX_SE/", NULL), + B("ASUS", "KFSN4-DRE/SAS", OK, "http://www.asus.com/Server_Workstation/Server_Motherboards/KFSN4DRESAS/", NULL), + B("ASUS", "M2A-MX", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2AMX/", NULL), + B("ASUS", "M2A-VM (HDMI)", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2AVM/", NULL), + B("ASUS", "M2N32-SLI Deluxe", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2N32SLI_DeluxeWireless_Edition/", NULL), + B("ASUS", "M2N68-VM", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M2N68VM/", NULL), + B("ASUS", "M2N-E", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2NE/", "If the machine doesn't come up again after flashing, try resetting the NVRAM(CMOS). The MAC address of the onboard network card will change to the value stored in the new image, so backup the old address first. See http://www.flashrom.org/pipermail/flashrom/2009-November/000879.html"), + B("ASUS", "M2N-E SLI", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2NE_SLI/", NULL), + B("ASUS", "M2N-SLI Deluxe", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2NSLI_Deluxe/", NULL), + B("ASUS", "M2NBP-VM CSM", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2NBPVM_CSM/", NULL), + B("ASUS", "M2NPV-VM", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2NPVVM/", NULL), + B("ASUS", "M2V", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2V/", NULL), + B("ASUS", "M2V-MX", OK, "http://www.asus.com/Motherboards/AMD_AM2/M2VMX/", NULL), + B("ASUS", "M3A", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A/", NULL), + B("ASUS", "M3A76-CM", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A76CM/", NULL), + B("ASUS", "M3A78-EM", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3A78EM/", NULL), + B("ASUS", "M3N78 PRO", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78_PRO/", NULL), + B("ASUS", "M3N78-VM", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M3N78VM/", NULL), + B("ASUS", "M4A78-EM", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4A78EM/", NULL), + B("ASUS", "M4A785T-M", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TM/", NULL), + B("ASUS", "M4A785TD-M EVO", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TDM_EVO/", NULL), + B("ASUS", "M4A785TD-V EVO", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A785TDV_EVO/", NULL), + B("ASUS", "M4A78LT-M LE", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A78LTM_LE/", NULL), + B("ASUS", "M4A79T Deluxe", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A79T_Deluxe/", NULL), + B("ASUS", "M4A87TD/USB3", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A87TDUSB3/", NULL), + B("ASUS", "M4A89GTD PRO", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4A89GTD_PRO/", NULL), + B("ASUS", "M4N68T V2", OK, "http://www.asus.com/Motherboards/AMD_AM3/M4N68T_V2/", NULL), + B("ASUS", "M4N78 PRO", OK, "http://www.asus.com/Motherboards/AMD_AM2Plus/M4N78_PRO/", NULL), + B("ASUS", "M5A78L-M LX", OK, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A78LM_LX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see http://www.flashrom.org/pipermail/flashrom/2012-May/009200.html"), + B("ASUS", "M5A99X EVO", OK, "http://www.asus.com/Motherboards/AMD_AM3Plus/M5A99X_EVO/", NULL), + B("ASUS", "Maximus IV Extreme", BAD, "http://www.asus.com/Motherboards/Intel_Socket_1155/Maximus_IV_Extreme/", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "MEW-AM", BAD, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/", "No public report found. Owned by Uwe Hermann . May work now."), + B("ASUS", "MEW-VM", BAD, "http://www.elhvb.com/mboards/OEM/HP/manual/ASUS%20MEW-VM.htm", "No public report found. Owned by Uwe Hermann . May work now."), + B("ASUS", "OPLX-M", NT, NULL, "Untested board enable."), + B("ASUS", "P2B", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b/", NULL), + B("ASUS", "P2B-D", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/", NULL), + B("ASUS", "P2B-DS", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-ds/", NULL), + B("ASUS", "P2B-F", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/", NULL), + B("ASUS", "P2B-N", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-n/", NULL), + B("ASUS", "P2E-M", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440ex/p2e-m/", NULL), + B("ASUS", "P2L97-S", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440lx/p2l97-s/", NULL), + B("ASUS", "P3B-F", BAD, "ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p3b-f/", "No public report found. Owned by Uwe Hermann . May work now."), + B("ASUS", "P4B266", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4b266/", NULL), + B("ASUS", "P4B266-LM", OK, "http://esupport.sony.com/US/perl/swu-list.pl?mdl=PCVRX650", NULL), + B("ASUS", "P4B533-E", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4b533-e/", NULL), + B("ASUS", "P4C800-E Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_478/P4C800E_Deluxe/", NULL), + B("ASUS", "P4GV-LA (Guppy)", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00363478", NULL), + B("ASUS", "P4P800", OK, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800/", NULL), + B("ASUS", "P4P800-E Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800E_Deluxe/", NULL), + B("ASUS", "P4P800-VM", OK, "http://www.asus.com/Motherboards/Intel_Socket_478/P4P800VM/", NULL), + B("ASUS", "P4S533-X", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4s533-x/", NULL), + B("ASUS", "P4S800-MX", OK, "http://www.asus.com/Motherboards/Intel_Socket_478/P4S800MX/", NULL), + B("ASUS", "P4SC-E", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock478/p4sc-e/", "Part of ASUS Terminator P4 533 barebone system"), + B("ASUS", "P4SD-LA", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00022505", NULL), + B("ASUS", "P5A", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/sock7/ali/p5a/", NULL), + B("ASUS", "P5B", OK, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B/", NULL), + B("ASUS", "P5B-Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5B_Deluxe/", NULL), + B("ASUS", "P5BV-M", BAD, "ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-VM/", "Reported by Bernhard M. Wiedemann to flashrom at coreboot.org, no public archive. Missing board enable and/or SST49LF008A unlocking. May work now."), + B("ASUS", "P5BV-R", OK, "http://www.asus.com/Server_Workstation/Servers/RS120E5PA2/", "Used in RS120-E5/PA2 servers."), + B("ASUS", "P5GC-MX/1333", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GCMX1333/", NULL), + B("ASUS", "P5GD1 Pro", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD1_PRO/", NULL), + B("ASUS", "P5GD1-VM/S", OK, NULL, "This is an OEM board from FSC. Although flashrom supports it and can probably not distinguish it from the P5GD1-VM, please note that the P5GD1-VM BIOS does not support the FSC variants completely."), + B("ASUS", "P5GD1(-VM)", NT, NULL, "Untested board enable."), + B("ASUS", "P5GD2 Premium", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2_Premium/", NULL), + B("ASUS", "P5GD2-X", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GD2X/", NULL), + B("ASUS", "P5GDC Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDC_Deluxe/", NULL), + B("ASUS", "P5GDC-V Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5GDCV_Deluxe/", NULL), + B("ASUS", "P5GD2/C variants", NT, NULL, "Untested board enable."), + B("ASUS", "P5K-V", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KV/", NULL), + B("ASUS", "P5K-VM", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KVM/", NULL), + B("ASUS", "P5KC", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KC/", NULL), + B("ASUS", "P5KPL-CM", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5KPLCM/", NULL), + B("ASUS", "P5L-MX", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5LMX/", NULL), + B("ASUS", "P5L-VM 1394", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5LVM_1394/", NULL), + B("ASUS", "P5LD2", NT, NULL, "Untested board enable."), + B("ASUS", "P5LP-LE (Lithium-UL8E)", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00379616&tmp_task=prodinfoCategory&cc=us&dlc=en&lc=en&product=1159887", "This is an OEM board from HP."), + B("ASUS", "P5LP-LE (Epson OEM)", OK, NULL, "This is an OEM board from Epson (e.g. Endeavor MT7700)."), + B("ASUS", "P5LP-LE", NT, NULL, "This designation is used for OEM boards from HP, Epson and maybe others. The HP names vary and not all of them have been tested yet. Please report any success or failure, thanks."), + B("ASUS", "P5N-E SLI", NT, "http://www.asus.com/Motherboards/Intel_Socket_775/P5NE_SLI/", "Untested board enable"), + B("ASUS", "P5N-D", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5ND/", NULL), + B("ASUS", "P5N-E SLI", NT, "http://www.asus.com/Motherboards/Intel_Socket_775/P5NE_SLI/", "Untested board enable."), + B("ASUS", "P5N32-E SLI", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5N32E_SLI/", NULL), + B("ASUS", "P5N7A-VM", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5N7AVM/", NULL), + B("ASUS", "P5ND2-SLI Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5ND2SLI_Deluxe/", NULL), + B("ASUS", "P5PE-VM", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5PEVM/", NULL), + B("ASUS", "P5QPL-AM", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5QPLAM/", NULL), + B("ASUS", "P5VD1-X", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5VD1X/", NULL), + B("ASUS", "P5VD2-MX", OK, "http://www.asus.com/Motherboards/Intel_Socket_775/P5VD2MX/", "The MAC address of the onboard LAN NIC is stored in flash, hence overwritten by flashrom; see http://www.flashrom.org/pipermail/flashrom/2012-March/009014.html"), + B("ASUS", "P6T SE", OK, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_SE/", NULL), + B("ASUS", "P6T Deluxe", OK, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe/", NULL), + B("ASUS", "P6T Deluxe V2", OK, "http://www.asus.com/Motherboards/Intel_Socket_1366/P6T_Deluxe_V2/", NULL), + B("ASUS", "P7H57D-V EVO", OK, "http://www.asus.com/Motherboards/Intel_Socket_1156/P7H57DV_EVO/", NULL), + B("ASUS", "P7H55-M LX", BAD, NULL, "flashrom works correctly, but GbE LAN is nonworking (probably due to a missing/bogus MAC address; see http://www.flashrom.org/pipermail/flashrom/2011-July/007432.html and http://ubuntuforums.org/showthread.php?t=1534389 for a possible workaround)"), + B("ASUS", "P8B-E/4L", BAD, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8B WS", BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8H61 PRO", BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8H61-M LE/USB3", BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8H67-M PRO", BAD, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8P67 (rev. 3.1)", BAD, NULL, "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8P67 LE", BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8P67 PRO (rev. 3.0)", OK, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8P67_PRO/", NULL), + B("ASUS", "P8Z68-V", OK, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), + B("ASUS", "P8Z68-V PRO", BAD, NULL, "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ASUS", "P8Z68-V PRO/GEN3", OK, "http://www.asus.com/Motherboards/Intel_Socket_1155/P8Z68V_PROGEN3/", "Warning: MAC address of LOM is stored at 0x1000 - 0x1005 of the image."), + B("ASUS", "SABERTOOTH 990FX", OK, "http://www.asus.com/Motherboards/AMD_AM3Plus/SABERTOOTH_990FX/", NULL), + B("ASUS", "TUSL2-C", NT, "http://support.asus.com/download.aspx?SLanguage=en&p=1&s=4&m=TUSL2-C&os=&hashedid=n/a", "Untested board enable."), + B("ASUS", "Z8NA-D6C", OK, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8NAD6C/", NULL), + B("ASUS", "Z8PE-D12", OK, "http://www.asus.com/Server_Workstation/Server_Motherboards/Z8PED12/", NULL), + B("Bachmann", "OT200", OK, "http://www.bachmann.info/produkte/bedien-und-beobachtungsgeraete/operator-terminals/", NULL), + B("BCOM", "WinNET100", OK, "http://www.coreboot.org/BCOM_WINNET100", "Used in the IGEL-316 thin client."), + B("Bifferos", "Bifferboard", OK, "http://bifferos.co.uk/", NULL), + B("Biostar", "H61MU3", BAD, NULL, "Probing works (Eon EN25Q32(A/B), 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Biostar", "M6TBA", BAD, "ftp://ftp.biostar-usa.com/manuals/M6TBA/", "No public report found. Owned by Uwe Hermann . May work now."), + B("Biostar", "M7NCD Pro", OK, "http://www.biostar.com.tw/app/en/mb/content.php?S_ID=260", NULL), + B("Biostar", "M7VIQ", BAD, NULL, "Missing board enable (W83697HF/F/HG/G), see http://www.flashrom.org/pipermail/flashrom/2012-February/008863.html"), + B("Biostar", "N61PB-M2S", OK, NULL, NULL), + B("Biostar", "N68S3+", OK, NULL, NULL), + B("Biostar", "P4M80-M4", OK, "http://www.biostar-usa.com/mbdetails.asp?model=p4m80-m4", NULL), + B("Biostar", "TA780G M2+", OK, "http://www.biostar.com.tw/app/en/t-series/content.php?S_ID=344", NULL), + B("Boser", "HS-6637", BAD, "http://www.boser.com.tw/manual/HS-62376637v3.4.pdf", "Reported by Mark Robinson to flashrom at coreboot.org, no public archive. Missing board enable and/or F29C51002T unlocking. May work now."), + B("Congatec", "conga-X852", OK, "http://www.congatec.com/single_news+M57715f6263d.html?&L=1", NULL), + B("Dell", "Inspiron 580", BAD, "http://support.dell.com/support/edocs/systems/insp580/en/index.htm", "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("Dell", "OptiPlex GX1", OK, "http://support.dell.com/support/edocs/systems/ban_gx1/en/index.htm", NULL), + B("Dell", "PowerEdge 1850", OK, "http://support.dell.com/support/edocs/systems/pe1850/en/index.htm", NULL), + B("Dell", "Vostro 460", BAD, "http://support.dell.com/support/edocs/systems/vos460/en/index.htm", "Mainboard model is 0Y2MRG. Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), + B("DFI", "855GME-MGF", BAD, "http://www.dfi.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?action=e&downloadType=&windowstate=normal&mode=view&downloadFlag=false&itemId=433", "Probably needs a board enable. http://www.coreboot.org/pipermail/coreboot/2009-May/048549.html"), + B("DFI", "Blood-Iron P35 T2RL", OK, "http://lp.lanparty.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?itemId=516&downloadFlag=false&action=1", NULL), + B("Elitegroup", "GeForce6100SM-M ", OK, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=685&MenuID=24", NULL), + B("Elitegroup", "GF7100PVT-M3 (V1.0)", OK, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=853&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), + B("Elitegroup", "GF8200A", OK, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=873&CategoryID=1&MenuID=20&LanID=0", NULL), + B("Elitegroup", "K7S5A", OK, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=279&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL), + B("Elitegroup", "K7S6A", OK, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=77&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL), + B("Elitegroup", "K7SEM (V1.0A)", OK, "http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?DetailID=229&CategoryID=1&DetailName=Specification&MenuID=24&LanID=0", NULL), + B("Elitegroup", "K7VTA3", OK, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=264&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL), + B("Elitegroup", "P4M800PRO-M (V1.0A, V2.0)", OK, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&DetailID=574&DetailName=Feature&MenuID=52&LanID=0", NULL), + B("Elitegroup", "P4VXMS (V1.0A)", OK, NULL, NULL), + B("Elitegroup", "P6IWP-Fe", OK, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&TypeID=3&DetailID=95&DetailName=Feature&MenuID=1&LanID=0", NULL), + B("Elitegroup", "P6VAP-A+", OK, "http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=117&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL), + B("Elitegroup", "RS485M-M", OK, "http://www.ecs.com.tw/ECSWebSite_2007/Products/ProductsDetail.aspx?CategoryID=1&DetailID=654&DetailName=Feature&MenuID=1&LanID=0", NULL), + B("Emerson", "ATCA-7360", OK, "http://www.emerson.com/sites/Network_Power/en-US/Products/Product_Detail/Product1/Pages/EmbCompATCA-7360.aspx", NULL), + B("EPoX", "EP-3PTA", BAD, NULL, "Missing board enable (W83627HF/F/HG/G), see http://www.flashrom.org/pipermail/flashrom/2012-April/009043.html"), + B("EPoX", "EP-8K5A2", OK, "http://www.epox.com/product.asp?ID=EP-8K5A2", NULL), + B("EPoX", "EP-8NPA7I", OK, "http://www.epox.com/product.asp?ID=EP-8NPA7I", NULL), + B("EPoX", "EP-8RDA3+", OK, "http://www.epox.com/product.asp?ID=EP-8RDA3plus", NULL), + B("EPoX", "EP-9NPA7I", OK, "http://www.epox.com/product.asp?ID=EP-9NPA7I", NULL), + B("EPoX", "EP-BX3", OK, "http://www.epox.com/product.asp?ID=EP-BX3", NULL), + B("EVGA", "132-CK-NF78", OK, "http://www.evga.com/articles/385.asp", NULL), + B("EVGA", "270-WS-W555-A2 (Classified SR-2)", OK, "http://www.evga.com/products/moreInfo.asp?pn=270-WS-W555-A2", NULL), + B("FIC", "VA-502", BAD, "ftp://ftp.fic.com.tw/motherboard/manual/socket7/va-502/", "No public report found. Owned by Uwe Hermann . Seems the PCI subsystem IDs are identical with the Tekram P6Pro-A5. May work now."), + B("Foxconn", "6150K8MD-8EKRSH", OK, "http://www.foxconnchannel.com/product/motherboards/detail_overview.aspx?id=en-us0000157", NULL), + B("Foxconn", "A6VMX", OK, "http://www.foxconnchannel.com/product/motherboards/detail_overview.aspx?id=en-us0000346", NULL), + B("Foxconn", "P4M800P7MA-RS2", OK, "http://www.foxconnchannel.com/Product/Motherboards/detail_overview.aspx?id=en-us0000138", NULL), + B("Freetech", "P6F91i", OK, "http://web.archive.org/web/20010417035034/http://www.freetech.com/prod/P6F91i.html", NULL), + 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("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("GIGABYTE", "GA-2761GXDK", OK, "http://www.computerbase.de/news/hardware/mainboards/amd-systeme/2007/mai/gigabyte_dtx-mainboard/", NULL), + B("GIGABYTE", "GA-6BXC", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1445", NULL), + B("GIGABYTE", "GA-6BXDU", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1429", NULL), + B("GIGABYTE", "GA-6IEM", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1379", NULL), + B("GIGABYTE", "GA-6VXE7+", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2410", NULL), + B("GIGABYTE", "GA-6ZMA", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1541", NULL), + B("GIGABYTE", "GA-MA785GMT-UD2H (rev. 1.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3156", NULL), + B("GIGABYTE", "GA-770TA-UD3", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3272", NULL), + B("GIGABYTE", "GA-7DXR", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1302", NULL), + B("GIGABYTE", "GA-7VT600", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1666", NULL), + B("GIGABYTE", "GA-7ZM", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1366", "Works fine if you remove jumper JP9 on the board and disable the flash protection BIOS option."), + B("GIGABYTE", "GA-880GMA-USB3 (rev. 3.1)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3817", NULL), + B("GIGABYTE", "GA-8I945GZME-RH", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2304", NULL), + B("GIGABYTE", "GA-8IP775", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1830", NULL), + B("GIGABYTE", "GA-8IRML", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1343", NULL), + B("GIGABYTE", "GA-8PE667 Ultra 2", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1607", NULL), + B("GIGABYTE", "GA-8SIMLH", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1399", NULL), + B("GIGABYTE", "GA-945PL-S3P (rev. 6.6)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2541", NULL), + B("GIGABYTE", "GA-965GM-S2 (rev. 2.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2617", NULL), + B("GIGABYTE", "GA-965P-DS4", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2288", NULL), + B("GIGABYTE", "GA-EP31-DS3L (rev. 2.1)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2964", NULL), + B("GIGABYTE", "GA-EP35-DS3L", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2778", NULL), + B("GIGABYTE", "GA-H61M-D2-B3", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3773", NULL), + B("GIGABYTE", "GA-H61M-D2H-USB3", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=4004", NULL), + B("GIGABYTE", "GA-EX58-UD4P", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2986", NULL), + B("GIGABYTE", "GA-K8N-SLI", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1928", NULL), + B("GIGABYTE", "GA-K8N51GMF", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1950", NULL), + B("GIGABYTE", "GA-K8N51GMF-9", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=1939", NULL), + B("GIGABYTE", "GA-K8NS Pro-939", NT, "http://www.gigabyte.com/products/product-page.aspx?pid=1875", "Untested board enable."), + B("GIGABYTE", "GA-M57SLI-S4", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2287", NULL), + B("GIGABYTE", "GA-M61P-S3", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2434", NULL), + B("GIGABYTE", "GA-M720-US3", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3006", NULL), + B("GIGABYTE", "GA-MA69VM-S2", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2500", NULL), + B("GIGABYTE", "GA-MA74GM-S2H (rev. 3.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3152", NULL), + B("GIGABYTE", "GA-MA770-UD3 (rev. 2.1)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3302", NULL), + B("GIGABYTE", "GA-MA770T-UD3P", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3096", NULL), + B("GIGABYTE", "GA-MA780G-UD3H", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3004", NULL), + B("GIGABYTE", "GA-MA78G-DS3H (rev. 1.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2800", NULL), + B("GIGABYTE", "GA-MA78GM-S2H", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2758", NULL), /* TODO: Rev. 1.BAD, 1.OK, or 2.x? */ + B("GIGABYTE", "GA-MA78GPM-DS2H", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2859", NULL), + B("GIGABYTE", "GA-MA790FX-DQ6", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2690", NULL), + B("GIGABYTE", "GA-MA790GP-DS4H", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=2887", NULL), + B("GIGABYTE", "GA-MA790XT-UD4P (rev. 1.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3010", NULL), + B("GIGABYTE", "GA-P55A-UD4 (rev. 1.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3436", NULL), + B("GIGABYTE", "GA-P67A-UD3P", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3649", NULL), + B("GIGABYTE", "GA-X58A-UD7 (rev. 2.0)", OK, NULL, NULL), + B("GIGABYTE", "GA-X58A-UDR3 (rev. 2.0)", OK, NULL, NULL), + B("GIGABYTE", "GA-Z68MX-UD2H-B (rev. 1.3)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3854", NULL), + B("GIGABYTE", "GA-Z68XP-UD3 (rev. 1.0)", OK, "http://www.gigabyte.com/products/product-page.aspx?pid=3892", NULL), + B("HP", "8100 Elite CMT PC (304Bh)", BAD, NULL, "SPI lock down, PR, read-only descriptor, locked ME region."), + B("HP", "e-Vectra P2706T", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=77515&prodTypeId=12454", NULL), + B("HP", "ProLiant DL145 G3", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00816835&lang=en&cc=us&taskId=101&prodSeriesId=3219755&prodTypeId=15351", NULL), + B("HP", "ProLiant DL165 G6", OK, "http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/15351-15351-3328412-241644-3328421-3955644.html", NULL), + B("HP", "ProLiant N40L", OK, NULL, NULL), + B("HP", "Puffer2-UL8E", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00300023", NULL), + B("HP", "dc7800", BAD, "http://h10010.www1.hp.com/wwpc/us/en/sm/WF06a/12454-12454-64287-321860-3328898-3459241.html?dnr=1", "ICH9DO with SPI lock down, BIOS lock, PR, read-only descriptor, locked ME region."), + B("HP", "Vectra VL400", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00060658&lang=en&cc=us", NULL), + B("HP", "Vectra VL420 SFF", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00060661&lang=en&cc=us", NULL), + B("HP", "xw4400 (0A68h)", BAD, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00775230", "ICH7 with SPI lock down, BIOS lock, flash block detection (SST25VF080B); see http://paste.flashrom.org/view.php?id=686"), + B("HP", "xw6400", BAD, NULL, "No chip found, see http://www.flashrom.org/pipermail/flashrom/2012-March/009006.html"), + B("HP", "xw9300", BAD, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodTypeId=12454&prodSeriesId=459226", "Missing board enable, see http://www.flashrom.org/pipermail/flashrom/2012-February/008862.html"), + B("HP", "xw9400", OK, "http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=en&cc=us&prodSeriesId=3211286&prodTypeId=12454", "Boot block is write protected unless the solder points next to F2 are shorted."), + B("HP", "Z400 Workstation (0AE4h)", BAD, NULL, "ICH10R with BIOS lock enable and a protected range PRBAD, see http://www.flashrom.org/pipermail/flashrom/2012-June/009350.html"), + B("IBASE", "MB899", OK, "http://www.ibase-i.com.tw/2009/mb899.html", NULL), + B("IBM", "x3455", OK, "http://www-03.ibm.com/systems/x/hardware/rack/x3455/index.html", NULL), + B("IEI", "PICOe-9452", OK, "http://www.ieiworld.com/product_groups/industrial/content.aspx?keyword=WSB&gid=00001000010000000001&cid=08125380291060861658&id=08142308605814597144", NULL), + B("Intel", "D201GLY", OK, "http://www.intel.com/support/motherboards/desktop/d201gly/index.htm", NULL), + B("Intel", "D425KT", BAD, "http://www.intel.com/content/www/us/en/motherboards/desktop-motherboards/desktop-board-d425kt.html", "NM10 with SPI lock down, BIOS lock, see http://www.flashrom.org/pipermail/flashrom/2012-January/008600.html"), + B("Intel", "D865GLC", BAD, NULL, "ICH5 with BIOS lock enable, see http://paste.flashrom.org/view.php?id=775"), + B("Intel", "DG45ID", BAD, "http://www.intel.com/products/desktop/motherboards/dg45id/dg45id-overview.htm", "Probing works (Winbond W25x32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked."), + B("Intel", "DQ965GF", BAD, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF016B, 2048 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), + B("Intel", "DG965OT", BAD, NULL, "Probing enables Hardware Sequencing (behind that hides a SST SST25VF080B, 1024 kB). Parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME is locked (and the platform data region seems to be bogus)."), + B("Intel", "DH61AG ", BAD, NULL, "H61 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2012-June/009417.html"), + B("Intel", "DH67CF", BAD, NULL, "H67 with BIOS lock enable and locked ME region, see http://www.flashrom.org/pipermail/flashrom/2011-September/007789.html"), + B("Intel", "DN2800MT (Marshalltown)", BAD, NULL, "BIOS locked via BIOS_CNTL."), + B("Intel", "EP80759", OK, NULL, NULL), + B("Intel", "Foxhollow", OK, NULL, "Intel reference board."), + B("Intel", "Greencity", OK, NULL, "Intel reference board."), + B("Intel", "SE440BX-2", BAD, "http://downloadcenter.intel.com/SearchResult.aspx?lang=eng&ProductFamily=Desktop+Boards&ProductLine=Discontinued+Motherboards&ProductProduct=Intel%C2%AE+SE440BX-2+Motherboard", "Probably won't work, see http://www.coreboot.org/pipermail/flashrom/2010-July/003952.html"), + B("IWILL", "DK8-HTX", OK, "http://web.archive.org/web/20060507170150/http://www.iwill.net/product_2.asp?p_id=98", NULL), + B("Jetway", "J-7BXAN", OK, "http://www.jetway.com.tw/evisn/download/d7BXAS.htm", NULL), + B("Jetway", "J7F4K1G5D-PB", OK, "http://www.jetway.com.tw/jw/ipcboard_view.asp?productid=282&proname=J7F4K1G5D", NULL), + B("Kontron", "986LCD-M", OK, "http://de.kontron.com/products/boards+and+mezzanines/embedded+motherboards/miniitx+motherboards/986lcdmmitx.html", NULL), + B("Lanner", "EM-8510C", OK, NULL, NULL), + B("Lex", "CV700A", OK, "http://www.lex.com.tw/product/CV700A-spec.htm", NULL), + B("Mitac", "6513WU", OK, "http://web.archive.org/web/20050313054828/http://www.mitac.com/micweb/products/tyan/6513wu/6513wu.htm", NULL), + B("MSC", "Q7-TCTC", OK, "http://www.msc-ge.com/en/produkte/com/moduls/overview/5779-www.html", NULL), + B("MSI", "MS-6153", OK, "http://www.msi.com/product/mb/MS-6153.html", NULL), + B("MSI", "MS-6156", OK, "http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/boards/Motherboards/MicroStar/Ms6156/MS6156.htm", NULL), + B("MSI", "MS-6163 (MS-6163 Pro)",OK, "http://www.msi.com/product/mb/MS-6163-Pro.html", NULL), + B("MSI", "MS-6178", BAD, "http://www.msi.com/product/mb/MS-6178.html", "Immediately powers off if you try to hot-plug the chip. However, this does '''not''' happen if you use coreboot. Owned by Uwe Hermann ."), + B("MSI", "MS-6330 (K7T Turbo)", OK, "http://www.msi.com/product/mb/K7T-Turbo.html", NULL), + B("MSI", "MS-6391 (845 Pro4)", OK, "http://www.msi.com/product/mb/845-Pro4.html", NULL), + B("MSI", "MS-6561 (745 Ultra)", OK, "http://www.msi.com/product/mb/745-Ultra.html", NULL), + B("MSI", "MS-6566 (845 Ultra-C)",OK, "http://www.msi.com/product/mb/845-Ultra-C.html", NULL), + B("MSI", "MS-6570 (K7N2)", OK, "http://www.msi.com/product/mb/K7N2.html", NULL), + B("MSI", "MS-6577 (Xenon)", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?product=90390&lc=en&cc=us&dlc=en&docname=bph07843", "This is an OEM board from HP, the HP name is Xenon."), + B("MSI", "MS-6590 (KT4 Ultra)", OK, "http://www.msi.com/product/mb/KT4-Ultra.html", NULL), + B("MSI", "MS-6702E (K8T Neo2-F)",OK, "http://www.msi.com/product/mb/K8T-Neo2-F--FIR.html", NULL), + B("MSI", "MS-6712 (KT4V)", OK, "http://www.msi.com/product/mb/KT4V---KT4V-L--v1-0-.html", NULL), + B("MSI", "MS-6787 (P4MAM-V/P4MAM-L)", OK, "http://www.msi.com/service/search/?kw=6787&type=product", NULL), + B("MSI", "MS-7005 (651M-L)", OK, "http://www.msi.com/product/mb/651M-L.html", NULL), + B("MSI", "MS-7025 (K8N Neo2 Platinum)", OK, "http://www.msi.com/product/mb/K8N-Neo2-Platinum.html", NULL), + B("MSI", "MS-7046", OK, "http://www.heimir.de/ms7046/", NULL), + B("MSI", "MS-7061 (KM4M-V/KM4AM-V)", OK, "http://www.msi.com/service/search/?kw=7061&type=product", NULL), + B("MSI", "MS-7065", OK, "http://browse.geekbench.ca/geekbench2/view/53114", NULL), + B("MSI", "MS-7135 (K8N Neo3)", OK, "http://www.msi.com/product/mb/K8N-Neo3.html", NULL), + B("MSI", "MS-7142 (K8MM-V)", OK, "http://www.msi.com/product/mb/K8MM-V.html", NULL), + B("MSI", "MS-7168 (Orion)", OK, "http://support.packardbell.co.uk/uk/item/index.php?i=spec_orion&pi=platform_honeymoon_istart", NULL), + B("MSI", "MS-7207 (K8NGM2-L)", OK, "http://www.msi.com/product/mb/K8NGM2-FID--IL--L.html", NULL), + B("MSI", "MS-7211 (PM8M3-V)", OK, "http://www.msi.com/product/mb/PM8M3-V.html", NULL), + B("MSI", "MS-7236 (945PL Neo3)", OK, "http://www.msi.com/product/mb/945PL-Neo3.html", NULL), + B("MSI", "MS-7250 (K9N SLI (rev 2.1))", OK, "http://www.msi.com/product/mb/K9N--SLI.html", NULL), + B("MSI", "MS-7253 (K9VGM-V)", OK, "http://www.msi.com/product/mb/K9VGM-V.html", NULL), + B("MSI", "MS-7255 (P4M890M)", OK, "http://www.msi.com/product/mb/P4M890M-L-IL.html", NULL), + B("MSI", "MS-7260 (K9N Neo PCB 1.0)", BAD, "http://www.msi.com/product/mb/K9N-Neo--PCB-1-0-.html", "Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot. Owned by Uwe Hermann ."), + B("MSI", "MS-7309 (K9N6PGM2-V2)", OK, "http://www.msi.com/product/mb/K9N6PGM2-V2.html", NULL), + B("MSI", "MS-7312 (K9MM-V)", OK, "http://www.msi.com/product/mb/K9MM-V.html", NULL), + B("MSI", "MS-7345 (P35 Neo2-FIR)", OK, "http://www.msi.com/product/mb/P35-Neo2-FR---FIR.html", NULL), + B("MSI", "MS-7368 (K9AG Neo2-Digital)", OK, "http://www.msi.com/product/mb/K9AG-Neo2-Digital.html", NULL), + B("MSI", "MS-7369 (K9N Neo V2)", OK, "http://www.msi.com/product/mb/K9N-Neo-V2.html", NULL), + B("MSI", "MS-7376 (K9A2 Platinum V1)", OK, "http://www.msi.com/product/mb/K9A2-Platinum.html", NULL), + B("MSI", "MS-7529 (G31M3-L(S) V2)", OK, "http://www.msi.com/product/mb/G31M3-L-V2---G31M3-LS-V2.html", NULL), + B("MSI", "MS-7529 (G31TM-P21)", OK, "http://www.msi.com/product/mb/G31TM-P21.html", NULL), + B("MSI", "MS-7548 (Aspen-GL8E)", OK, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c01635688&lc=en&cc=us&dlc=en", NULL), + B("MSI", "MS-7596 (785GM-E51)", OK, "http://www.msi.com/product/mb/785GM-E51.html", NULL), + B("MSI", "MS-7597 (GF615M-P33)", BAD, NULL, "Missing board enable/SIO support (Fintek F71889), see http://www.flashrom.org/pipermail/flashrom/2012-March/008956.html"), + B("MSI", "MS-7599 (870-C45)", OK, "http://www.msi.com/product/mb/870-C45.html", NULL), + B("MSI", "MS-7613 (Iona-GL8E)", BAD, "http://h10025.www1.hp.com/ewfrf/wc/document?docname=c02014355&lc=en&cc=dk&dlc=en&product=4348478", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("MSI", "MS-7635 (H55M-ED55)", BAD, "http://www.msi.com/product/mb/H55M-ED55.html", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("MSI", "MS-7640 (890FXA-GD70)",OK, "http://www.msi.com/product/mb/890FXA-GD70.html", NULL), + B("MSI", "MS-7642 (890GXM-G65)", OK, "http://www.msi.com/product/mb/890GXM-G65.html", NULL), + B("MSI", "MS-7676 (H67MA-ED55(B3))", OK, "http://www.msi.com/product/mb/H67MA-ED55--B3-.html", "Seems to work fine basically, but user reported (hopefully unrelated) buggy behavior of the board after a firmware upgrade. See http://www.flashrom.org/pipermail/flashrom/2012-January/008547.html"), + B("MSI", "MS-7676 (Z68MA-G45 (B3))", OK, "http://www.msi.com/product/mb/Z68MA-G45--B3-.html", NULL), + B("MSI", "MS-7696 (A75MA-G55)", OK, "http://www.msi.com/product/mb/A75MA-G55.html", NULL), + B("MSI", "MS-7698 (E350IA-E45)", OK, "http://www.msi.com/product/mb/E350IA-E45.html", NULL), + B("MSI", "MS-7740 (H61MA-E35(B3))", OK, "http://www.msi.com/product/mb/H61MA-E35--B3-.html", NULL), + B("NEC", "PowerMate 2000", OK, "http://support.necam.com/mobilesolutions/hardware/Desktops/pm2000/celeron/", NULL), + B("Nokia", "IP530", OK, NULL, NULL), + B("Palit", "N61S", OK, NULL, NULL), + B("PCCHIPS ", "M598LMR (V9.0)", OK, NULL, NULL), + B("PCCHIPS ", "M863G (V5.1A)", OK, "http://www.pcchips.com.tw/PCCWebSite/Products/ProductsDetail.aspx?CategoryID=1&DetailID=343&DetailName=Feature&MenuID=1&LanID=0", NULL), + B("PC Engines", "Alix.1c", OK, "http://pcengines.ch/alix1c.htm", NULL), + B("PC Engines", "Alix.2c2", OK, "http://pcengines.ch/alix2c2.htm", NULL), + B("PC Engines", "Alix.2c3", OK, "http://pcengines.ch/alix2c3.htm", NULL), + B("PC Engines", "Alix.2d3", OK, "http://pcengines.ch/alix2d3.htm", NULL), + B("PC Engines", "Alix.3c3", OK, "http://pcengines.ch/alix3c3.htm", NULL), + B("PC Engines", "Alix.3d3", OK, "http://pcengines.ch/alix3d3.htm", NULL), + B("PC Engines", "Alix.6f2", OK, "http://pcengines.ch/alix6f2.htm", NULL), + B("PC Engines", "WRAP.2E", OK, "http://pcengines.ch/wrap2e1.htm", NULL), + B("Portwell", "PEB-4700VLA", OK, "http://www.portwell.com/products/detail.asp?CUSTCHAR1=PEB-4700VLA", NULL), + B("RCA", "RM4100", OK, "http://www.settoplinux.org/index.php?title=RCA_RM4100", NULL), + B("Samsung", "Polaris 32", OK, NULL, NULL), + B("Shuttle", "AK31", OK, "http://www.motherboard.cz/mb/shuttle/AK31.htm", NULL), + B("Shuttle", "AK38N", OK, "http://eu.shuttle.com/en/desktopdefault.aspx/tabid-36/558_read-9889/", NULL), + B("Shuttle", "AV11V30", OK, NULL, NULL), + B("Shuttle", "AV18E2", OK, "http://www.shuttle.eu/_archive/older/de/av18.htm", NULL), + B("Shuttle", "FD37", OK, "http://www.shuttle.eu/products/discontinued/barebones/sd37p2/", NULL), + B("Shuttle", "FH67", OK, "http://www.shuttle.eu/products/mini-pc/sh67h3/specification/", NULL), + B("Shuttle", "FN25", OK, "http://www.shuttle.eu/products/discontinued/barebones/sn25p/?0=", NULL), + B("Shuttle", "X50/X50(B)", OK, "http://au.shuttle.com/product_detail_spec.jsp?PI=1241", NULL), + B("Soyo", "SY-5VD", BAD, "http://www.soyo.com/content/Downloads/163/&c=80&p=464&l=English", "No public report found. Owned by Uwe Hermann . May work now."), + B("Soyo", "SY-6BA+ III", OK, "http://www.motherboard.cz/mb/soyo/SY-6BA+III.htm", NULL), + B("Soyo", "SY-7VCA", OK, "http://www.tomshardware.com/reviews/12-socket-370-motherboards,196-15.html", NULL), + B("Sun", "Blade x6250", OK, "http://www.sun.com/servers/blades/x6250/", NULL), + B("Sun", "Fire x4150", BAD, "http://www.sun.com/servers/x64/x4150/", "No public report found. May work now."), + B("Sun", "Fire x4200", BAD, "http://www.sun.com/servers/entry/x4200/", "No public report found. May work now."), + B("Sun", "Fire x4540", BAD, "http://www.sun.com/servers/x64/x4540/", "No public report found. May work now."), + B("Sun", "Fire x4600", BAD, "http://www.sun.com/servers/x64/x4600/", "No public report found. May work now."), + B("Sun", "Ultra 40 M2", OK, "http://download.oracle.com/docs/cd/E19127-01/ultra40.ws/820-0123-13/intro.html", NULL), + B("Supermicro", "H8QC8", OK, "http://www.supermicro.com/Aplus/motherboard/Opteron/nforce/H8QC8.cfm", NULL), + B("Supermicro", "X5DP8-G2", OK, "http://www.supermicro.com/products/motherboard/Xeon/E7501/X5DP8-G2.cfm", NULL), + B("Supermicro", "X7DBT-INF", OK, "http://www.supermicro.com/products/motherboard/Xeon1333/5000P/X7DBT-INF.cfm", NULL), + B("Supermicro", "X7SPA-HF", OK, "http://www.supermicro.com/products/motherboard/ATOM/ICH9/X7SPA.cfm?typ=H&IPMI=Y", NULL), + B("Supermicro", "X8DT3", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DT3.cfm", NULL), + B("Supermicro", "X8DTE-F", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DT6-F.cfm?IPMI=Y&SAS=N", NULL), + B("Supermicro", "X8DTH-6F", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTH-6F.cfm", NULL), + B("Supermicro", "X8DTT-F", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTT-F.cfm", NULL), + B("Supermicro", "X8DTT-HIBQF", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTT-H.cfm", NULL), + B("Supermicro", "X8DTU-6TF+", BAD, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTU_.cfm?TYP=SAS&LAN=10", "Probing works (Atmel AT25DF321A, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Supermicro", "X8DTU-F", OK, "http://www.supermicro.com/products/motherboard/QPI/5500/X8DTU-F.cfm", NULL), + B("Supermicro", "X8SIE(-F)", BAD, "http://www.supermicro.com/products/motherboard/Xeon3000/3400/X8SIE.cfm?IPMI=N&TYP=LN2", "Requires unlocking the ME although the registers are set up correctly by the descriptor/BIOS already (tested with swseq and hwseq)."), + B("Supermicro", "X8STi", OK, "http://www.supermicro.com/products/motherboard/Xeon3000/X58/X8STi.cfm", NULL), + B("Supermicro", "X9DR3-F", BAD, "http://www.supermicro.com/products/motherboard/xeon/c600/x9dr3-f.cfm", "Probing works (Numonyx N25Q128 (supported by SFDP only atm), 16384 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Supermicro", "X9SCA-F", BAD, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCA-F.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Supermicro", "X9SCL", BAD, "http://www.supermicro.com/products/motherboard/Xeon/C202_C204/X9SCL.cfm", "Probing works (Winbond W25Q64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("T-Online", "S-100", OK, "http://wiki.freifunk-hannover.de/T-Online_S_100", NULL), + B("Tekram", "P6Pro-A5", OK, "http://www.motherboard.cz/mb/tekram/P6Pro-A5.htm", NULL), + B("Termtek", "TK-3370 (Rev:2.5B)", OK, NULL, NULL), + B("Thomson", "IP1000", OK, "http://www.settoplinux.org/index.php?title=Thomson_IP1000", NULL), + B("TriGem", "Anaheim-3", OK, "http://www.e4allupgraders.info/dir1/motherboards/socket370/anaheim3.shtml", NULL), + B("TriGem", "Lomita", OK, "http://www.e4allupgraders.info/dir1/motherboards/socket370/lomita.shtml", NULL), + B("Tyan", "S1846 (Tsunami ATX)", OK, "http://www.tyan.com/archive/products/html/tsunamiatx.html", NULL), + B("Tyan", "S2466 (Tiger MPX)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=461", NULL), + B("Tyan", "S2498 (Tomcat K7M)", OK, "http://www.tyan.com/archive/products/html/tomcatk7m.html", NULL), + B("Tyan", "S2723 (Tiger i7501)", OK, "http://www.tyan.com/archive/products/html/tigeri7501.html", NULL), + B("Tyan", "S2875 (Tiger K8W)", OK, "http://www.tyan.com/archive/products/html/tigerk8w.html", NULL), + B("Tyan", "S2881 (Thunder K8SR)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=115", NULL), + B("Tyan", "S2882-D (Thunder K8SD Pro)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=127", NULL), + B("Tyan", "S2882 (Thunder K8S Pro)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=121", NULL), + B("Tyan", "S2891 (Thunder K8SRE)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=144", NULL), + B("Tyan", "S2892 (Thunder K8SE)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=145", NULL), + B("Tyan", "S2895 (Thunder K8WE)", OK, "http://www.tyan.com/archive/products/html/thunderk8we.html", NULL), + B("Tyan", "S2912 (Thunder n3600R)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=157", NULL), + B("Tyan", "S2915-E (Thunder n6650W)", OK, "http://tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=541&SKU=600000041", NULL), + B("Tyan", "S2915 (Thunder n6650W)", OK, "http://tyan.com/product_board_detail.aspx?pid=163", NULL), + B("Tyan", "S2933 (Thunder n3600S)", OK, "http://tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=478&SKU=600000063", NULL), + B("Tyan", "S3095 (Tomcat i945GM)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=181", NULL), + B("Tyan", "S3992 (Thunder h2000M)", OK, "http://tyan.com/product_board_detail.aspx?pid=235", NULL), + B("Tyan", "S5180 (Toledo i965R)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=456", NULL), + B("Tyan", "S5191 (Toledo i3000R)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=343", NULL), + B("Tyan", "S5197 (Toledo i3010W)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=349", NULL), + B("Tyan", "S5211-1U (Toledo i3200R)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=593", NULL), + B("Tyan", "S5211 (Toledo i3210W)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=591", NULL), + B("Tyan", "S5220 (Toledo q35T)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=597", NULL), + B("Tyan", "S5375-1U (Tempest i5100X)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=610", NULL), + B("Tyan", "S5375 (Tempest i5100X)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=566", NULL), + B("Tyan", "S5376 (Tempest i5100W)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=605", "Both S5376G2NR and S5376WAG2NR should work."), + B("Tyan", "S5377 (Tempest i5100T)", OK, "http://www.tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=642&SKU=600000017", NULL), + B("Tyan", "S5382 (Tempest i5000PW)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=439", NULL), + B("Tyan", "S5397 (Tempest i5400PW)", OK, "http://www.tyan.com/product_board_detail.aspx?pid=560", NULL), + B("VIA", "EPIA M/MII/...", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=202", NULL), /* EPIA-MII link for now */ + B("VIA", "EPIA SP", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=261", NULL), + B("VIA", "EPIA-CN", OK, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=400", NULL), + B("VIA", "EPIA EK", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?motherboard_id=420", NULL), + B("VIA", "EPIA-EX15000G", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=450", NULL), + B("VIA", "EPIA-LN", OK, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=473", NULL), + B("VIA", "EPIA-M700", OK, "http://via.com.tw/servlet/downloadSvl?motherboard_id=670&download_file_id=3700", NULL), + B("VIA", "EPIA-N/NL", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=221", NULL), /* EPIA-N link for now */ + B("VIA", "EPIA-NX15000G", OK, "http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=470", NULL), + B("VIA", "NAB74X0", OK, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=590", NULL), + B("VIA", "pc2500e", OK, "http://www.via.com.tw/en/initiatives/empowered/pc2500_mainboard/index.jsp", NULL), + B("VIA", "PC3500G", OK, "http://www.via.com.tw/en/initiatives/empowered/pc3500_mainboard/index.jsp", NULL), + B("VIA", "VB700X", OK, "http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=490", NULL), + B("ZOTAC", "Fusion-ITX WiFi (FUSION350-A-E)", OK, NULL, NULL), + B("ZOTAC", "GeForce 8200", OK, NULL, NULL), + B("ZOTAC", "H67-ITX WiFi (H67ITX-C-E)", BAD, NULL, "Probing works (Winbond W25Q32, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("ZOTAC", "nForce 630i Supreme (N73U-Supreme)", OK, NULL, NULL), + B("ZOTAC", "ZBOX AD02 (PLUS)", OK, NULL, NULL), + B("ZOTAC", "ZBOX HD-ID11", OK, NULL, NULL), #endif {}, @@ -1029,24 +1038,24 @@ /* Please keep this list alphabetically ordered by vendor/board. */ const struct board_info laptops_known[] = { #if defined(__i386__) || defined(__x86_64__) - B("Acer", "Aspire 1520", 1, "http://support.acer.com/us/en/acerpanam/notebook/0000/Acer/Aspire1520/Aspire1520nv.shtml", NULL), - B("Acer", "Aspire One", 0, NULL, "http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html"), - B("ASUS", "A8Jm", 1, NULL, NULL), - B("ASUS", "Eee PC 701 4G", 0, "http://www.asus.com/Eee/Eee_PC/Eee_PC_4G/", "It seems the chip (25X40VSIG) is behind some SPI flash translation layer (likely in the EC, the ENE KB3310)."), - B("ASUS", "M6Ne", 0, "http://www.asus.com/Notebooks/Versatile_Performance/M6NNe/", "Untested board enable."), - B("Clevo", "P150HM", 0, "http://www.clevo.com.tw/en/products/prodinfo_2.asp?productid=307", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), - B("Dell", "Inspiron 1420", 1, NULL, NULL), - B("Dell", "Latitude CPi A366XT", 0, "http://www.coreboot.org/Dell_Latitude_CPi_A366XT", "The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop."), - B("Dell", "Vostro 3700", 0, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-May/009197.html."), - B("Dell", "Latitude E6520", 0, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-June/009420.html."), - B("HP/Compaq", "nx9005", 0, "http://h18000.www1.hp.com/products/quickspecs/11602_na/11602_na.HTML", "Shuts down when probing for a chip. http://www.flashrom.org/pipermail/flashrom/2010-May/003321.html"), - B("HP/Compaq", "nx9010", 0, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514", "Hangs upon '''flashrom -V''' (needs hard power-cycle then)."), - B("IBM/Lenovo", "Thinkpad T40p", 0, "http://www.thinkwiki.org/wiki/Category:T40p", NULL), - B("IBM/Lenovo", "Thinkpad T420", 0, "http://www.thinkwiki.org/wiki/Category:T420", "Probing works (Macronix MX25L6405, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), - B("IBM/Lenovo", "Thinkpad T410s", 0, "http://www.thinkwiki.org/wiki/Category:T410s", "Probing works (Winbond W25X64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), - B("IBM/Lenovo", "Thinkpad X1", 0, "http://www.thinkwiki.org/wiki/Category:X1", "Probing works (ST M25PX64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), - B("IBM/Lenovo", "240", 0, "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("Lenovo", "3000 V100 TF05Cxx", 1, "http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop", NULL), + B("Acer", "Aspire 1520", OK, "http://support.acer.com/us/en/acerpanam/notebook/0000/Acer/Aspire1520/Aspire1520nv.shtml", NULL), + B("Acer", "Aspire One", BAD, NULL, "http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html"), + B("ASUS", "A8Jm", OK, NULL, NULL), + B("ASUS", "Eee PC 701 4G", BAD, "http://www.asus.com/Eee/Eee_PC/Eee_PC_4G/", "It seems the chip (25X40VSIG) is behind some SPI flash translation layer (likely in the EC, the ENE KB3310)."), + B("ASUS", "M6Ne", NT, "http://www.asus.com/Notebooks/Versatile_Performance/M6NNe/", "Untested board enable."), + B("Clevo", "P150HM", BAD, "http://www.clevo.com.tw/en/products/prodinfo_2.asp?productid=307", "Probing works (Macronix MX25L3205, 4096 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs), ME region is locked."), + B("Dell", "Inspiron 1420", OK, NULL, NULL), + B("Dell", "Latitude CPi A366XT", BAD, "http://www.coreboot.org/Dell_Latitude_CPi_A366XT", "The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop."), + B("Dell", "Vostro 3700", BAD, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-May/009197.html."), + B("Dell", "Latitude E6520", BAD, NULL, "Locked ME, see http://www.flashrom.org/pipermail/flashrom/2012-June/009420.html."), + B("HP/Compaq", "nx9005", BAD, "http://h18000.www1.hp.com/products/quickspecs/11602_na/11602_na.HTML", "Shuts down when probing for a chip. http://www.flashrom.org/pipermail/flashrom/2010-May/003321.html"), + B("HP/Compaq", "nx9010", BAD, "http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514", "Hangs upon '''flashrom -V''' (needs hard power-cycle then)."), + B("IBM/Lenovo", "Thinkpad T40p", BAD, "http://www.thinkwiki.org/wiki/Category:T40p", NULL), + B("IBM/Lenovo", "Thinkpad T420", BAD, "http://www.thinkwiki.org/wiki/Category:T420", "Probing works (Macronix MX25L6405, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), + B("IBM/Lenovo", "Thinkpad T410s", BAD, "http://www.thinkwiki.org/wiki/Category:T410s", "Probing works (Winbond W25X64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), + B("IBM/Lenovo", "Thinkpad X1", BAD, "http://www.thinkwiki.org/wiki/Category:X1", "Probing works (ST M25PX64, 8192 kB, SPI), but parts of the flash are problematic: descriptor is r/o (conforming to ICH reqs) and ME is locked. Also, a Protected Range is locking the top range of the BIOS region (presumably the boot block)."), + B("IBM/Lenovo", "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("Lenovo", "3000 V100 TF05Cxx", OK, "http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop", NULL), #endif {}, Modified: trunk/print_wiki.c ============================================================================== --- trunk/print_wiki.c Sat Jul 28 05:17:15 2012 (r1554) +++ trunk/print_wiki.c Sat Jul 28 21:35:26 2012 (r1555) @@ -129,23 +129,27 @@ static void wiki_helper(const char *devicetype, int cols, const struct board_info boards[]) { - int i, j, k = 0, boardcount_good = 0, boardcount_bad = 0, color = 1; - int num_notes = 0; + int i, j, k; + unsigned int boardcount_good = 0, boardcount_bad = 0, boardcount_nt = 0; + int num_notes = 0, color = 1; char *notes = calloc(1, 1); char tmp[900 + 1]; const struct board_match *b = board_matches; for (i = 0; boards[i].vendor != NULL; i++) { - if (boards[i].working) + if (boards[i].working == OK) boardcount_good++; + else if (boards[i].working == NT) + boardcount_nt++; else boardcount_bad++; } - printf("\n\nTotal amount of supported %s: '''%d'''. " - "Not yet supported (i.e., known-bad): '''%d'''.\n\n" + printf("\n\nTotal amount of known good boards %s: '''%d'''; " + "Untested (e.g. user vanished before testing new code): '''%d'''; " + "Not yet supported (i.e. known-bad): '''%d'''.\n\n" "{| border=\"0\" valign=\"top\"\n| valign=\"top\"|\n\n%s", - devicetype, boardcount_good, boardcount_bad, board_th); + devicetype, boardcount_good, boardcount_nt, boardcount_bad, board_th); for (i = 0, j = 0; boards[i].vendor != NULL; i++, j++) { @@ -171,7 +175,8 @@ b[k].lb_vendor ? b[k].lb_vendor : "", b[k].lb_vendor ? ":" : "", b[k].lb_vendor ? b[k].lb_part : "", - (boards[i].working) ? "OK" : "No"); + (boards[i].working == OK) ? "OK" : + (boards[i].working == NT) ? "?3" : "No"); if (boards[i].note) { printf("%d\n", num_notes + 1); Modified: trunk/programmer.h ============================================================================== --- trunk/programmer.h Sat Jul 28 05:17:15 2012 (r1554) +++ trunk/programmer.h Sat Jul 28 21:35:26 2012 (r1555) @@ -148,7 +148,7 @@ struct penable { uint16_t vendor_id; uint16_t device_id; - int status; /* OK=0 and NT=1 are defines only. Beware! */ + const enum test_state status; const char *vendor_name; const char *device_name; int (*doit) (struct pci_dev *dev, const char *name); @@ -190,7 +190,7 @@ const char *board_name; int max_rom_decode_parallel; - int status; + const enum test_state status; int (*enable) (void); /* May be NULL. */ }; @@ -199,7 +199,7 @@ struct board_info { const char *vendor; const char *name; - const int working; + const enum test_state working; #ifdef CONFIG_PRINT_WIKI const char *url; const char *note; @@ -224,7 +224,7 @@ struct pcidev_status { uint16_t vendor_id; uint16_t device_id; - int status; + const enum test_state status; const char *vendor_name; const char *device_name; }; @@ -425,7 +425,7 @@ struct usbdev_status { uint16_t vendor_id; uint16_t device_id; - int status; + const enum test_state status; const char *vendor_name; const char *device_name; }; From stefan.tauner at student.tuwien.ac.at Sat Jul 28 21:39:50 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sat, 28 Jul 2012 21:39:50 +0200 Subject: [flashrom] [PATCH 1/7] Introduce and use enum test_state In-Reply-To: <4F529BF7.3000604@gmx.net> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-2-git-send-email-stefan.tauner@student.tuwien.ac.at> <4F529BF7.3000604@gmx.net> Message-ID: <201207281939.q6SJdooo004913@mail2.student.tuwien.ac.at> On Sat, 03 Mar 2012 23:32:23 +0100 Carl-Daniel Hailfinger wrote: > Am 03.03.2012 21:11 schrieb Stefan Tauner: > > Previously boards in the wiki were tagged either as working or as known > > bad. But we added support to various boards via board enables that were > > then never tested because the owners have not reported back. This can > > now be tagged with NT and is shown appropriately. > > > > Also, the underlying data structure indicating state was converted from > > macros to an enum while preserving original integer values. > > > > Because all lines specifying supported boards and laptops were touched > > anyway, this patch also re-indents them. > > > > --- > > TODO: change other occurrences to use it. wanted to get feedack first. > > > > Signed-off-by: Stefan Tauner > > > > diff --git a/print_wiki.c b/print_wiki.c > > index 377154d..9a9cd83 100644 > > --- a/print_wiki.c > > +++ b/print_wiki.c > > @@ -136,9 +136,9 @@ static void wiki_helper(const char *devicetype, int cols, > > const struct board_match *b = board_matches; > > > > for (i = 0; boards[i].vendor != NULL; i++) { > > - if (boards[i].working) > > + if (boards[i].working == OK) > > boardcount_good++; > > - else > > + if (boards[i].working == BAD) > > boardcount_bad++; > > You could replace that construct with a switch(), and it might make > sense to count untested boards as well. i could, but it would increase the line count by 100%, untested board count was added. > > } > > > > @@ -171,7 +171,8 @@ static void wiki_helper(const char *devicetype, int cols, > > b[k].lb_vendor ? b[k].lb_vendor : "", > > b[k].lb_vendor ? ":" : "", > > b[k].lb_vendor ? b[k].lb_part : "", > > - (boards[i].working) ? "OK" : "No"); > > + (boards[i].working == OK) ? "OK" : > > + (boards[i].working == NT) ? "?3" : "No"); > > The ?3 looks odd, but I assume you tested it. it is a mediawiki template: http://flashrom.org/index.php?title=Template:%3F3&action=edit > [?] > Is it possible that this patch made the board table one or two tabs > wider? The patch looks like that, and while I agree that some > files/sections should not have line length limits, adding another 16 > columns of whitespace is something I'd like to avoid. reverted that part... i have committed a refined version now in r1555, thanks for your suggestions! -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From mail at justinbogner.com Sat Jul 28 21:34:17 2012 From: mail at justinbogner.com (Justin Bogner) Date: Sat, 28 Jul 2012 13:34:17 -0600 Subject: [flashrom] [PATCH] ichspi: ignore bogus FREGs. In-Reply-To: <1343403413-5749-1-git-send-email-stefan.tauner@student.tuwien.ac.at> (Stefan Tauner's message of "Fri, 27 Jul 2012 17:36:53 +0200") References: <201207271405.q6RE5PQD018429@mail2.student.tuwien.ac.at> <1343403413-5749-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <87ehnv1xza.fsf@justinbogner.com> Stefan Tauner writes: > Some vendors forget to disable regions properly and set their FRAP bits > and FREG to 0. While not documented publicly this is being ignored by the > chipset(s)[1] and hence flashrom should do so too. Without this patch > flashrom prints a warning and disables writes. > The check for i (region index) excludes the descriptor region which should > not be becessary because specs suggest that the descriptor region should not > be locked, but if vendors would follow the specs this patch would not have > been necessary in the first place. > > [1]: http://www.flashrom.org/pipermail/flashrom/2012-May/009303.html > > Signed-off-by: Stefan Tauner > --- > Justin, you could help testing this patch by applying it to the latest > development source from http://flashrom.org/Downloads and sending us > the flashrom output as before. I'll try this out in the next week or so. Thanks for looking into this. From svn at flashrom.org Sun Jul 29 04:04:21 2012 From: svn at flashrom.org (repository service) Date: Sun, 29 Jul 2012 04:04:21 +0200 Subject: [flashrom] [commit] r1556 - trunk Message-ID: Author: stefanct Date: Sun Jul 29 04:04:21 2012 New Revision: 1556 URL: http://flashrom.org/trac/flashrom/changeset/1556 Log: print_wiki: fix columns calculations. for - chipsets - boards, and - chips Previously the chipset columns were not uniformly divided at all, which led to very odd table bottoms. This patches fixes this as far as wiki code can do (browser rendering can still create odd effects because we do not define cell heights). Signed-off-by: Stefan Tauner Acked-by: Stefan Tauner Modified: trunk/print_wiki.c Modified: trunk/print_wiki.c ============================================================================== --- trunk/print_wiki.c Sat Jul 28 21:35:26 2012 (r1555) +++ trunk/print_wiki.c Sun Jul 29 04:04:21 2012 (r1556) @@ -35,15 +35,21 @@ generated by pasting '''flashrom -z''' output.
\ '''Last update:''' %s(generated by flashrom %s)\n\n"; +static const char th_start[] = "| valign=\"top\"|\n\n\ +{| border=\"0\" style=\"font-size: smaller\" valign=\"top\"\n\ +|- bgcolor=\"#6699dd\"\n"; + #if CONFIG_INTERNAL == 1 -static const char chipset_th[] = "{| border=\"0\" style=\"font-size: smaller\"\n\ -|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\ -! align=\"left\" | Southbridge\n! align=\"center\" | PCI IDs\n\ +static const char chipset_th[] = "\ +! align=\"left\" | Vendor\n\ +! align=\"left\" | Southbridge\n\ +! align=\"center\" | PCI IDs\n\ ! align=\"center\" | Status\n\n"; -static const char board_th[] = "{| border=\"0\" style=\"font-size: smaller\" \ -valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\ -! align=\"left\" | Mainboard\n! align=\"left\" | Required option\n\ +static const char board_th[] = "\ +! align=\"left\" | Vendor\n\ +! align=\"left\" | Mainboard\n\ +! align=\"left\" | Required option\n\ ! align=\"center\" | Status\n\n"; static const char board_intro[] = "\ @@ -59,9 +65,7 @@ further verified mainboards on the [[Mailinglist|mailing list]].\n"; #endif -static const char chip_th[] = "{\ -| border=\"0\" style=\"font-size: smaller\" valign=\"top\"\n\ -|- bgcolor=\"#6699dd\"\n\ +static const char chip_th[] = "\ ! align=\"left\" | Vendor\n\ ! align=\"left\" | Device\n\ ! align=\"center\" | Size [kB]\n\ @@ -72,14 +76,16 @@ | Probe\n| Read\n| Erase\n| Write\n\ | align=\"center\" | Min \n| align=\"center\" | Max\n\n"; -static const char programmer_section[] = "\ -\n== Supported programmers ==\n\nThis is a list \ -of supported PCI devices flashrom can use as programmer:\n\n{| border=\"0\" \ -valign=\"top\"\n| valign=\"top\"|\n\n{| border=\"0\" style=\"font-size: \ -smaller\" valign=\"top\"\n|- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\ -! align=\"left\" | Device\n! align=\"center\" | PCI IDs\n\ +static const char programmer_th[] = "\ +! align=\"left\" | Vendor\n\ +! align=\"left\" | Device\n\ +! align=\"center\" | PCI IDs\n\ ! align=\"center\" | Status\n\n"; +static const char programmer_intro[] = "\ +\n== Supported programmers ==\n\n\ +This is a list of supported PCI devices flashrom can use as programmer:\n\n{"; + #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\ @@ -94,18 +100,25 @@ static void print_supported_chipsets_wiki(int cols) { - int i, j, enablescount = 0, color = 1; + int i; + unsigned int lines_per_col; const struct penable *e; + int enablescount = 0, color = 1; for (e = chipset_enables; e->vendor_name != NULL; e++) enablescount++; - printf("\n== Supported chipsets ==\n\nTotal amount of supported " - "chipsets: '''%d'''\n\n{| border=\"0\" valign=\"top\"\n| " - "valign=\"top\"|\n\n%s", enablescount, chipset_th); + /* +1 to force the resulting number of columns to be < cols */ + lines_per_col = enablescount / cols + ((enablescount%cols) > 0 ? 1 : 0); + + printf("\n== Supported chipsets ==\n\nTotal amount of supported chipsets: '''%d'''\n\n" + "{| border=\"0\" valign=\"top\"\n", enablescount); e = chipset_enables; - for (i = 0, j = 0; e[i].vendor_name != NULL; i++, j++) { + for (i = 0; e[i].vendor_name != NULL; i++) { + if ((i % lines_per_col) == 0) + printf("%s%s", th_start, chipset_th); + /* Alternate colors if the vendor changes. */ if (i > 0 && strcmp(e[i].vendor_name, e[i - 1].vendor_name)) color = !color; @@ -116,20 +129,20 @@ e[i].vendor_id, e[i].device_id, (e[i].status == OK) ? "{{OK}}" : "{{?3}}"); - /* Split table in 'cols' columns. */ - if (j >= (enablescount / cols + 1)) { - printf("\n|}\n\n| valign=\"top\"|\n\n%s", chipset_th); - j = 0; - } + if (((i % lines_per_col) + 1) == lines_per_col) + printf("\n|}\n\n"); } - printf("\n|}\n\n|}\n"); + /* end inner table if it did not fill the last column fully */ + if (((i % lines_per_col)) > 0) + printf("\n|}\n\n"); + printf("\n\n|}\n"); } -static void wiki_helper(const char *devicetype, int cols, - const struct board_info boards[]) +static void wiki_helper(const char *devicetype, int cols, const struct board_info boards[]) { - int i, j, k; + int i, k; + unsigned int boardcount, lines_per_col; unsigned int boardcount_good = 0, boardcount_bad = 0, boardcount_nt = 0; int num_notes = 0, color = 1; char *notes = calloc(1, 1); @@ -144,14 +157,19 @@ else boardcount_bad++; } + boardcount = boardcount_good + boardcount_nt + boardcount_bad; + + /* +1 to force the resulting number of columns to be < cols */ + lines_per_col = boardcount / cols + ((boardcount%cols) > 0 ? 1 : 0); printf("\n\nTotal amount of known good boards %s: '''%d'''; " "Untested (e.g. user vanished before testing new code): '''%d'''; " "Not yet supported (i.e. known-bad): '''%d'''.\n\n" - "{| border=\"0\" valign=\"top\"\n| valign=\"top\"|\n\n%s", - devicetype, boardcount_good, boardcount_nt, boardcount_bad, board_th); + "{| border=\"0\" valign=\"top\"\n", devicetype, boardcount_good, boardcount_nt, boardcount_bad); - for (i = 0, j = 0; boards[i].vendor != NULL; i++, j++) { + for (i = 0; boards[i].vendor != NULL; i++) { + if ((i % lines_per_col) == 0) + printf("%s%s", th_start, board_th); /* Alternate colors if the vendor changes. */ if (i > 0 && strcmp(boards[i].vendor, boards[i - 1].vendor)) @@ -187,14 +205,14 @@ printf("\n"); } - /* Split table in 'cols' columns. */ - if (j >= ((boardcount_good + boardcount_bad) / cols + 1)) { - printf("\n|}\n\n| valign=\"top\"|\n\n%s", board_th); - j = 0; - } + if (((i % lines_per_col) + 1) == lines_per_col) + printf("\n|}\n\n"); } - printf("\n|}\n\n|}\n"); + /* end inner table if it did not fill the last column fully */ + if (((i % lines_per_col)) > 0) + printf("\n|}\n\n"); + printf("\n\n|}\n"); if (num_notes > 0) printf("\n\n%s\n", notes); @@ -213,12 +231,13 @@ static void print_supported_chips_wiki(int cols) { - int i = 0, c = 1, chipcount = 0; - const struct flashchip *f, *old = NULL; + unsigned int lines_per_col; uint32_t t; char *s; char vmax[6]; char vmin[6]; + const struct flashchip *f, *old = NULL; + int i = 0, c = 1, chipcount = 0; for (f = flashchips; f->name != NULL; f++) { /* Don't count generic entries. */ @@ -229,21 +248,27 @@ chipcount++; } - printf("\n== Supported chips ==\n\nTotal amount of supported " - "chips: '''%d'''\n\n{| border=\"0\" valign=\"top\"\n" - "| valign=\"top\"|\n\n%s", chipcount, chip_th); + /* +1 to force the resulting number of columns to be < cols */ + lines_per_col = chipcount / cols + ((chipcount%cols) > 0 ? 1 : 0); + + printf("\n== Supported chips ==\n\nTotal amount of supported chips: '''%d'''\n\n" + "{| border=\"0\" valign=\"top\"\n", chipcount); - for (f = flashchips; f->name != NULL; f++, i++) { + for (f = flashchips; f->name != NULL; f++) { /* Don't print generic entries. */ if (!strncmp(f->vendor, "Unknown", 7) || !strncmp(f->vendor, "Programmer", 10) || !strncmp(f->name, "unknown", 7)) continue; + if ((i % lines_per_col) == 0) + printf("%s%s", th_start, chip_th); + /* Alternate colors if the vendor changes. */ if (old != NULL && strcmp(old->vendor, f->vendor)) c = !c; + old = f; t = f->tested; s = flashbuses_to_text(f->bustype); sprintf(vmin, "%0.03f", f->voltage.min / (double)1000); @@ -267,16 +292,14 @@ f->voltage.min ? vmax : "N/A"); free(s); - /* Split table into 'cols' columns. */ - if (i >= (chipcount / cols + 1)) { - printf("\n|}\n\n| valign=\"top\"|\n\n%s", chip_th); - i = 0; - } - - old = f; + if (((i % lines_per_col) + 1) == lines_per_col) + printf("\n|}\n\n"); + i++; } - - printf("\n|}\n\n|}\n"); + /* end inner table if it did not fill the last column fully */ + if (((i % lines_per_col)) > 0) + printf("\n|}\n\n"); + printf("|}\n\n"); } /* Not needed for CONFIG_INTERNAL, but for all other PCI-based programmers. */ @@ -309,7 +332,8 @@ print_supported_chipsets_wiki(3); print_supported_boards_wiki(); #endif - printf("%s", programmer_section); + printf("%s%s%s", programmer_intro, th_start, programmer_th); + #if CONFIG_NIC3COM == 1 print_supported_pcidevs_wiki(nics_3com); #endif @@ -343,6 +367,6 @@ #if CONFIG_SATAMV == 1 print_supported_pcidevs_wiki(satas_mv); #endif - printf("\n|}\n"); + printf("\n|}\n\n|}\n"); } From stefan.tauner at student.tuwien.ac.at Sun Jul 29 04:07:06 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sun, 29 Jul 2012 04:07:06 +0200 Subject: [flashrom] [PATCH 5/7] squash! print_wiki.c fix columns calculations In-Reply-To: <1330805475-19732-6-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-6-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <201207290207.q6T276o7003551@mail2.student.tuwien.ac.at> On Sat, 3 Mar 2012 21:11:13 +0100 Stefan Tauner wrote: > - chips > > Signed-off-by: Stefan Tauner > --- > print_wiki.c | 30 ++++++++++++++++++------------ > 1 files changed, 18 insertions(+), 12 deletions(-) refined, combined with the other two and committed in r1556. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Sun Jul 29 04:07:08 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sun, 29 Jul 2012 04:07:08 +0200 Subject: [flashrom] [PATCH 4/7] squash! print_wiki.c fix columns calculations In-Reply-To: <1330805475-19732-5-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-5-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <201207290207.q6T278NS003566@mail2.student.tuwien.ac.at> On Sat, 3 Mar 2012 21:11:12 +0100 Stefan Tauner wrote: > - boards > > Signed-off-by: Stefan Tauner > --- > print_wiki.c | 26 ++++++++++++++++---------- > 1 files changed, 16 insertions(+), 10 deletions(-) refined, combined with the other two and committed in r1556. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Sun Jul 29 04:07:09 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Sun, 29 Jul 2012 04:07:09 +0200 Subject: [flashrom] [PATCH 3/7] print_wiki.c fix columns calculations In-Reply-To: <1330805475-19732-4-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1330805475-19732-1-git-send-email-stefan.tauner@student.tuwien.ac.at> <1330805475-19732-4-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <201207290207.q6T279Go003579@mail2.student.tuwien.ac.at> On Sat, 3 Mar 2012 21:11:11 +0100 Stefan Tauner wrote: > - chipsets > > Signed-off-by: Stefan Tauner > --- > print_wiki.c | 36 +++++++++++++++++++++++------------- > 1 files changed, 23 insertions(+), 13 deletions(-) refined, combined with the other two and committed in r1556. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 30 05:15:04 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 05:15:04 +0200 Subject: [flashrom] [PATCH] remove exit calls from sp_sync_read_timeout and sp_synchronize In-Reply-To: <1338583198-12930-1-git-send-email-niso@kth.se> References: <1338583198-12930-1-git-send-email-niso@kth.se> Message-ID: <201207300315.q6U3F4Bx017890@mail2.student.tuwien.ac.at> On Fri, 1 Jun 2012 22:39:58 +0200 Niklas S?derlund wrote: > Add return values to sp_synchronize so we can signal a failure to the > only upstream caller, which is prepared to propagate a failure. > > The addition of a return code to signal a failure from the read syscall > in sp_sync_read_timeout is a bit of a stretch and might look strange. > But the only caller is in the loop in sp_synchronize and any sequential > call to read will result in the same error and end result. But please > take a extra look on this to make sure we don't miss any corner case. > > The alternative would be to differentiate between a read failure over > fast detection of a EAGAIN. The end result would in my opinion only make > the code harder to read. The cost is that upon read failure the user > might be spammed up to 10 times with the same error message before > flashrom dies. Hello Niklas, i am making progress in reviewing your exit-removal patches (thx!), but this one bugs me a bit. First of all i have to admit, that i dont fully understand your commit log. You are talking about an additional return code in sp_sync_read_timeout that "might look strange" although there is non. i dont get the start of the last paragraph either, but at least the last sentence is pretty clear. the removal of exits should not change the output in general, and in this case i think so too. spamming the user just because the code would be a bit ugly is not an option. could you please rephrase your thoughts on how to solve this. we can then discuss if it is viable. i played with the code myself a bit, and couldnt come up with something non-ugly and working either. :/ -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 30 05:15:52 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 05:15:52 +0200 Subject: [flashrom] Creating a nonprofit In-Reply-To: <4FCE5927.8050203@gmx.net> References: <4FCE5927.8050203@gmx.net> Message-ID: <201207300315.q6U3FqBg018067@mail2.student.tuwien.ac.at> ping -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From roxmail at list.ru Mon Jul 30 19:25:04 2012 From: roxmail at list.ru (Roman Elshin) Date: Mon, 30 Jul 2012 21:25:04 +0400 Subject: [flashrom] AT25DF321A with ASRock 880G Pro3 MB In-Reply-To: <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> References: <1342203122.3126.16.camel@Lenovo> <201207162003.q6GK3P4w028221@mail2.student.tuwien.ac.at> Message-ID: <1343669104.2765.2.camel@Lenovo> > thanks for your report! I have marked the flash chip as fully tested > and will commit that later together with other small changes. It silent now:), thanks for your work! From svn at flashrom.org Mon Jul 30 21:42:38 2012 From: svn at flashrom.org (repository service) Date: Mon, 30 Jul 2012 21:42:38 +0200 Subject: [flashrom] [commit] r1557 - trunk Message-ID: Author: stefanct Date: Mon Jul 30 21:42:33 2012 New Revision: 1557 URL: http://flashrom.org/trac/flashrom/changeset/1557 Log: Remove more exit calls. This patch removes the remaining exit calls from - sp_openserport - sp_opensocket - sp_docommand - internal_init Almost all of this was done by Niklas. Signed-off-by: Niklas S?derlund Signed-off-by: Stefan Tauner Acked-by: Stefan Tauner Modified: trunk/buspirate_spi.c trunk/internal.c trunk/pony_spi.c trunk/serial.c trunk/serprog.c Modified: trunk/buspirate_spi.c ============================================================================== --- trunk/buspirate_spi.c Sun Jul 29 04:04:21 2012 (r1556) +++ trunk/buspirate_spi.c Mon Jul 30 21:42:33 2012 (r1557) @@ -39,7 +39,8 @@ { /* 115200bps, 8 databits, no parity, 1 stopbit */ sp_fd = sp_openserport(dev, 115200); - /* FIXME: Error checking */ + if (sp_fd < 0) + return 1; return 0; } #else Modified: trunk/internal.c ============================================================================== --- trunk/internal.c Sun Jul 29 04:04:21 2012 (r1556) +++ trunk/internal.c Mon Jul 30 21:42:33 2012 (r1557) @@ -299,7 +299,7 @@ msg_perr("Proceeding anyway because user forced us to.\n"); } else { msg_perr("Aborting.\n"); - exit(1); + return 1; } } Modified: trunk/pony_spi.c ============================================================================== --- trunk/pony_spi.c Sun Jul 29 04:04:21 2012 (r1556) +++ trunk/pony_spi.c Mon Jul 30 21:42:33 2012 (r1557) @@ -99,6 +99,10 @@ if (arg && strlen(arg)) { sp_fd = sp_openserport( arg, 9600 ); + if (sp_fd < 0) { + free(arg); + return 1; + } have_device++; } free(arg); Modified: trunk/serial.c ============================================================================== --- trunk/serial.c Sun Jul 29 04:04:21 2012 (r1556) +++ trunk/serial.c Mon Jul 30 21:42:33 2012 (r1557) @@ -113,8 +113,10 @@ (tolower((unsigned char)dev[1]) == 'o') && (tolower((unsigned char)dev[2]) == 'm')) { dev2 = malloc(strlen(dev) + 5); - if (!dev2) - sp_die("Error: Out of memory"); + if (!dev2) { + msg_perr("Error: Out of memory: %s\n", strerror(errno)); + return -1; + } strcpy(dev2, "\\\\.\\"); strcpy(dev2 + 4, dev); } @@ -123,11 +125,13 @@ if (dev2 != dev) free(dev2); if (fd == INVALID_HANDLE_VALUE) { - sp_die("Error: cannot open serial port"); + msg_perr("Error: cannot open serial port: %s\n", strerror(errno)); + return -1; } DCB dcb; if (!GetCommState(fd, &dcb)) { - sp_die("Error: Could not fetch serial port configuration"); + msg_perr("Error: Could not fetch serial port configuration: %s\n", strerror(errno)); + return -1; } switch (baud) { case 9600: dcb.BaudRate = CBR_9600; break; @@ -135,29 +139,32 @@ case 38400: dcb.BaudRate = CBR_38400; break; case 57600: dcb.BaudRate = CBR_57600; break; case 115200: dcb.BaudRate = CBR_115200; break; - default: sp_die("Error: Could not set baud rate"); + default: msg_perr("Error: Could not set baud rate: %s\n", strerror(errno)); + return -1; } dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(fd, &dcb)) { - sp_die("Error: Could not change serial port configuration"); + msg_perr("Error: Could not change serial port configuration: %s\n", strerror(errno)); + return -1; } return fd; #else struct termios options; int fd, i; fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd < 0) - sp_die("Error: cannot open serial port"); + if (fd < 0) { + msg_perr("Error: cannot open serial port: %s\n", strerror(errno)); + return -1; + } fcntl(fd, F_SETFL, 0); tcgetattr(fd, &options); for (i = 0;; i++) { if (sp_baudtable[i].baud == 0) { close(fd); - msg_perr("Error: cannot configure for baudrate %d\n", - baud); - exit(1); + msg_perr("Error: cannot configure for baudrate %d\n", baud); + return -1; } if (sp_baudtable[i].baud == baud) { cfsetispeed(&options, sp_baudtable[i].flag); Modified: trunk/serprog.c ============================================================================== --- trunk/serprog.c Sun Jul 29 04:04:21 2012 (r1556) +++ trunk/serprog.c Mon Jul 30 21:42:33 2012 (r1557) @@ -110,20 +110,25 @@ int sock; msg_pdbg(MSGHEADER "IP %s port %d\n", ip, port); sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); - if (sock < 0) - sp_die("Error: serprog cannot open socket"); + if (sock < 0) { + msg_perr("Error: serprog cannot open socket: %s\n", strerror(errno)); + return -1; + } hostPtr = gethostbyname(ip); if (NULL == hostPtr) { hostPtr = gethostbyaddr(ip, strlen(ip), AF_INET); - if (NULL == hostPtr) - sp_die("Error: cannot resolve"); + if (NULL == hostPtr) { + msg_perr("Error: cannot resolve %s\n", ip); + return -1; + } } sp.si.sin_family = AF_INET; sp.si.sin_port = htons(port); (void)memcpy(&sp.si.sin_addr, hostPtr->h_addr, hostPtr->h_length); if (connect(sock, &sp.s, sizeof(sp.si)) < 0) { close(sock); - sp_die("Error: serprog cannot connect"); + msg_perr("Error: serprog cannot connect: %s\n", strerror(errno)); + return -1; } /* We are latency limited, and sometimes do write-write-read * * (write-n) - so enable TCP_NODELAY. */ @@ -233,17 +238,23 @@ unsigned char c; if (sp_automatic_cmdcheck(command)) return 1; - if (write(sp_fd, &command, 1) != 1) - sp_die("Error: cannot write op code"); - if (write(sp_fd, params, parmlen) != (parmlen)) - sp_die("Error: cannot write parameters"); - if (read(sp_fd, &c, 1) != 1) - sp_die("Error: cannot read from device"); + if (write(sp_fd, &command, 1) != 1) { + msg_perr("Error: cannot write op code: %s\n", strerror(errno)); + return 1; + } + if (write(sp_fd, params, parmlen) != (parmlen)) { + msg_perr("Error: cannot write parameters: %s\n", strerror(errno)); + return 1; + } + if (read(sp_fd, &c, 1) != 1) { + msg_perr("Error: cannot read from device: %s\n", strerror(errno)); + return 1; + } if (c == S_NAK) return 1; if (c != S_ACK) { - msg_perr("Error: invalid response 0x%02X from device\n",c); - exit(1); + msg_perr("Error: invalid response 0x%02X from device\n", c); + return 1; } if (retlen) { int rd_bytes = 0; @@ -251,8 +262,10 @@ int r; r = read(sp_fd, retparms + rd_bytes, retlen - rd_bytes); - if (r <= 0) - sp_die("Error: cannot read return parameters"); + if (r <= 0) { + msg_perr("Error: cannot read return parameters: %s\n", strerror(errno)); + return 1; + } rd_bytes += r; } while (rd_bytes != retlen); } @@ -362,6 +375,10 @@ } if (strlen(device)) { sp_fd = sp_openserport(device, atoi(baudport)); + if (sp_fd < 0) { + free(device); + return 1; + } have_device++; } } @@ -395,6 +412,10 @@ } if (strlen(device)) { sp_fd = sp_opensocket(device, atoi(baudport)); + if (sp_fd < 0) { + free(device); + return 1; + } have_device++; } } @@ -466,11 +487,12 @@ "bustype is SPI\n"); return 1; } + if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL)) + return 1; /* Success of any of these commands is optional. We don't need the programmer to tell us its limits, but if it doesn't, we will assume stuff, so it's in the programmers best interest to tell us. */ - sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL); if (!sp_docommand(S_CMD_Q_WRNMAXLEN, 0, NULL, 3, rbuf)) { uint32_t v; v = ((unsigned int)(rbuf[0]) << 0); @@ -492,7 +514,8 @@ msg_pdbg(MSGHEADER "Maximum read-n length is %d\n", v); } bt = serprog_buses_supported; - sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL); + if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL)) + return 1; } if (serprog_buses_supported & BUS_NONSPI) { From stefan.tauner at student.tuwien.ac.at Mon Jul 30 21:44:31 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 21:44:31 +0200 Subject: [flashrom] [PATCH] remove exit call from internal_init In-Reply-To: References: <1338403716-7809-1-git-send-email-niso@kth.se> Message-ID: <201207301944.q6UJiVME028178@mail2.student.tuwien.ac.at> On Wed, 30 May 2012 12:24:19 -0700 David Hendricks wrote: > This seems trivial, as internal_init() already does the right thing when a > return value is used here. indeed. thanks niklas! i have applied it in r1557. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 30 22:05:22 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 22:05:22 +0200 Subject: [flashrom] [PATCH] remove exit calls from sp_opensocket In-Reply-To: <1338579077-7193-1-git-send-email-niso@kth.se> References: <1338579077-7193-1-git-send-email-niso@kth.se> Message-ID: <201207302005.q6UK5MI8011511@mail2.student.tuwien.ac.at> On Fri, 1 Jun 2012 21:31:17 +0200 Niklas S?derlund wrote: > Replace with return statements and adopt the only upstream caller which > in turn all plumbing is place for > > Signed-off-by: Niklas S?derlund > --- > serprog.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/serprog.c b/serprog.c > index d06fb0b..02996ea 100644 > --- a/serprog.c > +++ b/serprog.c > @@ -110,20 +110,25 @@ static int sp_opensocket(char *ip, unsigned int port) > int sock; > msg_pdbg(MSGHEADER "IP %s port %d\n", ip, port); > sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); > - if (sock < 0) > - sp_die("Error: serprog cannot open socket"); > + if (sock < 0) { > + msg_perr("Error: serprog cannot open socket: %s\n", strerror(errno)); > + return -1; > + } > hostPtr = gethostbyname(ip); > if (NULL == hostPtr) { > hostPtr = gethostbyaddr(ip, strlen(ip), AF_INET); > - if (NULL == hostPtr) > - sp_die("Error: cannot resolve"); > + if (NULL == hostPtr) { > + msg_perr("Error: cannot resolve: %s\n", strerror(errno)); i changed this to msg_perr("Error: cannot resolve %s\n", ip); because errno is not set correctly by gethostbyaddr (which is obsolete and should be replaced anyway). > + return -1; > + } > } > sp.si.sin_family = AF_INET; > sp.si.sin_port = htons(port); > (void)memcpy(&sp.si.sin_addr, hostPtr->h_addr, hostPtr->h_length); btw: this does explode spectacularly (not your fault, niklas, of course). i think i kept the rest as is. thanks, niklas! applied in r1557. -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 30 22:10:43 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 22:10:43 +0200 Subject: [flashrom] [PATCHv2] remove exit calls from sp_openserport In-Reply-To: <1338326379-17523-1-git-send-email-niso@kth.se> References: <1338321175-12543-1-git-send-email-niso@kth.se> <1338326379-17523-1-git-send-email-niso@kth.se> Message-ID: <201207302010.q6UKAhId016421@mail2.student.tuwien.ac.at> On Tue, 29 May 2012 23:19:39 +0200 Niklas S?derlund wrote: > Instead: > - Print same error message as before but use msg_perr instead of perror > - Return -1 instead of calling exit(1) > > All callers of sp_openserport where able to handle this change without > much trouble. There already where other error cases that where taken > care of, so adding one more will not change behavior of there callers. > > Signed-off-by: Niklas S?derlund thanks! Acked-by: Stefan Tauner and applied in r1557 -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From stefan.tauner at student.tuwien.ac.at Mon Jul 30 22:16:44 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Mon, 30 Jul 2012 22:16:44 +0200 Subject: [flashrom] [PATCH] remove exit calls from sp_docommand In-Reply-To: <1338970680-11317-1-git-send-email-niso@kth.se> References: <1338970680-11317-1-git-send-email-niso@kth.se> Message-ID: <201207302016.q6UKGigt020814@mail2.student.tuwien.ac.at> On Wed, 6 Jun 2012 10:18:00 +0200 Niklas S?derlund wrote: > @@ -491,7 +499,8 @@ int serprog_init(void) > the programmer to tell us its limits, but if it doesn't, we > will assume stuff, so it's in the programmers best interest > to tell us. */ > - sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL); > + if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL)) > + return 1; > if (!sp_docommand(S_CMD_Q_WRNMAXLEN, 0, NULL, 3, rbuf)) { > uint32_t v; > v = ((unsigned int)(rbuf[0]) << 0); > @@ -513,7 +522,8 @@ int serprog_init(void) > msg_pdbg(MSGHEADER "Maximum read-n length is %d\n", v); > } > bt = serprog_buses_supported; > - sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL); > + if (sp_docommand(S_CMD_S_BUSTYPE, 1, &bt, 0, NULL)) > + return 1; > } those calls actually change the behavior, because it was previously ok if they fail (which is arguably correct), i decided to change them anyway because the if before guards older correct implementations against this anyway. i just moved the first one above the comment because it would contradict it otherwise. thanks! Acked-by: Stefan Tauner and applied in r1557 -- Kind regards/Mit freundlichen Gr??en, Stefan Tauner From jakllsch at kollasch.net Tue Jul 31 02:41:13 2012 From: jakllsch at kollasch.net (Jonathan A. Kollasch) Date: Mon, 30 Jul 2012 19:41:13 -0500 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <500C9F68.9040106@gmx.net> References: <4FEE4625.10606@gmx.net> <4FF837DB.7010704@gmx.net> <4FFD24DC.7030707@gmx.net> <500C3DA9.8010202@gmx.net> <500C9F68.9040106@gmx.net> Message-ID: <20120731004113.GA32579@tazenda.kollasch.net> On Mon, Jul 23, 2012 at 02:48:40AM +0200, Carl-Daniel Hailfinger wrote: > Build ich_descriptors_tool by default on x86. (Patch by Stefan Tauner) > +ifeq ($(ARCH), x86) > + @+make -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX) > +endif > + > $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) > $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) > > @@ -569,6 +607,7 @@ > # We don't use EXEC_SUFFIX here because we want to clean everything. > clean: > rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d > + @+make -C util/ich_descriptors_tool/ clean This will invoke a non-GNU make on at least some non-GNU platforms, such as the various BSDs. Please use "$(MAKE)" instead of "make". From c-d.hailfinger.devel.2006 at gmx.net Tue Jul 31 09:05:34 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Tue, 31 Jul 2012 09:05:34 +0200 Subject: [flashrom] [PATCH] Portability fixes In-Reply-To: <20120731004113.GA32579@tazenda.kollasch.net> References: <4FEE4625.10606@gmx.net> <4FF837DB.7010704@gmx.net> <4FFD24DC.7030707@gmx.net> <500C3DA9.8010202@gmx.net> <500C9F68.9040106@gmx.net> <20120731004113.GA32579@tazenda.kollasch.net> Message-ID: <501783BE.8040107@gmx.net> Am 31.07.2012 02:41 schrieb Jonathan A. Kollasch: > On Mon, Jul 23, 2012 at 02:48:40AM +0200, Carl-Daniel Hailfinger wrote: >> Build ich_descriptors_tool by default on x86. (Patch by Stefan Tauner) >> +ifeq ($(ARCH), x86) >> + @+make -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX) >> +endif >> + >> $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) >> $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) >> >> @@ -569,6 +607,7 @@ >> # We don't use EXEC_SUFFIX here because we want to clean everything. >> clean: >> rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d >> + @+make -C util/ich_descriptors_tool/ clean > This will invoke a non-GNU make on at least some non-GNU platforms, such > as the various BSDs. Please use "$(MAKE)" instead of "make". Thanks, fixed locally. Regards, Carl-Daniel -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Tue Jul 31 09:27:47 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Tue, 31 Jul 2012 09:27:47 +0200 Subject: [flashrom] flashrom -p gfxnvidia detect my atheros ath9k wifi card In-Reply-To: <500B67DD.6050200@gmx.net> References: <1340668392.5392.1.camel@gnutoo-desktop> <4FEAB0B8.8080102@gmx.net> <1340908130.3513.0.camel@gnutoo-desktop> <4FEE3CFC.6090909@gmx.net> <1342296285.5539.74.camel@localhost> <50051179.9040202@gmx.net> <1342879362.7422.12.camel@localhost> <500B67DD.6050200@gmx.net> Message-ID: <501788F3.5070708@gmx.net> Ping? IMHO this patch fixes a few structural problems, and although it probably isn't the final desired result, it is a step in the right direction. Regards, Carl-Daniel Am 22.07.2012 04:39 schrieb Carl-Daniel Hailfinger: > Am 21.07.2012 16:02 schrieb Michael Karcher: >> Am Dienstag, den 17.07.2012, 09:17 +0200 schrieb Carl-Daniel Hailfinger: >> >>> Second patch in the series. Error checking has not changed at all, and I >>> intend to fix that in a second spin of this patch. Right now I just want >>> to check if we're on the same page. > Actually, I plan to commit the error checking change separately because > Niklas S?derlund already sent a patch doing that. > > >>> Signed-off-by: Carl-Daniel Hailfinger >>> -struct pci_dev *pcidev_dev = NULL; >> Yeah! >> >>> if ((addr = pcidev_readbar(dev, bar)) != 0) { >>> - curaddr = addr; >>> - pcidev_dev = dev; >>> + found_dev = dev; >>> found++; >>> } >> I wonder what to do about this: While the goal of my suggestion was to >> decouple BAR access from the PCI device scan, it is an integral part of >> the scan loop, probably to avoid disabled chips (e.g. for onboard >> components that are not used). > Intel dual port NICs are represented by two PCI devices, but only one of > them has an active BAR for our purposes. It would be unfair of us to > have users guess the right PCI device. > > >> The nice property of the code as-is is >> that you can be sure reading the "primary" BAR will not fail. >> >> As we sometimes need two BARs, having one valid BAR does not mean the >> device is necessarily usable for us, so this check is only half of what >> we need. As already discussed on IRC, passing a set of BARs into this >> function is not really the direction we want to head to, so client code >> needs to be prepared to find unusable BARs anyway. Still, we like >> autoskip. Several ideas come to my mind >> [...] >> All of these approaches of course complicate pcidev_init, but it seems >> like the only choices we have is: >> - do the BAR check the right way (TM) >> - lose the autoskip of disabled PCI devices -- http://www.hailfinger.org/ From c-d.hailfinger.devel.2006 at gmx.net Tue Jul 31 20:39:08 2012 From: c-d.hailfinger.devel.2006 at gmx.net (Carl-Daniel Hailfinger) Date: Tue, 31 Jul 2012 20:39:08 +0200 Subject: [flashrom] Tagging flashrom 0.9.6 Message-ID: <5018264C.8030605@gmx.net> I plan to tag and release flashrom 0.9.6 Real Soon Now (tm). If you need anything merged, tell me NOW. flashrom svn HEAD doesn't have any known regressions compared to 0.9.5, so it seems stable enough to ship. Regards, Carl-Daniel -- http://www.hailfinger.org/ From stefan.tauner at student.tuwien.ac.at Tue Jul 31 20:52:57 2012 From: stefan.tauner at student.tuwien.ac.at (Stefan Tauner) Date: Tue, 31 Jul 2012 20:52:57 +0200 Subject: [flashrom] [PATCH] Fix VIA VX*** support. In-Reply-To: <1343100663-21461-1-git-send-email-stefan.tauner@student.tuwien.ac.at> References: <1343100663-21461-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Message-ID: <1343760777-6313-1-git-send-email-stefan.tauner@student.tuwien.ac.at> Helge Wagner's patch that added VIA VX900 chipset support made me look closer at the datasheets which led to some concise documentation about newer VIA chipsets: http://flashrom.org/VIA Based on that this patch adds full support for VX800/VX820, VX855/VX875 and VX900, including SPI and LPC. VT8237S was not changed (SPI support only) because there is no public datasheet and it is not clear how to distinguish between LPC and SPI strapping and investigations in (NDAed) documents have not brought up anything conclusively. enable_flash_vt823x could probably be enhanced too due to various yet ignored LPC options of the chipset. Signed-off-by: Helge Wagner Signed-off-by: Stefan Tauner --- New version with tiny changes for 0.9.6... test status is NT and arguable... but since there are so few VIA users out there anyway i think we wont get too many mails anyway. chipset_enable.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++------- ichspi.c | 11 +++----- programmer.h | 2 +- 3 files changed, 75 insertions(+), 18 deletions(-) diff --git a/chipset_enable.c b/chipset_enable.c index 936d7b8..0974427 100644 --- a/chipset_enable.c +++ b/chipset_enable.c @@ -6,6 +6,7 @@ * Copyright (C) 2006 Uwe Hermann * Copyright (C) 2007,2008,2009 Carl-Daniel Hailfinger * Copyright (C) 2009 Kontron Modular Computers GmbH + * Copyright (C) 2011, 2012 Stefan Tauner * * 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 @@ -508,12 +509,6 @@ static int enable_flash_tunnelcreek(struct pci_dev *dev, const char *name) return ret; } -static int enable_flash_vt8237s_spi(struct pci_dev *dev, const char *name) -{ - /* Do we really need no write enable? */ - return via_init_spi(dev); -} - static int enable_flash_ich_dc_spi(struct pci_dev *dev, const char *name, enum ich_chipset ich_generation) { @@ -681,16 +676,80 @@ static int enable_flash_vt823x(struct pci_dev *dev, const char *name) return -1; } - if (dev->device_id == 0x3227) { /* VT8237R */ + if (dev->device_id == 0x3227) { /* VT8237 */ /* All memory cycles, not just ROM ones, go to LPC. */ val = pci_read_byte(dev, 0x59); val &= ~0x80; rpci_write_byte(dev, 0x59, val); } + internal_buses_supported = BUS_LPC | BUS_FWH; return 0; } +static int enable_flash_vt_vx(struct pci_dev *dev, const char *name) +{ + struct pci_dev *south_north = pci_dev_find(0x1106, 0xa353); + if (south_north == NULL) { + msg_perr("Could not find South-North Module Interface Control device!\n"); + return ERROR_FATAL; + } + + msg_pdbg("Strapped to "); + if ((pci_read_byte(south_north, 0x56) & 0x01) == 0) { + msg_pdbg("LPC.\n"); + return enable_flash_vt823x(dev, name); + } + msg_pdbg("SPI.\n"); + + uint32_t mmio_base; + void *mmio_base_physmapped; + uint32_t spi_cntl; + #define SPI_CNTL_LEN 0x08 + uint32_t spi0_mm_base = 0; + switch(dev->device_id) { + case 0x8353: /* VX800/VX820 */ + spi0_mm_base = pci_read_long(dev, 0xbc) << 8; + break; + case 0x8409: /* VX855/VX875 */ + case 0x8410: /* VX900 */ + mmio_base = pci_read_long(dev, 0xbc) << 8; + mmio_base_physmapped = physmap("VIA VX MMIO register", mmio_base, SPI_CNTL_LEN); + if (mmio_base_physmapped == ERROR_PTR) { + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + return ERROR_FATAL; + } + + /* Offset 0 - Bit 0 holds SPI Bus0 Enable Bit. */ + spi_cntl = mmio_readl(mmio_base_physmapped) + 0x00; + if ((spi_cntl & 0x01) == 0) { + msg_pdbg ("SPI Bus0 disabled!\n"); + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + return ERROR_FATAL; + } + /* Offset 1-3 has SPI Bus Memory Map Base Address: */ + spi0_mm_base = spi_cntl & 0xFFFFFF00; + + /* Offset 4 - Bit 0 holds SPI Bus1 Enable Bit. */ + spi_cntl = mmio_readl(mmio_base_physmapped) + 0x04; + if ((spi_cntl & 0x01) == 1) + msg_pdbg2("SPI Bus1 is enabled too.\n"); + + physunmap(mmio_base_physmapped, SPI_CNTL_LEN); + break; + default: + msg_perr("%s: Unsupported chipset %x:%x!\n", __func__, dev->vendor_id, dev->device_id); + return ERROR_FATAL; + } + + return via_init_spi(dev, spi0_mm_base); +} + +static int enable_flash_vt8237s_spi(struct pci_dev *dev, const char *name) +{ + return via_init_spi(dev, pci_read_long(dev, 0xbc) << 8); +} + static int enable_flash_cs5530(struct pci_dev *dev, const char *name) { uint8_t reg8; @@ -1263,7 +1322,7 @@ const struct penable chipset_enables[] = { {0x1106, 0x0586, OK, "VIA", "VT82C586A/B", enable_flash_amd8111}, {0x1106, 0x0596, OK, "VIA", "VT82C596", enable_flash_amd8111}, {0x1106, 0x0686, OK, "VIA", "VT82C686A/B", enable_flash_amd8111}, - {0x1106, 0x3074, OK, "VIA", "VT8233", enable_flash_vt823x}, + {0x1106, 0x3074, OK, "VIA", "VT8233/VT8237R", enable_flash_vt823x}, {0x1106, 0x3147, OK, "VIA", "VT8233A", enable_flash_vt823x}, {0x1106, 0x3177, OK, "VIA", "VT8235", enable_flash_vt823x}, {0x1106, 0x3227, OK, "VIA", "VT8237", enable_flash_vt823x}, @@ -1271,8 +1330,9 @@ const struct penable chipset_enables[] = { {0x1106, 0x3372, OK, "VIA", "VT8237S", enable_flash_vt8237s_spi}, {0x1106, 0x8231, NT, "VIA", "VT8231", enable_flash_vt823x}, {0x1106, 0x8324, OK, "VIA", "CX700", enable_flash_vt823x}, - {0x1106, 0x8353, OK, "VIA", "VX800/VX820", enable_flash_vt8237s_spi}, - {0x1106, 0x8409, OK, "VIA", "VX855/VX875", enable_flash_vt823x}, + {0x1106, 0x8353, NT, "VIA", "VX800/VX820", enable_flash_vt_vx}, + {0x1106, 0x8409, NT, "VIA", "VX855/VX875", enable_flash_vt_vx}, + {0x1106, 0x8410, NT, "VIA", "VX900", enable_flash_vt_vx}, {0x1166, 0x0200, OK, "Broadcom", "OSB4", enable_flash_osb4}, {0x1166, 0x0205, OK, "Broadcom", "HT-1000", enable_flash_ht1000}, {0x17f3, 0x6030, OK, "RDC", "R8610/R3210", enable_flash_rdc_r8610}, diff --git a/ichspi.c b/ichspi.c index 0223ae3..44d659b 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1844,19 +1844,16 @@ static const struct spi_programmer spi_programmer_via = { .write_aai = default_spi_write_aai, }; -int via_init_spi(struct pci_dev *dev) +int via_init_spi(struct pci_dev *dev, uint32_t mmio_base) { - uint32_t mmio_base; int i; - mmio_base = (pci_read_long(dev, 0xbc)) << 8; - msg_pdbg("MMIO base at = 0x%x\n", mmio_base); - ich_spibar = physmap("VT8237S MMIO registers", mmio_base, 0x70); + ich_spibar = physmap("VIA SPI MMIO registers", mmio_base, 0x70); + /* Do we really need no write enable? Like the LPC one at D17F0 0x40 */ - /* Not sure if it speaks all these bus protocols. */ - internal_buses_supported = BUS_LPC | BUS_FWH; ich_generation = CHIPSET_ICH7; register_spi_programmer(&spi_programmer_via); + internal_buses_supported = BUS_SPI; msg_pdbg("0x00: 0x%04x (SPIS)\n", mmio_readw(ich_spibar + 0)); msg_pdbg("0x02: 0x%04x (SPIC)\n", mmio_readw(ich_spibar + 2)); diff --git a/programmer.h b/programmer.h index 5109ed9..ec29ed8 100644 --- a/programmer.h +++ b/programmer.h @@ -561,7 +561,7 @@ enum ich_chipset { extern uint32_t ichspi_bbar; int ich_init_spi(struct pci_dev *dev, uint32_t base, void *rcrb, enum ich_chipset ich_generation); -int via_init_spi(struct pci_dev *dev); +int via_init_spi(struct pci_dev *dev, uint32_t mmio_base); /* it85spi.c */ int it85xx_spi_init(struct superio s); -- Kind regards, Stefan Tauner