Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save runlevel5/8b4bbff69df87eeb9d25fcf0e29339cf to your computer and use it in GitHub Desktop.

Select an option

Save runlevel5/8b4bbff69df87eeb9d25fcf0e29339cf to your computer and use it in GitHub Desktop.
Raptor Blackbird firmware: upstream vs downstream forks
# op-build (open-power) vs Raptor downstream — comparison
Date: 2026-05-11
Our tree: `~/Work/op-build` on branch `bump-linux-6.12.87` / `amdgpu-navi23` (forks from open-power/op-build master @ `59464d53`)
Raptor tree: `~/Work/op-build-blackbird` at tag `raptor-v2.10` (Feb 15, 2024)
Raptor repo URLs:
- `gitlab.raptorengineering.com/openpower-firmware/machine-talos-ii/op-build.git` (used by our local clone)
- `gitlab.raptorengineering.com/openpower-firmware/machine-blackbird/op-build.git` (Blackbird-specific variant, shares most code)
Both their Talos II and Blackbird op-build trees inherit the same op-build base; only the platform defconfigs and machine-xml diverge.
---
## TL;DR
- **64+ patches** in Raptor's tree on top of an old upstream op-build snapshot.
- **None of our component pins conflict with Raptor's** — they fork everything to their own GitLab and live on their own patch trains.
- Two of our recent fixes (cp duplicate, TI USB kexec) **already exist in Raptor's tree** with the same or similar approach.
- Raptor's architecture for AMD GPU firmware is fundamentally different from ours: they store firmware in a separate **BOOTKERNFW PNOR partition** as squashfs, mount it at boot, rsync to RAM. We embed firmware in the cpio initramfs.
- Our work targets **Navi 23 (RDNA2)**, which is newer than anything Raptor has enabled (they enabled SI / Southern Islands).
- Raptor's tree is on **Linux 6.6.16** + **buildroot 2018.02**; we're on **Linux 6.12.87** + **buildroot 2025.02**.
---
## Repository overview
| | Ours | Raptor |
|---|---|---|
| Base op-build | open-power/op-build `master` (2026-03-11) | snapshot of upstream + 64 downstream commits |
| Branch / tag | `bump-linux-6.12.87`, `amdgpu-navi23` | tag `raptor-v2.10` |
| Working dev branch | n/a (master) | `02-29-2024` (dated branch convention) |
| Linux kernel | 6.12.87 (kernel.org tarball) | v6.6.16 (custom fork in Raptor GitLab) |
| Buildroot | 2025.02-op-build | 2018.02-22790 |
---
## Patches that overlap with our work
| Our commit | Raptor commit | Verdict |
|---|---|---|
| `7777eacc` openpower-pnor: Make debug-tarball cp tolerant of duplicate sources | `19590149` Suppress warning created by attempting to double-copy PNOR layout XML into debug tarball | **Byte-identical fix.** Both change `cp -r` → `cp -rn` on the same line in `openpower-pnor.mk`. Strong validation that our approach matches Raptor's independent solution from 2024. |
| `linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch` (forward-ported from 5.10 → 6.12.87) | `fc528778` Work around TI USB controller kexec() bug | **Different solution.** Raptor uses a userspace fix: `rmmod xhci_pci; rmmod xhci_hcd` in `petitboot/kexec-restart` before `kexec -f -e`. Ours patches the kernel. Theirs avoids a kernel patch but at the cost of running rmmod every kexec. **Consider switching to Raptor's pattern** for upstreaming — removes the kernel-patch carrying cost. |
| `984b4bde` openpower-pnor: Expand BOOTKERNEL section to 24 MiB | `b387cab1` Revup PNOR Flash layout | **Different approach.** Raptor doesn't expand BOOTKERNEL — they sidestep the problem entirely with the BOOTKERNFW architecture (see below). Their `b387cab1` is just a SHA bump of their PNOR fork. |
## Raptor patches relevant to AMD GPU work
- **`linux/0005-powerpc-Add-gpr1-and-fpu-save-restore-functions.patch`** (Timothy Pearson, Feb 2024) — needed to link `amdgpu.ko` on PowerPC with size-optimized kernel. Caused by gcc emitting external `_savegpr1_*`/`_savefpr_*` references when building amdgpu, which then can't be resolved without libgcc. **Not needed on Linux 6.12.87** — verified that our `amdgpu.ko` already has `_savefpr_*` symbols defined natively. If you ever backport to 5.10 or 5.15, you would need this.
- **`4b2ed089` Enable DisplayCore support for AMD SI GPUs in skiroot** — adds `CONFIG_DRM_AMD_DC_FP=y` and `CONFIG_DRM_AMD_DC_SI=y`. SI = Southern Islands (HD 7000 series, ~2012). Not needed for Navi 23.
- **`8c830306` Enable Infiniband / NVDIMM / additional video drivers in skiroot kernel** — already enables `CONFIG_DRM_AMDGPU=m`, `CONFIG_DRM_RADEON=m`, `CONFIG_DRM_AMDGPU_SI=y`, `CONFIG_DRM_AMDGPU_CIK=y`, **`CONFIG_DRM_SIMPLEDRM=m`**, **`CONFIG_DRM_OFDRM=m`** (Open Firmware DRM — usable as a very-early-boot framebuffer driver), `CONFIG_DRM_GM12U320=m`, `CONFIG_DRM_GUD=m`.
- **`d2433fbc` Work around squashfs data corruption issues during BOOTKERNFW firmware load** — Raptor hit I/O corruption when amdgpu reads firmware directly from the squashfs-on-mtdblock device. Their fix: rsync the entire firmware tree to RAM-backed `/lib/firmware` at boot, so amdgpu reads from RAM. We don't hit this because our firmware is already RAM-resident (cpio-embedded).
## Other notable Raptor patches
- **`aef76a11`** Build hostboot with secure boot verification enabled by default (uses public well-known transition keys — preserves owner control).
- **`e4243bd6`** Enable squashfs + additional filesystem drivers in skiroot (cd9660, exfat, ntfs3, hfsplus).
- **`7dc67cd5`** Re-enable powersave modes in skiroot on POWER9.
- **`0c8fc449`** Enable `CONFIG_CPU_FREQ_STAT` in skiroot.
- **`124f6478`** Use new debugfs method to signal IPL complete to BMC.
- **`97f5f2c4`** mpt3sas driver crash fix.
- **`6ec3ff37`** Removed the `ocmb-explorer-fw` package entirely (Centaur/OMI memory controller firmware — Blackbird/Talos II don't use OMI DDIMMs).
- 5 extra Linux kernel patches in `openpower/linux/`:
- `0003-drm-ast-Add-option-to-initialize-palette-on-driver-l.patch` (Tim Pearson) — fixes VGA palette init on systems without x86 option-ROM execution
- `0004-Force-ASpeed-RAMDAC-palette-reset.patch`
- `0005-powerpc-Add-gpr1-and-fpu-save-restore-functions.patch` (see above)
- `0006-Force-ASpeed-DVO-enable.patch` (always-enable DVO detection in AST driver)
---
## Component versions side-by-side
### Toolchain & build environment
| Component | Ours | Raptor |
|---|---|---|
| Buildroot | **2025.02-op-build** | **2018.02-22790** (~7 yr older) |
| GCC | 13.3.0 | 11.x |
| Binutils | 2.43.1 | 2.32.x |
### Firmware components
| Component | Ours (open-power upstream) | Raptor (Raptor GitLab fork) |
|---|---|---|
| hostboot | `6b6646f0` (2026-03-10) | `a98d7347` (2024-02-15 era) |
| skiboot | `v7.1-131-g9abbfe67df5b` | `ecb1dc7c` |
| hcode | `hw091323a.opmst` | `9b705d0e` |
| sbe | `e66523bb` | `f5dcee93` |
| occ | `3515ab0e` | `9ddc6ba5` |
| petitboot | 1.15 (release tarball) | `695b1d97` (git pin from fork) |
| machine-xml | (per-platform tree) | `e782e308` (Blackbird) / `cbd11e94` (Talos II) |
| libflash | follows skiboot | `ecb1dc7c` (same as skiboot fork) |
| openpower-ffs | `3ec70fbc` | `3ec70fbc` (**identical**) |
| openpower-pnor | `3e9fa97d` (open-power/pnor) | `92c0451c` (**Raptor's pnor fork**) |
| ima-catalog | `89e00ee3` | `3d30c7ac` |
| ppe42-gcc | `b4772a9f` | `84a6a88e` |
| ppe42-binutils | `c615a89c` | `2552229791` |
| capp-ucode | `p9-dd2-v4` | `p9-dd2-v4` (same tag, separately hosted) |
| pnv-lpc | not pinned | `90e170ca` |
| ocmb-explorer-fw | 4.0 | **REMOVED** |
### Linux kernel
| | Ours | Raptor |
|---|---|---|
| Version | 6.12.87 | v6.6.16 |
| Source | `kernel.org/.../linux-6.12.87.tar.xz` | `gitlab.raptorengineering.com/openpower-firmware/talos-op-linux` (Blackbird) or `.../common-cpu-ibm-power9/op-linux` (Talos II) — **custom fork** |
| In-tree patches | 2 (xhci, EXTRAVERSION) | 6 (xhci, EXTRAVERSION, AST palette, AST RAMDAC reset, AST DVO enable, powerpc gpr1/fpu) |
| Skiroot defconfig location | `openpower/configs/linux/skiroot_defconfig` | same |
Raptor's Linux fork may carry additional patches in the git tree itself (not visible in op-build); a full diff of `talos-op-linux` v6.6.16 against `torvalds/linux` v6.6.16 would reveal them.
---
## Architectural divergence: BOOTKERNFW partition
Raptor stores firmware blobs (linux-firmware) in a **separate PNOR partition** called `BOOTKERNFW`, populated with a squashfs image. At boot, `openpower/overlay/sbin/mount_fw_partition`:
1. Modprobes `powernv_flash` and `mtdblock`.
2. Finds `BOOTKERNFW` in `/proc/mtd`, mounts the corresponding `/dev/mtdblockN` as `squashfs ro` at `/lib/firmware.bootkernfw`.
3. **rsyncs** the contents to RAM-backed `/lib/firmware` (works around the squashfs-on-mtdblock I/O race that caused amdgpu firmware loads to fail).
| | Raptor (BOOTKERNFW) | Ours (cpio-embedded) |
|---|---|---|
| Firmware location | Separate PNOR partition, squashfs | Inside `rootfs.cpio.xz` inside zImage |
| Pressure on BOOTKERNEL slot | Low | High — every firmware byte counts |
| Update firmware separately? | Yes (reflash just BOOTKERNFW section) | No (rebuild kernel) |
| Squashfs corruption workaround needed? | Yes (Raptor's `d2433fbc` patch) | No |
| Implementation complexity | Higher (custom layout, overlay script) | Lower |
Raptor's approach is more elegant for larger firmware trees and decoupled updates. Our approach is simpler for a single-target firmware build.
This is the architectural reason our `984b4bde` (BOOTKERNEL slot expansion) doesn't have an analog in Raptor's tree — they solved the same root problem (kernel + firmware doesn't fit in BOOTKERNEL) with a different architecture.
---
## Practical implications for upstreaming
1. **`cp -rn` fix is independently validated** — Raptor wrote the byte-identical fix 2 years ago. Strong signal that upstream maintainers should accept ours.
2. **Our xhci kernel patch is more invasive** than Raptor's `rmmod` pre-kexec script. For minimum upstream resistance, consider swapping to a `petitboot/kexec-restart` userspace fix (no kernel patch to carry forward).
3. **Our BOOTKERNEL expansion is a legitimate fix** for the cpio-embedded-firmware path that op-build upstream currently uses. Upstream maintainers may legitimately ask "why not adopt Raptor's BOOTKERNFW pattern?" — be prepared with the trade-off discussion (simplicity vs flexibility).
4. **Navi 23 amdgpu enablement is genuinely net-new** in op-build territory. Raptor stopped at SI/CIK + Polaris; nobody upstream has enabled RDNA2 in skiroot.
5. **Don't backport to 5.10** without Raptor's `0005-powerpc-...` patch (Linux 5.x needs it for amdgpu link on PowerPC).
6. **Raptor's per-platform machine-xml** is something to be aware of if op-build ever needs to support both Blackbird and Talos II from the same tree (today, upstream op-build uses one shared machine-xml; Raptor has split it).
7. **`ocmb-explorer-fw` removal** is a precedent — if our target builds (Blackbird) don't use OMI DDIMMs, we can disable `BR2_PACKAGE_OCMB_EXPLORER_FW` in `blackbird_defconfig` to shave a small amount of build time / PNOR space.
---
## Recommendations / next steps
- **Consider adopting Raptor's `rmmod` xhci approach** — replace `linux/0001-xhci-Reset-controller-on-xhci-shutdown.patch` with a userspace script change in `openpower/package/petitboot/kexec-restart`. Cleaner, removes a kernel patch we have to forward-port forever.
- **Keep our BOOTKERNEL expansion** unless we want to ALSO adopt the BOOTKERNFW architecture (much bigger change).
- **No need to backport `0005-powerpc-gpr1/fpu-save-restore`** at 6.12.87.
- **Cherry-pick candidates from Raptor** (independent of our kernel/amdgpu work) — these are all good hygiene:
- `e4243bd6` (squashfs/exfat/ntfs3 filesystem drivers in skiroot)
- `7dc67cd5` (re-enable powersave on POWER9)
- `0c8fc449` (CPU freq stats)
- `97f5f2c4` (mpt3sas crash fix)
- AST graphics patches (`0003`/`0004`/`0006`) — relevant if anyone uses the BMC's VGA out
---
## Files of interest in Raptor's tree
- `openpower/overlay/sbin/mount_fw_partition` — BOOTKERNFW mount + rsync script
- `openpower/package/petitboot/kexec-restart` — xhci rmmod pre-kexec workaround
- `openpower/package/openpower-pnor/openpower-pnor.mk` — points at their PNOR fork
- `openpower/configs/blackbird_defconfig` vs `openpower/configs/talos_defconfig` — small per-platform differences (mostly machine-xml SHA)
- `openpower/linux/0003`..`0006` — Raptor's downstream Linux kernel patches
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment