Created
May 11, 2026 02:02
-
-
Save runlevel5/8b4bbff69df87eeb9d25fcf0e29339cf to your computer and use it in GitHub Desktop.
Raptor Blackbird firmware: upstream vs downstream forks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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