v1.4 (July 2024)¶
This document describes the major changes in flashrom version 1.4.0, from more than 400 patches contributed by more than 70 authors (thank you!) in the 18 months since version 1.3.0 was branched.
Download¶
flashrom 1.4 can be downloaded in various ways:
Anonymous checkout from the git repository at https://review.coreboot.org/flashrom.git (tag v1.4.0)
A tarball is available for download at https://download.flashrom.org/releases/flashrom-1.4.0.tar.xz (signature https://download.flashrom.org/releases/flashrom-1.4.0.tar.xz.asc)
fingerprint: 6E6E F9A0 BA47 8006 E277 6E4C C037 BB41 3134 D111
Known issue¶
AMD-based PCs with FCH are unable to read flash contents for internal (BIOS flash) chips larger than 16 MB, and attempting to do so may crash the system. Systems with AMD “Promontory” IO extenders (mostly “Zen” desktop platforms) are not currently supported.
Major updates¶
Optimised erase and write logic¶
Significant performance improvements with new logic which is based on: the optimal selection of erase blocks for the given logical layout, available erase functions, and size of memory area to erase/write.
Legacy code path still exists in the source tree, but it will be deleted by the next release.
Optimised delays logic¶
Optimised logic and refactorings of delays functionality, in particular for SPI chips.
Flashrom now sleeps more aggressively when a delay is required, rather than polling in a loop. This should reduce power consumption significantly, but may require more time to complete operations on systems experiencing high CPU load.
An unconditional 1-second delay was removed for SPI flashes. This is not believed to be needed for any SPI flashes, but may be needed for some old parallel flashes (where it remains in use).
Cycle-counting busy loops are now only used on DOS builds of flashrom. All other platforms use OS timers for timed delays, which are expected to be more accurate.
Tree-wide refactorings around programmer_delay and internal_delay
Documentation is in the git tree¶
Docs are available in the same repository as the code, in doc/
directory.
Website content is automatically generated from docs in the git tree.
Patches with code changes and new features can (and should) update documentation in the same patch, which makes it a lot easier to maintain up-to-date docs.
Note: the migration process for documents from flashrom wiki to the git tree is half way. Wiki is deprecated now, and will go away once the migration process complete.
Makefile scheduled for removal¶
Future versions of flashrom will drop support for building via Makefile: Meson will become the only supported build system.
The Makefile and meson build systems are currently at feature parity, except automated testing is supported only with meson. To reduce the maintenance burden, we plan to remove the Makefile after this release.
Write-protect updates¶
Support reading security register
Support reading/writing configuration register
More range functions (with different block sizes and handling of CMP bit)
Protected regions support¶
Support to allow programmers to handle protected regions on the flash.
get_region() function is added so that programmers can expose access permissions for multiple regions within the flash.
A get_region() implementation is added for the ichspi driver
Chipset support added¶
Tiger Lake
Emmitsburg Chipset SKU
Meteor Lake-P/M
Panther Lake-U/H 12Xe
Panther Lake-H 4Xe
Chip models support added or updated¶
New models support¶
AT25DF011
B.25D80A
B25Q64AS
GD25LB128E/GD25LR128E
GD25LB256E
GD25LF128E
GD25Q127C/GD25Q128E
GD25LQ255E
GD25LR256E
GD251R512ME
IS25LP016
IS25LQ016
IS25WP016
IS25WP020
IS25WP040
IS25WP080
IS25WQ040
MX25L1633E
MX25L1636E
MX25L3239E
MX25L3255E
MX25L3273F
MX25L6473F
MX25L6436E/MX25L6445E/MX25L6465E
MX25L6473E
MX25L12850F
MX77L25650F
MX25R2035F
MX25R4035F
MX25R8035F
MX25U25643G
MX25V16066
P25Q06H
P25Q11H
P25Q21H
W25Q16JV_M
XM25QH128A
XM25QH80B
XM25QH16C/XM25QH16D
XM25QU80B
XM25RU256C
XT25F02E
XT25F64B
XT25F128B
ZD25D20
Added write-protect support¶
EN25QH32
EN25QH64
MX25L3206E/MX25L3208E
MX25L6405
MX25L6405D
MX25L6406E/MX25L6408E
MX25L12833F
MT25QL512
MX25R1635F
MX25R1635F
MX25U25643G
MX25V1635F
MX25V4035F
MX25V8035F
N25Q032..1E
N25Q032..3E
N25Q064..1E
N25Q064..3E
W25Q16.V
W25Q32BV/W25Q32CV/W25Q32DV
W25Q32FV
W25Q32JV
W25Q32BW/W25Q32CW/W25Q32DW
W25Q32FW
W25Q32JW…Q
W25Q32JW…M
W25Q64JW…M
W25Q256JW_DTR
W25Q512NW-IM
W25X05
W25X10
W25X16
W25X20
W25X32
W25X40
W25X64
W25X80
Marked as tested¶
AM29LV040B
AT29C010A
FM25F01
FM25Q16
MT25QL128
S25FL128L
W25Q128.V
XM25QH64C
XM25QH256C
XM25QU256C
Programmers support added or updated¶
New programmer for ASM106x SATA controllers
New programmer for WCH CH347, supports CH347T and CH347F packaging.
buspirate: Add option for setting the aux pin
jlink_spi: add cs=tms option to jlink_spi programmer
raiden: Support target index with generic REQ_ENABLE
buspirate_spi: add support for hiz output with pullups=off
serprog: Add support for multiple SPI chip selects
Utilities¶
Bash completion (enabled by default with command line interface)
CI checks for Signed-off-by line in commit message
CI builds documentation
Unit tests¶
Added coverage for erase and write logic¶
20 test cases for each operation, with various logical layouts and chip memory states, and additional 6 for each, with protected regions configured. The test for erase and write is set up so that new test cases can be added whenever needed.
selfcheck¶
selfcheck is now also implemented as a unit test.
selfcheck provides critical sanity checks for the programmer table, board matches table, and array of flashchip definitions.
Note that selfcheck currently, by default, still runs on flashrom init, because at the moment we can’t run unit tests on all supported platforms, and we don’t have continuous integration for all platforms.
This gives an opportunity for performance improvement for developers or companies who build their own flashrom binary and, importantly, can run unit tests with the build (Linux, BSD). For their own binary, it is possible to disable selfcheck on init and save some time (under their own responsibility to run unit tests).
Coverage report¶
Unit tests coverage report can be generated with gcov or lcov / llvm.
ch341a_spi test¶
Unit test which covers initialization-probing-shutdown of ch341a_spi.
Reduces the risk of breakage for the very popular programmer.
Write-protect¶
Added coverage for write-protect operation
Some of the other misc fixes and improvements¶
bitbang_spi.c: Fix unchecked heap allocation
writeprotect.c: skip unnecessary writes
writeprotect.c: refuse to work with chip if OTP WPS == 1
flashrom.c: Drop redundant chip read validation in verify_range()
ichspi: Clear Fast SPI HSFC register before HW seq operation
ichspi: Fix number of bytes for HW seq operations
writeprotect,ichspi,spi25: handle register access constraints
tree/: Make heap alloc checks err msg consistent
flashrom.c: Replace ‘exit(1)’ leaks with return codes on err paths
flashrom: Check for flash access restricitons in read_flash()
flashrom: Check for flash access restricitons in verify_range()
flashrom: Check for flash access restricitons in write_flash()
flashrom: Check for flash access restrictions in erase path
flashrom: Use WP-based unlocking on opaque masters
ni845x_spi: Fix signed - unsigned comparisons
flashrom: only perform WP unlock for write/erase operations
tree: Rename master branch to main
serial: Fix sp_flush_incoming for serprog TCP connections
Makefile,meson.build: Add support for Sphinx versions prior to 4.x
Makefile: Fix cleanup for Sphinx versions prior to 4.x
Makefile: Fix version string for non-Git builds
serprog protocol: Add SPI Mode and CS Mode commands
util/list_yet_unsupported_chips.h: Fix path
flashrom_udev.rules: Add rule for CH347
Add documentation for pico-serprog
cli_classic: Defer flashrom_init calibration until after options parsing
hwaccess_x86_io: Fix Android compilation with bionic libc