From flashrom
Jump to navigation Jump to search

I've no code in flashrom yet, but I made a flashrom compatible arduino programmer and participated in testing and documentation.

My hardware

Mainboard based programmers

Device or programmer Flash chip Test result
M4A785T-M mainboard W25x80 (DIP8)
  • Yes with the BIOS
  • Yes with coreboot
X60 with coreboot MX25L1605
  • Yes with coreboot.
  • Yes with coreboot.
  • Yes with coreboot
T60 MX25L1605D/MX25L1608D
  • Yes with coreboot
  • Yes with coreboot
  • Yes with the recovery LPC dongle

External programmers

  • Arduino uno and duemillanove (serprog based) => 5v only, which is problematic
  • openmoko debug board (FTDI based) => works fine
  • (really old) 3com Nic => works fine
  • some (really really old) reaktek cards but without chip on them.
  • linux_spi compatible hardwre... => works fine too so far...
  • An atahpt that doesn't work when adding its PCI IDs(but atahpt are known not to work according to the mailing list)
  • A very old AGP Nvidia card => works with a patch
  • A recent geforce 210 that didn't work when adding the PCI IDs

I've also the following hardware:

  • pomona clip for recovering my x60
  • some chips(2MB SO8(currently soldered), 16MB SO8)

Work in progress for the wiki

Don't try that, it's dangerous!!!!

Howto(Dangerous, not ready for the wiki)

Howto flash sgabios on an Nvidia video card

Use case

  • Servers often lack a screen.
  • Some blind people also lack a way to see the startup of the computer until the braille tablet is running.

This Howto will help you transform your Nvidia video card in a something that send to a serial port what would have been displayed on the screen. The card will probably stop working as a graphic card due to the lack of VGA option rom tailored to the card.

The user is expected to see the output trough a serial console.


Here's an example on how to flash sgabios on an Nvidia video card:

  • download flashrom
  • apply that patch:
diff --git a/gfxnvidia.c b/gfxnvidia.c
index d0a9feb..35e4687 100644
--- a/gfxnvidia.c
+++ b/gfxnvidia.c
@@ -110,7 +110,7 @@ int gfxnvidia_init(void)
        rpci_write_long(dev, 0x50, reg32);
        /* Write/erase doesn't work. */
-       programmer_may_write = 0;
+       //programmer_may_write = 0;
        register_par_programmer(&par_programmer_gfxnvidia, BUS_PARALLEL);
        return 0;
  • compile it
  • download and build sgabios
  • Identify your flash chip size by running:
flashrom -pgfxnvidia
  • save the content of the chip with:
flashrom -pgfxnvidia -r original.rom
  • pad sgabios to the size of your flashchip:
dd if=/dev/zero of=sgabios.rom bs=1 count=65536
dd if=10b79200.rom of=sgabios.rom conv=notrunc
  • flash it(and retry in case of failure, it has a high failure rate)

Howto flash ipxe on an 3com network card

Clone ipxe:

$ git clone git://

Then locate your network card with:

# lspci -nnnn

it will look like that:

00:0c.0 Ethernet controller [0200]: 3Com Corporation 3c905C-TX/TX-M [Tornado] [10b7:9200] (rev 78)

Note the pci ids that are here: [10b7:9200]

Ajust your settings in src/config/local/

Then build ipxe:

cd ipxe/src/
make bin/10b79200.rom

Then backup the existing rom:

cd ../../
flashrom -pnic3com -r 3com_rom_backup.rom

The flashchip size is written in the output of that command.

Then generate a rom that is exactly the size of your rom chip:

dd if=/dev/zero of=bin/10b79200.rom.64k bs=1 count=65536
dd if=bin/10b79200.rom of=bin/10b79200.rom.64k conv=notrunc