# PianoRT Community Edition firmware 0.1.0 (alpha)

coreboot firmware for the HP Chromebox G3 (board "Noibat") that boots
straight into a PianoRT Linux kernel and shows the TuxPiano boot splash.
It's free and community supported, with no warranty.

**Flashing firmware is at your own risk.** A failed flash can leave the
Chromebox unable to start, and recovery requires a CH341A USB SPI programmer
with a SOIC-8 clip plus the backup the flasher saves. Read `FLASHER.md` and
the setup guide on pianort.com before you start.

## Files

| File | What it is |
|---|---|
| `pianort-ce-noibat-0.1.0.rom.xz` | Base firmware image (16 MiB once uncompressed). Don't flash it as is: run `pianort-ce-flash`. |
| `pianort-ce-noibat-0.1.0-bzImage` | The Linux kernel inside the image, needed by the flasher |
| `pianort-ce-flash` | Customizes the image for your unit and, only with `--flash`, flashes the BIOS region |
| `cbfstool` | coreboot's image tool, built from the source below for Debian 13 amd64. The flasher uses it automatically. |
| `FLASHER.md` | How the flasher works, and your responsibilities |
| `SOURCES.txt` | Exactly which source each binary was built from |
| `coreboot-pianort-ce-0.1.0-source.tar.xz.part-*` | Full coreboot source tree, split into parts |
| `patches/` | The three PianoRT changes to upstream coreboot |
| `config.pianort_ce_noibat` | coreboot build config |
| `linux-7.3-rc6-pianort-nvme-managed-irq.patch` | The only change to the Linux 7.3-rc6 source |
| `linux-7.3-rc6-pianort-ce-0.1.0-kconfig.txt` | Kernel build config |
| `linux-7.3-rc6.tar.gz` | Unmodified Linux 7.3-rc6 source, mirrored from kernel.org |
| `licenses/` | coreboot, Intel FSP and Intel microcode license texts |
| `SHA256SUMS` | Checksums for everything above |

Check the downloads, then rebuild the coreboot source tarball from its parts:

```sh
sha256sum -c --ignore-missing SHA256SUMS
cat coreboot-pianort-ce-0.1.0-source.tar.xz.part-* > coreboot-pianort-ce-0.1.0-source.tar.xz
sha256sum -c --ignore-missing SHA256SUMS
unxz -k pianort-ce-noibat-0.1.0.rom.xz
```

## What's in this firmware

- Pure upstream coreboot (25.12-254-g9304d8d580) with three PianoRT patches:
  1. **cbfstool Linux trampoline byte-order fix.** This is needed for the
     kernel's display driver on this board. It's carried out of tree while
     the upstream review is still open.
  2. **Noibat appliance devicetree.** It turns off the eDP output, the
     USB-C DisplayPort chips (so **USB-C displays don't work**; use HDMI or
     DisplayPort) and the cr50 TPM bus.
  3. **Community Edition config.** The serial number reads "PianoRT
     Community Edition" and the version ends in `-pianort-ce-0.1.0`.
- Linux 7.3-rc6, a **release-candidate kernel**, built with the mainline
  PREEMPT_RT option and one NVMe patch. The patch makes `isolcpus=managed_irq`
  actually keep NVMe interrupts off the isolated CPUs. It has no effect
  without CPU isolation.
- Intel FSP and microcode binaries from coreboot's public repositories. No
  Intel ME or flash descriptor is included, so the flasher writes only the
  BIOS region and leaves your unit's own descriptor and ME in place.

## Requirements and known limits

- HP Chromebox G3 (Noibat), with firmware write protection turned off
- Debian 13 installed on an **NVMe SSD** (required)
- `flashrom` from Debian (`sudo apt install flashrom`). `cbfstool` is included.
- USB-C displays don't work
- Every unit uses the same Ethernet MAC address. `FLASHER.md` shows how to
  give each unit its own.
- Wi-Fi must be off while playing. Failure to disable Wi-Fi may cause
  unexpected results.
- Pianoteq is licensed separately by Modartt and isn't included.

## Reproducibility

Two clean builds of the coreboot tree produced the same image byte for byte
(sha256 in `SHA256SUMS`), given `pianort-ce-noibat-0.1.0-bzImage` as the
payload. The kernel binary is the exact one tested on the reference unit.
Rebuilding it from the published source gives the same code, but not a
byte-identical file, because the kernel records its build time and host.

## Licenses and credits

coreboot and the Linux kernel are GPL-2.0. The full coreboot source is in this
folder. The kernel is unmodified Linux 7.3-rc6, mirrored here from kernel.org
(https://git.kernel.org/torvalds/t/linux-7.3-rc6.tar.gz), plus the one patch
and config in this folder.

**Written offer:** for at least three years from this release, anyone can
request a complete copy of the corresponding kernel and coreboot source for
this firmware by emailing packages@pianort.com. It's provided at no more than
the cost of sending it. PianoRT's own scripts and patches are MIT where they aren't part of
coreboot or Linux. Intel FSP and microcode are redistributed under Intel's
licenses in `licenses/`. Thanks to the coreboot and Linux communities, and to
the MrChromebox project for its work on Chromebox firmware.
