-------------------------------------------------------------------------------
Flashrom README
-------------------------------------------------------------------------------

Flashrom is a universal flash programming utility for DIP, PLCC, or SPI
flash ROM chips. It can be used to flash BIOS/coreboot/firmware images.

(see http://coreboot.org for details on coreboot)


Build Requirements
------------------

To build the flashrom utility you need to install the following packages:

* pciutils
* pciutils-devel / pciutils-dev / libpci-dev
* zlib-devel / zlib1g-dev


Usage
-----

 $ flashrom [-rwvEVfLhR] [-c chipname] [-s exclude_start] [-e exclude_end]
            [-m [vendor:]part] [-l file.layout] [-i imagename] [file]
   -r | --read:                      read flash and save into file
   -w | --write:                     write file into flash (default when
                                     file is specified)
   -v | --verify:                    verify flash against file
   -E | --erase:                     erase flash device
   -V | --verbose:                   more verbose output
   -c | --chip <chipname>:           probe only for specified flash chip
   -s | --estart <addr>:             exclude start position
   -e | --eend <addr>:               exclude end postion
   -m | --mainboard <[vendor:]part>: override mainboard settings
   -f | --force:                     force write without checking image
   -l | --layout <file.layout>:      read rom layout from file
   -i | --image <name>:              only flash image name from flash layout
   -L | --list-supported:            print supported devices
   -h | --help:                      print this help text
   -R | --version:                   print the version (release)

 If no file is specified, then all that happens
 is that flash info is dumped and the flash chip is set to writable.


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.


coreboot Table and Mainboard Identification
--------------------------------------------

Flashrom reads the coreboot table to determine the current mainboard
(parse DMI as well in future?). If no coreboot table could be read
or if you want to override these values, you can specify -m, e.g.:

 $ flashrom -w --mainboard AGAMI:ARUMA agami_aruma.rom

See the 'Supported mainboards' section in the output of 'flashrom -L' for
a list of boards which require the specification of the board name, if no
coreboot table is found.


ROM Layout Support
------------------

Flashrom supports ROM layouts. This allows you to flash certain parts of
the flash chip only. A ROM layout file looks like follows:

  00000000:00008fff gfxrom
  00009000:0003ffff normal
  00040000:0007ffff fallback

  i.e.:
  startaddr:endaddr name

  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:

  flashrom -w --layout rom.layout --image normal agami_aruma.rom
     
To update normal and fallback but leave the VGA BIOS alone, say:

  flashrom -w -l rom.layout -i normal -i fallback agami_aruma.rom
 
Currently overlapping sections are not supported.

ROM layouts should replace the -s and -e option since they are more 
flexible and they should lead to a ROM update file format with the 
ROM layout and the ROM image in one file (cpio, zip or something?).


Disk on Chip support
--------------------

Disk on Chip support was removed from flashrom in r3382. It had already
been disabled by default in flashrom for several years because the code
was considered unstable and incomplete. The products intended to work
have been End-Of-Lifed by the manufacturer for a long time.


Supported Flash Chips / Chipsets / Mainboards
---------------------------------------------

Please check the output of 'flashrom -L' for the list of supported
flash chips, chipsets/southbridges, and mainboards.

See also http://coreboot.org/Flashrom for more details.

