1================ 2v1.4 (July 2024) 3================ 4 5This document describes the major changes in flashrom version 1.4.0, 6from more than 400 patches contributed by more than 70 authors (thank you!) 7in the 18 months since version 1.3.0 was branched. 8 9Download 10======== 11 12flashrom 1.4 can be downloaded in various ways: 13 14Anonymous checkout from the git repository at https://review.coreboot.org/flashrom.git 15(tag v1.4.0) 16 17A tarball is available for download at 18https://download.flashrom.org/releases/flashrom-1.4.0.tar.xz 19(signature https://download.flashrom.org/releases/flashrom-1.4.0.tar.xz.asc) 20 21fingerprint: 6E6E F9A0 BA47 8006 E277 6E4C C037 BB41 3134 D111 22 23Known issue 24=========== 25 26AMD-based PCs with FCH are unable to read flash contents for internal (BIOS flash) 27chips larger than 16 MB, and attempting to do so may crash the system. 28Systems with AMD "Promontory" IO extenders (mostly "Zen" desktop platforms) are not currently 29supported. 30 31https://ticket.coreboot.org/issues/370 32 33Major updates 34============= 35 36Optimised erase and write logic 37------------------------------- 38 39Significant performance improvements with new logic which is based on: 40the optimal selection of erase blocks for the given logical layout, 41available erase functions, and size of memory area to erase/write. 42 43**Legacy code path still exists in the source tree, but it will be deleted by the next release.** 44 45Optimised delays logic 46---------------------- 47 48Optimised logic and refactorings of delays functionality, in particular for SPI chips. 49 50* Flashrom now sleeps more aggressively when a delay is required, rather than 51 polling in a loop. This should reduce power consumption significantly, but 52 may require more time to complete operations on systems experiencing high 53 CPU load. 54* An unconditional 1-second delay was removed for SPI flashes. This is not 55 believed to be needed for any SPI flashes, but may be needed for some old 56 parallel flashes (where it remains in use). 57* Cycle-counting busy loops are now only used on DOS builds of flashrom. All 58 other platforms use OS timers for timed delays, which are expected to be 59 more accurate. 60* Tree-wide refactorings around programmer_delay and internal_delay 61 62Documentation is in the git tree 63-------------------------------- 64 65Docs are available in the same repository as the code, in ``doc/`` directory. 66 67Website content is automatically generated from docs in the git tree. 68 69**Patches with code changes and new features can (and should) update documentation 70in the same patch, which makes it a lot easier to maintain up-to-date docs.** 71 72Note: the migration process for documents from flashrom wiki to the git tree is half way. 73Wiki is deprecated now, and will go away once the migration process complete. 74 75Makefile scheduled for removal 76------------------------------ 77 78**Future versions of flashrom will drop support for building via Makefile**: 79Meson will become the only supported build system. 80 81The Makefile and meson build systems are currently at feature parity, 82except automated testing is supported only with meson. 83To reduce the maintenance burden, we plan to remove the Makefile after this release. 84 85Write-protect updates 86--------------------- 87 88* Support reading security register 89* Support reading/writing configuration register 90* More range functions (with different block sizes and handling of CMP bit) 91 92Protected regions support 93------------------------- 94 95* Support to allow programmers to handle protected regions on the flash. 96* get_region() function is added so that programmers can expose access permissions 97 for multiple regions within the flash. 98* A get_region() implementation is added for the ichspi driver 99 100Chipset support added 101===================== 102 103* Tiger Lake 104* Emmitsburg Chipset SKU 105* Meteor Lake-P/M 106* Panther Lake-U/H 12Xe 107* Panther Lake-H 4Xe 108 109Chip models support added or updated 110==================================== 111 112New models support 113------------------ 114 115* AT25DF011 116 117* B.25D80A 118* B25Q64AS 119 120* GD25LB128E/GD25LR128E 121* GD25LB256E 122* GD25LF128E 123* GD25Q127C/GD25Q128E 124* GD25LQ255E 125* GD25LR256E 126* GD251R512ME 127 128* IS25LP016 129* IS25LQ016 130* IS25WP016 131* IS25WP020 132* IS25WP040 133* IS25WP080 134* IS25WQ040 135 136* MX25L1633E 137* MX25L1636E 138* MX25L3239E 139* MX25L3255E 140* MX25L3273F 141* MX25L6473F 142* MX25L6436E/MX25L6445E/MX25L6465E 143* MX25L6473E 144* MX25L12850F 145* MX77L25650F 146* MX25R2035F 147* MX25R4035F 148* MX25R8035F 149* MX25U25643G 150* MX25V16066 151 152* P25Q06H 153* P25Q11H 154* P25Q21H 155 156* W25Q16JV_M 157 158* XM25QH128A 159* XM25QH80B 160* XM25QH16C/XM25QH16D 161* XM25QU80B 162* XM25RU256C 163 164* XT25F02E 165* XT25F64B 166* XT25F128B 167 168* ZD25D20 169 170Added write-protect support 171--------------------------- 172 173* EN25QH32 174* EN25QH64 175 176* MX25L3206E/MX25L3208E 177* MX25L6405 178* MX25L6405D 179* MX25L6406E/MX25L6408E 180* MX25L12833F 181* MT25QL512 182* MX25R1635F 183* MX25R1635F 184* MX25U25643G 185* MX25V1635F 186* MX25V4035F 187* MX25V8035F 188 189* N25Q032..1E 190* N25Q032..3E 191* N25Q064..1E 192* N25Q064..3E 193 194* W25Q16.V 195* W25Q32BV/W25Q32CV/W25Q32DV 196* W25Q32FV 197* W25Q32JV 198* W25Q32BW/W25Q32CW/W25Q32DW 199* W25Q32FW 200* W25Q32JW...Q 201* W25Q32JW...M 202* W25Q64JW...M 203* W25Q256JW_DTR 204* W25Q512NW-IM 205* W25X05 206* W25X10 207* W25X16 208* W25X20 209* W25X32 210* W25X40 211* W25X64 212* W25X80 213 214Marked as tested 215---------------- 216 217* AM29LV040B 218 219* AT29C010A 220 221* FM25F01 222* FM25Q16 223 224* MT25QL128 225 226* S25FL128L 227 228* W25Q128.V 229 230* XM25QH64C 231* XM25QH256C 232* XM25QU256C 233 234Programmers support added or updated 235==================================== 236 237* New programmer for ASM106x SATA controllers 238* New programmer for WCH CH347, supports CH347T and CH347F packaging. 239 240* buspirate: Add option for setting the aux pin 241* jlink_spi: add cs=tms option to jlink_spi programmer 242* raiden: Support target index with generic REQ_ENABLE 243* buspirate_spi: add support for hiz output with pullups=off 244* serprog: Add support for multiple SPI chip selects 245 246Utilities 247========= 248 249* Bash completion (enabled by default with command line interface) 250 251* CI checks for Signed-off-by line in commit message 252 253* CI builds documentation 254 255Unit tests 256========== 257 258Added coverage for erase and write logic 259---------------------------------------- 260 26120 test cases for each operation, with various logical layouts and chip memory states, 262and additional 6 for each, with protected regions configured. 263The test for erase and write is set up so that new test cases can be added whenever needed. 264 265selfcheck 266--------- 267 268selfcheck is now also implemented as a unit test. 269 270selfcheck provides critical sanity checks for the programmer table, board matches table, 271and array of flashchip definitions. 272 273Note that selfcheck currently, by default, still runs on flashrom init, 274because at the moment we can't run unit tests on all supported platforms, 275and we don't have continuous integration for all platforms. 276 277This gives an opportunity for performance improvement for developers or companies 278who build their own flashrom binary and, importantly, 279can run unit tests with the build (Linux, BSD). 280For their own binary, it is possible to disable selfcheck on init and save some time 281(**under their own responsibility to run unit tests**). 282 283Coverage report 284--------------- 285 286Unit tests coverage report can be generated with gcov or lcov / llvm. 287 288ch341a_spi test 289--------------- 290 291Unit test which covers initialization-probing-shutdown of ch341a_spi. 292 293Reduces the risk of breakage for the very popular programmer. 294 295Write-protect 296------------- 297 298Added coverage for write-protect operation 299 300Some of the other misc fixes and improvements 301============================================= 302 303* bitbang_spi.c: Fix unchecked heap allocation 304* writeprotect.c: skip unnecessary writes 305* writeprotect.c: refuse to work with chip if OTP WPS == 1 306* flashrom.c: Drop redundant chip read validation in verify_range() 307* ichspi: Clear Fast SPI HSFC register before HW seq operation 308* ichspi: Fix number of bytes for HW seq operations 309* writeprotect,ichspi,spi25: handle register access constraints 310* tree/: Make heap alloc checks err msg consistent 311* flashrom.c: Replace 'exit(1)' leaks with return codes on err paths 312* flashrom: Check for flash access restricitons in read_flash() 313* flashrom: Check for flash access restricitons in verify_range() 314* flashrom: Check for flash access restricitons in write_flash() 315* flashrom: Check for flash access restrictions in erase path 316* flashrom: Use WP-based unlocking on opaque masters 317* ni845x_spi: Fix signed - unsigned comparisons 318* flashrom: only perform WP unlock for write/erase operations 319* tree: Rename master branch to main 320* serial: Fix sp_flush_incoming for serprog TCP connections 321* Makefile,meson.build: Add support for Sphinx versions prior to 4.x 322* Makefile: Fix cleanup for Sphinx versions prior to 4.x 323* Makefile: Fix version string for non-Git builds 324* serprog protocol: Add SPI Mode and CS Mode commands 325* util/list_yet_unsupported_chips.h: Fix path 326* flashrom_udev.rules: Add rule for CH347 327* Add documentation for pico-serprog 328* cli_classic: Defer flashrom_init calibration until after options parsing 329* hwaccess_x86_io: Fix Android compilation with bionic libc 330