Update of firmware of Asus C302CA (CAVE) fails - Feb 2026 from Sep 2025 firmware

System Details

  • Device: [CAVE]
  • OS: [Linux]
  • Firmware Type: [UEFI Full ROM]
  • Firmware Version: [MrChromebox-2509.4] (installing 20260125)
  • Internal storage type: [eMMC]

Summary of the Issue

flashrom reports failure of write at block 0x00ccc000, after erasing. I’ll note this is only the second update to firmware beyond whatever Google did when they supported the device.

Steps to Reproduce

  1. Have a previous mrchromebox UEFI full-ROM firmware for CAVE installed (in my case from Sep 2025, when I replaced the Chromebook firmware).

  2. Running Ubuntu 25.10 desktop (seems unlikely to matter…)

  3. Run the MrChromebox firmware install script.

  4. Select Full UEFI

Expected Behavior

Success. Instead, flashrom reports a write failure with a DO NOT REBOOT/DO NOT POWEROFF warning.

Logs

mrchromebox_diag.txt

mrchromebox firmware-util diagnostic report
Sat Feb 28 14:59:22 MST 2026

[deviceDesc]
ASUS Chromebook Flip C302

[device.override]

[deviceCpuType.Name]
Intel Skylake

[fwDate]
11/30/2025

[hasUEFIoption]
true

[isUnsupported]
false

[device]
cave

[firmwareType]
Full ROM / UEFI

[_hwid]
CAVE

[lsb-release]
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=25.10
DISTRIB_CODENAME=questing
DISTRIB_DESCRIPTION=“Ubuntu 25.10”

[boardName]
CAVE

[dmidecode.device]
cave

[swWp]
disabled

[wpEnabled]
false

[fwVer]
MrChromebox-2509.4

[deviceCpuType.id]
SKL

flashrom.log

================================= 8< ----------------------------------------------------

Tail-end of flashrom.log:

HSFC: FGO=1, FCYCLE=0, WET=0, FDBC=63, SME=0
HSFC: FGO=1, FCYCLE=0, WET=0, FDBC=63, SME=0
HSFC: FGO=1, FCYCLE=0, WET=0, FDBC=63, SME=0
E(ccb000:ccbfff)Erasing 4096 bytes starting at 0xccc000.
HSFC: FGO=1, FCYCLE=3, WET=0, FDBC=0, SME=0
Transaction error between offset 0x00ccc000 and 0x00ccc000 (= 0x00ccc000 + 0)!
HSFS: FDONE=0, FCERR=1, AEL=0, SCIP=1, PRR34_LOCKDN=1, WRSDIS=1, FDOPSS=1, FDV=1, FLOCKDN=1
HSFC: FGO=0, FCYCLE=3, WET=0, FDBC=0, SME=0
Erase/write done from 200000 to ffffff
Write Failed!Uh oh. Erase/write failed.
Your flash chip is in an unknown state.
Get help on IRC (see Contact — flashrom v1.7.0-rc2 (git:v1.7.0-rc2-2-g47cb3011) documentation) or mail
[email protected] with the subject “FAILED: ”!-------------------------------------------------------------------------------
DO NOT REBOOT OR POWEROFF!
Reading Status register
Error: SCIP bit is unexpectedly set.
SPI Transaction Timeout due to previous operation in process!
Reading Status register failed
!!Restoring PCI config space for 00:1f:5 reg 0xdc

================================= 8< ----------------------------------------------------

Beginning of flashrom.log

flashrom MrChromebox-v1.5.0 (git:v1.5.0-5-g255f289445) on Linux 6.17.0-14-generic (x86_64)
flashrom was built with GCC 11.4.0, little endian
Command line (11 args): /tmp/flashrom -p internal:boardmismatch=force --use-first-chip --ifd -i bios -N -w coreboot_edk2-cave-mrchromebox_20260125.rom -o /tmp/flashrom.log
Initializing internal programmer
Found candidate at: 00000500-00000528
Found coreboot table at 0x00000500.
Found candidate at: 00000000-00001770
Found coreboot table at 0x00000000.
coreboot table found at 0x7aa0e000.
coreboot header(24) checksum: bcb6 table(5976) checksum: 9a15 entries: 46
Vendor ID: Google, part ID: Cave
Using Internal DMI decoder.
DMI chassis-type is not specific enough.
DMI string system-manufacturer: “Google”
DMI string system-product-name: “Cave”
DMI string system-version: “1.0”
DMI string baseboard-manufacturer: “Google”
DMI string baseboard-product-name: “Cave”
DMI string baseboard-version: “1.0”
Found chipset “Intel Skylake Y Premium” with PCI ID 8086:9d46.
This chipset is marked as untested. If you are using an up-to-date version
of flashrom and were (not) able to successfully update your firmware with it,
then please email a report to [email protected] including a verbose (-V) log.
Thank you!
Enabling flash write… Using libpci PCI_ACCESS_I386_TYPE1
BIOS_SPI_BC = 0x8b: BIOS Interface Lock-Down: enabled, Boot BIOS Straps: 0x0 (SPI)
Top Swap: not enabled
SPI Read Configuration: prefetching enabled, caching enabled,
BIOS_CNTL = 0x8b: BIOS Lock Enable: enabled, BIOS Write Enable: enabled
Warning: Setting BIOS Control at 0xdc from 0x8b to 0x89 failed.
New value is 0x8b.
SPIBAR = 0x00007d7880433000 (phys = 0xfe010000)
0x04: 0xf800 (HSFS)
HSFS: FDONE=0, FCERR=0, AEL=0, SCIP=0, PRR34_LOCKDN=1, WRSDIS=1, FDOPSS=1, FDV=1, FLOCKDN=1
SPI Configuration is locked down.
Reading OPCODES… done
OP Type Pre-OP
op[0]: 0x01, write w/o addr, none
op[1]: 0x02, write w/ addr, none
op[2]: 0x03, read w/ addr, none
op[3]: 0x05, read w/o addr, none
op[4]: 0x20, write w/ addr, none
op[5]: 0x9f, read w/o addr, none
op[6]: 0xd8, write w/ addr, none
op[7]: 0x0b, read w/ addr, none
Pre-OP 0: 0x06, Pre-OP 1: 0x50
0x06: 0x020c (HSFC)
HSFC: FGO=0, FCYCLE=6, WET=0, FDBC=2, SME=0
0x08: 0x00000001 (FADDR)
0x0c: 0x00001f00 (DLOCK)
DLOCK: BMWAG_LOCKDN=0, BMRAG_LOCKDN=0, SBMWAG_LOCKDN=0, SBMRAG_LOCKDN=0,
PR0_LOCKDN=1, PR1_LOCKDN=1, PR2_LOCKDN=1, PR3_LOCKDN=1, PR4_LOCKDN=1,
SSEQ_LOCKDN=0
0x50: 0x00004acb (FRAP)
BMWAG 0x00, BMRAG 0x00, BRWA 0x4a, BRRA 0xcb
0x54: 0x00000000 FREG0: Flash Descriptor region (0x00000000-0x00000fff) is read-only.
0x58: 0x0fff0200 FREG1: BIOS region (0x00200000-0x00ffffff) is read-write.
0x5C: 0x01ff0001 FREG2: Management Engine region (0x00001000-0x001fffff) is locked.
0x60: 0x00007fff FREG3: Gigabit Ethernet region is unused.
0x64: 0x00007fff FREG4: Platform Data region is unused.
0x68: 0x00007fff FREG5: Device Expansion region is unused.
0x6C: 0x00007fff FREG6: BIOS2 region is unused.
0x70: 0x00007fff FREG7: unknown region is unused.
0x74: 0x00007fff FREG8: EC/BMC region is unused.
0x78: 0x00007fff FREG9: Device Expansion 2 region is unused.
Not all flash regions are freely accessible by flashrom. This is most likely
due to an active ME. Please see ME (Management Engine) — flashrom v1.7.0-rc2 (git:v1.7.0-rc2-2-g47cb3011) documentation for details.
0x84: 0x00000000 (PR0 is unused)
0x88: 0x00000000 (PR1 is unused)
0x8C: 0x00000000 (PR2 is unused)
0x90: 0x00000000 (PR3 is unused)
0x94: 0x00000000 (PR4 is unused)
0x98: 0x00000000 (GPR0 is unused)
At least some flash regions are read protected. You have to use a flash
layout and include only accessible regions. For write operations, you’ll
additionally need the --noverify-all switch. See manpage for more details.
0xa0: 0x80 (SSFS)
SSFS: SCIP=0, FDONE=0, FCERR=0, AEL=0
0xa1: 0xfe0000 (SSFC)
SSFC: SCGO=0, ACS=0, SPOP=0, COP=0, DBC=0, SME=0, SCF=6
0xa4: 0x5006 (PREOP)
0xa6: 0xb32d (OPTYPE)
0xa8: 0x05030201 (OPMENU)
0xac: 0x0bd89f20 (OPMENU+4)
0xc4: 0xf3d82004 (LVSCC)
LVSCC: BES=0x0, WG=1, WSR=0, WEWS=0, EO=0x20, VCL=1
0xc8: 0x00002000 (UVSCC)
UVSCC: BES=0x0, WG=0, WSR=0, WEWS=0, EO=0x20
Reading flash descriptors mapped by the chipset via FDOC/FDOD… done.
=== Content Section ===
FLVALSIG 0x0ff0a55a
FLMAP0 0x00040003
FLMAP1 0x42100208
FLMAP2 0x00310330

— Details —
NR (Number of Regions): 10
FRBA (Flash Region Base Address): 0x040
NC (Number of Components): 1
FCBA (Flash Component Base Address): 0x030
ISL (ICH/PCH/SoC Strap Length): 66
FISBA/FPSBA (Flash ICH/PCH/SoC Strap Base Addr): 0x100
NM (Number of Masters): 3
FMBA (Flash Master Base Address): 0x080
MSL/PSL (MCH/PROC Strap Length): 3
FMSBA (Flash MCH/PROC Strap Base Address): 0x300

=== Component Section ===
FLCOMP 0x125c00f5
FLILL 0xad604221
FLILL1 0xc7c4b9b7

— Details —
Component 1 density: 16 MB
Component 2 is not used.
Read Clock Frequency: 17 MHz
Read ID and Status Clock Freq.: 48 MHz
Write and Erase Clock Freq.: 48 MHz
Fast Read is supported.
Fast Read Clock Frequency: 48 MHz
Dual Output Fast Read Support: disabled
Invalid instruction 0: 0x21
Invalid instruction 1: 0x42
Invalid instruction 2: 0x60
Invalid instruction 3: 0xad
Invalid instruction 4: 0xb7
Invalid instruction 5: 0xb9
Invalid instruction 6: 0xc4
Invalid instruction 7: 0xc7

=== Region Section ===
FLREG0 0x00000000
FLREG1 0x0fff0200
FLREG2 0x01ff0001
FLREG3 0x00007fff
FLREG4 0x00007fff
FLREG5 0x00007fff
FLREG6 0x00007fff
FLREG7 0x00007fff
FLREG8 0x00007fff
FLREG9 0x00007fff

— Details —
Region 0 (Descr. ) 0x00000000 - 0x00000fff
Region 1 (BIOS ) 0x00200000 - 0x00ffffff
Region 2 (ME ) 0x00001000 - 0x001fffff
Region 3 (GbE ) is unused.
Region 4 (Platf. ) is unused.
Region 5 (DevExp ) is unused.
Region 6 (BIOS2 ) is unused.
Region 7 (unknown) is unused.
Region 8 (EC/BMC ) is unused.
Region 9 (unknown) is unused.

=== Master Section ===
FLMSTR1 0x00a00b00
FLMSTR2 0x00c00d00
FLMSTR3 0x00800800

— Details —
FD BIOS ME GbE Pltf DE BIOS2 Reg7 EC DE2
BIOS r rw rw
ME r rw rw
GbE rw

Enabling hardware sequencing by default for 100+ series PCH.
OK.
No board enable found matching coreboot IDs vendor=“Google”, model=“Cave”.
The following protocols are supported: Programmer-specific.
Probing for Programmer Opaque flash chip, 0 kB: Hardware sequencing reports 1 attached SPI flash chip with a density of 16384 kB.
There is only one partition containing the whole address space (0x000000 - 0xffffff).
There are 4096 erase blocks with 4096 B each.
HSFC: FGO=1, FCYCLE=6, WET=0, FDBC=2, SME=0
Chip identified: W25Q128.V
Added layout entry 00000000 - 00ffffff named complete flash
Found Winbond flash chip “W25Q128.V” (16384 kB, Programmer-specific) on internal.
Found Winbond flash chip “W25Q128.V” (16384 kB, Programmer-specific).
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).
Skipping writeprotect-based unlocking for read/verify operations.
Reading ich descriptor… read_flash: Flash Descriptor region (00000000..0x000fff) is readable, reading range (00000000..0x000fff).
Reading 4096 bytes starting at 0x000000.
HSFC: FGO=1, FCYCLE=0, WET=0, FDBC=63, SME=0
HSFC: FGO=1, FCYCLE=0, WET=0, FDBC=63, SME=0

Status

Device is powered up, has not rebooted and will remain on charger until resolved or it is time to send it to the electronics recycler.

I have reported this to flashrom via email and libera.

Can anyone provide any guidance on possible next steps? I am concerned that at some point Ubuntu may automatically reboot, which could be the end if the flash is actually corrupted, and I’ve seen no response here or from flashrom.org

I did make a backup of the firmware using the script AFTER the failure, it was labeled by the script as “BACKUP-CAVE-MrChromebox-2509.4-2026.02.28.rom” - and 2509.4 is the version that was previously installed. Is there a low-risk way to test the integrity of the flash?

Using od -x and wc -l as a coarse comparison, the backup has far fewer lines - many blocks of all zeros:
BACKUP has 129069 lines, coreboot firmware has 267109 lines - so almost certainly far few large blocks of zeroes. That implies the coreboot file has much more information in it, although perhaps it contains stuff that is not written to the flash, or the backup does not read everything.

I saw another support issue here where the first anomaly was reported (the

Warning: Setting BIOS Control at 0xdc from 0x8b to 0x89 failed.
New value is 0x8b.

)
In that post the user ultimately resolved the problem - discussion implied it had something to do with other services keeping regions of flash locked. So it seems like this ought to be done in a rescue or emergency shell, and at least not the graphical.target.

I am contemplating putting the device into rescue mode (sudo systemctl isolate rescue.target) to eliminate as many drivers as practical, and then retry the firmware flash. Is this a good idea?

I have tested my ability to do this with one of my desktops, although it is running Ubuntu 24.04. I wanted to be sure I got a tty shell when leaving graphical.target. That said, it is vastly different hardware (AMD vs Intel).

Any other suggestions/recommendations would be greatly appreciated.
Thx!

go ahead and flash the backup via the script.

not going to make a difference

this is expected and not a problem.

Thanks for the response.

To be clear, that backup was made using the script AFTER I had the flash failure. (Unfortunately). I had made a backup previously, but I have been unable to locate where I put it. :frowning:

that’s fine, the backup function copies the flash image read when the script starts up to your media of choice, it doesn’t do the flash read when you select the function.

Thanks.
The script doesn’t appear to provide an option to select a file, except perhaps Flash custom firmware. I selected “Restore Stock Firmware” and am at the warning screen. I had moved the BACKUP file, and I can’t remember if it had been put in the /tmp directory or home (now it is back in home). Can you elaborate a bit on the procedure or point me at a write up on it?

just use the custom flash option. you’re not restoring the stock firmware.

Okay, done. Thanks. Given the circumstances, any checks I should do before trying a reboot?

Well, I think it is officially a brick. Started the reboot 5 minutes ago. Screen black, although keyboard backlight is still on.

give it a hard reset - Refresh+power

otherwise likely need to unbrick with a USB programmer and WSON-8 6x5 probe. If you’re in the US, I can unbrick it for you

No response with the hard reset.

I definitely would be interested in having you unbrick it for me. It looks like this Discourse implementation does not provide PMs. Should I send you an email to your gmail address to discuss?

that works, though PM should be enabled as well