Add Google kano (MrChromebox 26.03 coreboot fork) support - First full Chromebook port! - #2133
Add Google kano (MrChromebox 26.03 coreboot fork) support - First full Chromebook port!#2133cwiggs wants to merge 35 commits into
Conversation
tlaurion
left a comment
There was a problem hiding this comment.
first review as I was there and saw work on this PR :)
|
I suggest you tart a thread under Matrix Heads channel. You must rebase the old PR on linuxboot/heads master, an dthen adapt coreboot config to your board. Following https://osresearch.net/Porting/ @cwiggs otherwise your experience might be really frustrating. |
Started a thread here: https://matrix.to/#/!eMLMv62wAMCW1V-ufL_bJ_JDngDhrpSOSEQBLzX8aTg/$eepAush4kVo93Zxqtw59P6NX9g6AG7FZFplc2Fu6tyo?via=matrix.org&via=tchncs.de&via=unredacted.org |
|
@cwiggs I saw you left the room? |
Looks like the Matrix homeserver decided to delete my account for some reason, I'll look into getting it reactivated. |
|
@cwiggs check https://github.com/tlaurion/heads/tree/cwiggs-google_kano which now builds locally with blobs paths corrected and blobs submodules synced per mrchromebox gitsubmodules sync override in modules/coreboot |
Okay, great, should I rebase this branch off that one then? |
Absolutely. It builds from CI. I pushed progress forward since the last base (coreboot 4.22) was old and not trivial to adapt. Let me know how the testing goes. Feel free to cherry pick all commits or if you agree i can push the changes here but that would make us both co-authors of the port. CircleCI builds at https://app.circleci.com/pipelines/github/tlaurion/heads/4040/workflows/d7699b2f-feca-423f-b0f5-187ebf94e886 |
|
Thanks! I got it downloaded. The suzyq cable should arrive this weekend or Monday and I'll give it a try. I also rebased off your branch here. |
@cwiggs : This branch doesn't include all the needed changes, nor CircleCI config. I can push here too, if needed. Let me know. |
I just rebased off your branch, let me know if it looks good from that point of view. Looks like I also will need to rebase off main. As far as flashing goes: I got the Suzy-Q "cable" (It's really just a small board with a male and female usb-c, you then use your own usb-c cable). And I have some good news and some bad news (I think?). I was able to get the suzy-q cable to read the rom, but verifying the backup seems to fail. I've been using this mrchromebox guide to get the suzy-q device working with flashrom and then this heads wiki as well. Below are some notes I put together while I was attempting the flash: Use Suzy-Q cable for flashing
Questions:
Anyway I think next steps are to disconnect the battery and try these flashrom commands again. I don't want to proceed until the verify step works without error. |
|
Well I disconnected the battery and am getting the same response from flashrom. Should I just continue with flashing heads? Here are my notes:
* Use a smudger to take the back cover off.
* Disconnect battery cable.
|
ea307b4 to
4d2c1e5
Compare
|
Sorry i won't be able to help but with theory, I do not own any chromebook; you are guinea pig here :/ from https://docs.mrchromebox.tech/docs/firmware/wp/disabling.html#disabling-software-write-protection
What is the output? Also weird that you cannot verify a backup; that is not good. You shoud not proceed until you have a backup that can be flashed back otherwise you risk bricking. There is no A/B fallback with Heads as opposed to chromebook verified boot counterpart; firmware needs to be correct otherwise you will need to get back to prior firmware until port is complete. Reading deeper (I guess your device is >2023), if its the case, you MUST disable CCD following those instructions https://docs.mrchromebox.tech/docs/firmware/wp/disabling.html#disable-ap-ro-firmware-verification Let me know! |
@MrChromebox any insights on this? Kano post 2023 device? CCD required to be disabled through https://docs.mrchromebox.tech/docs/firmware/wp/disabling.html#disable-ap-ro-firmware-verification ? Any insight really appreciated. As we discussed prior, TPM2 implementation of cr50 was complete enough; Heads was not using the proper capability, which (hopefully/should...) have been fixed under #2055 |
No worries, I'm glad to be the guinea big here. Really excited to get heads working on chromebox/book devices.
Yeah makes sense. Another option I'll probably try it to follow the mrchromebox guide on flashing coreboot and see if I can do that normally, then at least I can always go back to Mrchromebox's coreboot if flashing heads causes issues.
Yeah that is my read on it too, which is why I disconnected the battery, which should disable CCD according to that guide but doesn't seem to be working?
I'll look into creating a thread on the chultrabook forum too. Some more context that might help:
|
|
While debugging these issues I did find it recommended to check here to see if the ChromeOS Device supports ccd (which is what the suzyq cable is for) and it looks like the Acer 714 does not support ccd? If that is truly the issue I'll have to order hardware to flash the chip with a normal SPI flasher. Interestingly the chromium.org page above shows "Acer Chromebook Plus Spin 714 (CP714-1H/CP714-1HN),Acer Chromebook Plus Enterprise Spin 714 (CPE794-1N)]" which is a slightly different model than mine. My model number is I also have 2 other ChromeOS devices already with Mrchromebox's coreboot:
So we could potentially try to build and flash heads on those? |
|
More findings! I found a post by Mrchromebox here that mentions something is might be needed for KANO! However I tried with minicom like Mrchromebox suggested and get: |
I was able to get around this by running |
- Expand CBFS from 0xBE0000 (12160 KiB) to 0x1000000 (16384 KiB) to utilize available IFD BIOS region space while respecting the Intel 16 MiB SPI decode window limit - Fix hex comparison bug in validate_cbfs_ifd_fit.sh that bypassed the 16 MiB cap (POSIX test doesn't handle 0x prefix) - Expand blob paths from Make variable references to real paths so validation scripts can resolve IFD_BIN_PATH Config regenerated via: make BOARD=kano coreboot.save_in_oldconfig_format_in_place make BOARD=kano coreboot.save_in_defconfig_format_backup Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…omebox fork Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…-musl-compat.patch: place include at same position as working coreboot-25.09 fix Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Clone with full history so git describe --tags can find version tags for artifact filenames. Repair shallow clones with: git fetch --unshallow origin git fetch --tags origin Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
This commit updates the tpmr.sh logic to skip a TPM device that does not support ClearControl but still supports Clear. The Google KANO device, and most likely all CR50 TPMs are an example of a TPM device that does not support ClearControl but still supports clear. Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
This reverts commit 69bc3cb. Did not work to view the console on boot, removing for now. Feel free to add back in if you want to get it working. Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
- boards/kano/kano.config: add CONFIG_COREBOOT_APPLY_HAP=y to opt into post-build ifdtool HAP application - modules/coreboot: add conditional ifdtool -M 1 step in ROM copy recipe after CBFS/IFD validation. Extracts CONFIG_IFD_CHIPSET from the coreboot config to pass --platform flag, which is required for ifdtool to correctly detect IFD_VERSION_2 on ADL and set PCHSTRP0 bit 16 (the HAP bit) rather than the legacy AltMeDisable. Does NOT change flash access permissions; ME region remains RW. Verify HAP was applied to the final ROM: ifdtool -p adl -d build/x86/kano/heads-kano-*.rom 2>/dev/null | grep -i HAP Expected output: HAP bit is set Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…edefconfig Regenerated with: make BOARD=kano coreboot.save_in_oldconfig_format_in_place make BOARD=kano coreboot.save_in_defconfig_format_backup - config/coreboot-kano.config: CONFIG_USE_PC_CMOS_ALTCENTURY=n reformatted to # CONFIG_USE_PC_CMOS_ALTCENTURY is not set by coreboot olddefconfig normalization - config/coreboot-kano.config_defconfig: add matching defconfig entry - doc/variation-to-defconfig.md: document that USE_PC_CMOS_ALTCENTURY must be not set for Heads. When =y, rtc_get() reads the century byte from CMOS register 0x32 — if vendor firmware left 0x20 (2000s), this shifts the epoch 1970 to 2070, breaking Heads' date detection at boot. Add kano to the not set list and update count (18 -> 19). Signed-off-by: Thierry Laurion <insurgo@riseup.net>
- kano board config had CONFIG_DROPBEAR=y missed in the initial pass since it lives on a different branch than remove_dropbear Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
Signed-off-by: Chris Wiggins <chris@cwiggs.com>
…ld ifdtool step - Add CONFIG_COREBOOT_GPR0_DISABLE to clear the IFD GPR0 (Global Protected Range 0) strap in the post-build ifdtool step. - FLMSTR unlocking alone does not make the ME region writable: a hardware-IFD-protected GPR0 range (0x1000-0x1a6fff here) overrides it, so the ME region stays read-only. - ifdtool mode options are mutually exclusive, so HAP (--altmedisable) and GPR0 (--gpr0-disable) each run as a separate sequential pass, chained by moving each output back onto the rom. - Apply each pass only when its own CONFIG toggle is set. The make output now explains what each IFD toggle does and why it is applied: HAP disables the ME at runtime after hardware init; GPR0 is the hardware IFD strap that made the ME region read-only and is cleared so the ME region can be flashed. - Guard the mv with [ -e rom.new ] so a pass that is already in the desired state (no .new written) does not fail the build. - Per-pass arguments default via CONFIG_COREBOOT_IFDTOOL_HAP_OPT and CONFIG_COREBOOT_IFDTOOL_GPR0_OPT, overridable in a board config. Signed-off-by: Thierry Laurion <insurgo@riseup.net>
- The MrChromebox coreboot fork is based on coreboot 26.03; put that base version in the module name, build dir, patch dir and the kano board's CONFIG_COREBOOT_VERSION so the fork pin is self-describing. - Rename patches/coreboot-mrchromebox/ to patches/coreboot-mrchromebox-26.03/ and the .circleci seed / coreboot_dir references to match. Signed-off-by: Thierry Laurion <insurgo@riseup.net>
|
@cwiggs I think I fixed GPR0 correctly with 07b1fd5 as per private discussion we had over matrix? The post build ifd fix for HAP is now doing another call with board options modified. For the moment it seems to be the cleanest implementation for boards for which IFD is provided by coreboot repo and for which no coreboot options are provided to apply directly. Let me know what you think Now part of build output: |
|
Also changed forkname to a versioned one in deb2457 since its possible that other chromebooks are added in later on version. Ideally we move all boards depending on a fork at the same time in the future, but that requires board testing and forks tend to now based boards per branches so I took a practical stance here under deb2457 A reality check would be to verify if all your chromebooks are under mrchromebooks 26.03 and let me know, but in all cases having modules/coreboot and forks stating versioning is good practice anyhow. |
Sounds good, let me flash the new rom and get back with flashprog output.
I think my 3 chrome devices are all on Mrchromebox 26.03 but I'd have to boot them up and verify. I thought that we actually decided to not fork off MrChromebox's coreboot fork and just used vanilla? I remember MrChromebox saying that if our fork doesn't relate to UEFI we don't need anything from the MrChromebox fork? |
We could switch I forgot about that. Changing coreboot, board and CirclCI to reflect the change? |
|
Flashed EDIT: Actually that seems to be incomplete for some odd reason. I used Okay I got an update: I had to send stderr to stdout and then redirect both to the usb. That might explain why I thought it looked good here: #2133 (comment) |
|
For the sake of clarity. deb2457 must be flashed externally for ifd to unlock regions? Otherwise we are right at same point, not understanding why GPR0 is still on months later :( |


This pull request adds support for the Acer Chromebook Spin 714 ("kano") board based on the MrChromebox coreboot fork (26.06), including CI integration, configuration files, and documentation updates. It also introduces a patch for musl compatibility in the MrChromebox fork, adds a new Linux kernel version (6.6.30), and documents TPM2 CR50 command support. The most important changes are grouped below:
Kano (Acer Chromebook Spin 714) board support:
boards/kano/kano.configfor Heads and Linux build configuration for the kano board.config/coreboot-kano.config_defconfigas a defconfig backup for kano, documenting non-default coreboot options.coreboot-mrchromeboxas a seed, defines the kano build job, and documents its workflow. [1] [2] [3]USE_PC_CMOS_ALTCENTURYmust be unset for this board. [1] [2] [3]MrChromebox coreboot fork integration:
modules/coreboot, with commit hash pinning and submodule handling notes. [1] [2]ifdtool. [1] [2]Build system and kernel updates:
cbmemutility.Documentation improvements:
Minor adjustments:
These changes collectively enable official Heads support for the Acer Chromebook Spin 714 (kano), ensure compatibility with the MrChromebox fork, and improve build reproducibility and documentation for new contributors.
(copilot generalized pr summary, asked by @tlaurion)
TODO before merge
[5cbf889](https://github.com/linuxboot/heads/commit/5cbf8896292b1e7c8953feb60102096c6b7debdf)using external programmer model suzyqNixOS 26.05install and rebootNixOS 26.05patches/coreboot-X.Y.Z.and coreboot config contain proper preparation of the platform)Additional actionable items: