Hi,
Does running flashrom with --wp-disable work? It looks like the SPI
flash's
block protect bits got set somewhere along the way.
Looks like you were right. Unfortunately that command doesn't resolve
the problem, but I get more information about what's wrong (see below).
I've done some research and it could be my RPi setup isn't providing a
reliable voltage, or something might have happened to the wiring or pins
on my SOIC clip? I'm not an expert and mostly just follow guides but
when I get the time I'll try a few things.
Here's the verbose output of `--wp-disable`, please let me know if you
see something there that will help me narrow down the problem.
```
$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -c
W25Q128.V --wp-disable -V
flashrom 1.4.0 on Linux 6.18.33+rpt-rpi-v7 (armv7l)
flashrom is free software, get the source code at https://flashrom.org
flashrom was built with GCC 13.3.0, little endian
Command line (6 args): flashrom -p
linux_spi:dev=/dev/spidev0.0,spispeed=1000 -c W25Q128.V --wp-disable -V
Initializing linux_spi programmer
Using device /dev/spidev0.0
Using 1000kHz clock
get_max_kernel_buf_size: Using value from
/sys/module/spidev/parameters/bufsiz as max buffer size.
linux_spi_init: max_kernel_buf_size: 4096
The following protocols are supported: SPI.
Probing for Winbond W25Q128.V, 16384 kB: compare_id: id1 0xef, id2 0x4018
Added layout entry 00000000 - 00ffffff named complete flash
Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on linux_spi.
Chip status register is 0xf8.
Chip status register: Status Register Write Disable (SRWD, SRP, ...) is set
Chip status register: Sector Protect Size (SEC) is 4 KB
Chip status register: Top/Bottom (TB) is bottom
Chip status register: Block Protect 2 (BP2) is set
Chip status register: Block Protect 1 (BP1) is set
Chip status register: 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
Chip status register 2 is NOT decoded!
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).
write_wp_bits: wp_verify failed: reg:1 actual:0xf8 expected:0xf0
Failed to apply new WP settings: unexpected WP configuration read back
from chip
Note: hardware status register protection is enabled. The chip's WP# pin
must be set to an inactive voltage level to be able to change the WP
settings.
```
Thanks.
None via flashrom:
I'll test this and get back to you.
David Hendricks:
Does running flashrom with --wp-disable work? It looks like the SPI
flash's
block protect bits got set somewhere along the way.
On Fri, Jul 3, 2026, 9:19 PM None via flashrom <[email protected]>
wrote:
Hi,
I was trying to flash a modded dump back to the W25Q128.V BIOS chip of a
Lenovo ThinkPad T470 but it failed and left my chip in an unusable
state. I tested using SPI through two different devices - a ch341a and a
Raspberry Pi - and with two different versions of flashrom - 1.4.0 and
1.8.0-devel (git:v1.7.0-48-g0b14d50a).
The strange thing is that I've already successfully flashed a dump to
this chip once before, to set the HAP bit. I was using the same devices
and version of flashrom. The only thing that changed since then is I
updated the laptop's firmware, from 1.78 to 1.79.
Hope you guys can help because the laptop won't turn on now, pressing
the power button does absolutely nothing.
Here's the output from flashrom 1.4.0:
```
$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -c W25Q128.V -w
./modified_dump.bin
flashrom 1.4.0 on Linux 6.18.33+rpt-rpi-v7 (armv7l)
flashrom is free software, get the source code at https://flashrom.org
Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on linux_spi.
Failed to unlock flash status reg with wp support.
Block protection could not be disabled!
Reading old flash chip contents... done.
FAILED at 0x00000c00! Expected=0xff, Found=0xd9, failed byte count from
0x00000000-0x0000ffff: 0x1bcb
Erase/write done from 0 to ffffff
Write Failed!Uh oh. Erase/write failed. Checking if anything has
changed.
Reading current flash chip contents... done.
Apparently at least some data has changed.
Your flash chip is in an unknown state.
Please report this to the mailing list at [email protected] or
on IRC (see https://www.flashrom.org/Contact for details), thanks!
```
Here's the verbose output from 1.8.0-devel (git:v1.7.0-48-g0b14d50a):
```
$ ./flashrom -V -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -c
W25Q128.V -w ./modified_dump.bin
flashrom v1.8.0-devel (git:v1.7.0-48-g0b14d50a) on Linux
6.18.33+rpt-rpi-v7 (armv7l)
flashrom is free software, get the source code at https://flashrom.org
flashrom was built with GCC 14.2.0, little endian
Command line (7 args): ./flashrom -V -p
linux_spi:dev=/dev/spidev0.0,spispeed=1000 -c W25Q128.V -w
/home/flashing/Downloads/T470_Dump_2026-05-28_to-flash.bin
Initializing linux_spi programmer
Using device /dev/spidev0.0
Using 1000kHz clock
get_max_kernel_buf_size: Using value from
/sys/module/spidev/parameters/bufsiz as max buffer size.
linux_spi_init: max_kernel_buf_size: 4096
The following protocols are supported: SPI.
Probing for Winbond W25Q128.V, 16384 kB: compare_id: id1 0xef, id2
0x4018
Added layout entry 00000000 - 00ffffff named complete flash
Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on linux_spi.
Chip status register is 0xf8.
Chip status register: Status Register Write Disable (SRWD, SRP, ...)
is set
Chip status register: Sector Protect Size (SEC) is 4 KB
Chip status register: Top/Bottom (TB) is bottom
Chip status register: Block Protect 2 (BP2) is set
Chip status register: Block Protect 1 (BP1) is set
Chip status register: 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
Chip status register 2 is NOT decoded!
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).
write_wp_bits: wp_verify failed: reg:1 actual:0xf8 expected:0x80
Failed to unlock flash status reg with wp support.
Some block protection in effect, disabling... Block protection could not
be disabled!
Chip status register is 0xf8.
Chip status register: Status Register Write Disable (SRWD, SRP, ...)
is set
Chip status register: Sector Protect Size (SEC) is 4 KB
Chip status register: Top/Bottom (TB) is bottom
Chip status register: Block Protect 2 (BP2) is set
Chip status register: Block Protect 1 (BP1) is set
Chip status register: 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
Chip status register 2 is NOT decoded!
can_change_target_regions: cannot fully update complete flash region
(00000000..0xffffff) due to chip's write-protection.
At least one target region is not fully writable. Aborting.
Error: some of the required checks to prepare flash access failed.
Earlier messages should give more details.
Write operation has not started.
restoring chip status (0xf8)
write_wp_bits: wp_verify failed: reg:1 actual:0xf8 expected:0xf0
Runtime from programmer init to shutdown: 0min 0sec
```
_______________________________________________
flashrom mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
flashrom mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
flashrom mailing list -- [email protected]
To unsubscribe send an email to [email protected]