Files
RedBear-OS/local/docs/HARDWARE-VALIDATION-MATRIX.md
T

117 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hardware Validation Matrix — Red Bear OS
| Component | QEMU | Bare Metal | Hardware | Notes |
|-----------|------|------------|----------|-------|
| **Storage** | | | | |
| AHCI SATA | ✅ | 🔲 | [AVAILABLE] (MS-7D70: AHCI SATA (ASM1064), level: compile) | NCQ structure present, not runtime-validated. Refresh rule: refresh at every gate: 23 (Gate A), 28 (Wi-Fi), 32 (coexistence), 34 (modeset), 40 (Gate B). |
| NVMe | 🔲 | 🔲 | [AVAILABLE] (LG Gram: SK Hynix [1c5c:1959]; MS-7D70: 2× NVMe SSD, level: compile) | Basic driver, no multiqueue. NVMe is class-matched (`class=1 subclass=8`), initfs-capable. The LG Gram's NVMe is available for Phase 1 BM validation. |
| virtio-blk | ✅ | N/A | N/A | QEMU only |
| **Network** | | | | |
| e1000d (Intel Gigabit) | ✅ (e1000e emul.) | 🔲 | [MISSING] | ITR structure present, no offload validation. QEMU `-device e1000e` emulates 82574L `8086:10d3` — proven bounded (DHCP+ping). Physical e1000/e1000e NIC not identified in any inventoried bench. Modern I219/I225 NOT supported. |
| rtl8168d (Realtek Gigabit) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | PHY config present. QEMU has no rtl8168 model — must be tested bare metal. No physical RTL8168/8169 NIC identified in any bench. |
| rtl8139d (Realtek Fast Eth.) | 🔲 (QEMU avail., not proven) | 🔲 | [DEFERRED] | Legacy 10/100 NIC. QEMU `-device rtl8139` available but not runtime-proven. Physical RTL8139: legacy PCI, deprioritized vs. gigabit.+ |
| ixgbed (Intel 10GbE) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | Port of ixy.rs, <1000 LoC, MSI-X. 40 PCI IDs supported (82599 family). No physical 10GbE NIC (X520/X540/X550) inventoried. |
| virtio-netd (VirtIO) | ✅ (MSI-X proven) | N/A | N/A | QEMU only. MSI-X + bounded VM networking baseline proven. |
| redbear-iwlwifi (Intel Wi-Fi) | 🔲 (VFIO only) | 🔲 | [AVAILABLE] (LG Gram BE201 [8086:7740]) | MVM candidates: AX210/AX211/AX201/9462 (all [MISSING] hardware). MLD candidates: BE201 [8086:7740] (only MLD device — [AVAILABLE] in LG Gram). VFIO/passthrough framework exists; no emulated Wi-Fi in QEMU. Firmware pre-staged for BE201 c101c106. MLD Rust layer code-complete (23 tests), never HW-validated. See `HARDWARE-NETWORKING-INVENTORY.md` §2.6. |
| redbear-mt7922 (MediaTek Wi-Fi) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: MT7922 [14c3:0616], level: —) | mt7921-family SoftMAC; bounded mt76 C transport + Rust SoftMAC/MLME planned (todo 25). |
| redbear-ecmd (USB CDC ECM) | 🔲 (not tested) | 🔲 | [MISSING] | USB CDC ECM/NCM driver for USB-Ethernet dongles. No dongle inventoried. **Critical: only viable interim network for LG Gram (no wired NIC).** |
| redbear-r8125d (Realtek 2.5GbE) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: RTL8125 [10ec:8125], level: —) | New Rust driver planned (todo 21); existing rtl8168d explicitly excludes 8125. |
| **Audio** | | | | |
| Intel HDA | 🔲 | 🔲 | [AVAILABLE] (LG Gram: cAVS/SOF [8086:7728]; MS-7D70: AMD HD Audio [1022:15e3], level: compile) | Codec detection + jack sense added, not validated. LG Gram HDA is cAVS/DSP-based legacy HDA cannot reach ALC298 codec behind DSP; needs SOF port. MS-7D70 ihdad driver-manager match is Intel-only today; AMD widening planned. |
| AC97 | 🔲 | 🔲 | [MISSING] | Basic driver. No AC97 hardware inventoried. |
| **Input** | | | | |
| PS/2 | ✅ | 🔲 | [AVAILABLE] (LG Gram: i8042 keyboard, AUX disabled; MS-7D70: absent, level: —) | QEMU keyboard/mouse work. LG Gram has PS/2 keyboard (AUX port disabled — handled by ps2d). |
| USB HID | ✅ | 🔲 | [AVAILABLE] (LG Gram: USB keyboard/mouse attachable; MS-7D70: USB HID, level: compile) | Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW. |
| I2C-HID Touchpad | 🔲 | 🔲 | [AVAILABLE] (LG Gram: 04CA:00CC on LPSS DesignWare I2C) | Full I2C chain code-complete (dw-i2c engine, LPSS PCI bring-up, i2c-hidd with multitouch parser). Runtime proof pending Phase 1 boot. |
| **USB** | | | | |
| xHCI host controller | ✅ | 🔲 | [AVAILABLE] (LG Gram: 2× xHCI [8086:7ec0, 8086:777d]; MS-7D70: 5× xHCI host controller, level: compile) | Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated. LG Gram quirks decoded (SPURIOUS_SUCCESS, INTEL_HOST, AVOID_BEI, LPM_SUPPORT). |
| EHCI/UHCI/OHCI controllers | 🔲 | 🔲 | [MISSING] | Compile clean; runtime enumeration proofs planned (P8-B). No EHCI/UHCI/OHCI hardware identified in inventoried benches. |
| USB storage (BOT) | ✅ | 🔲 | [AVAILABLE] (any USB mass-storage device; MS-7D70: USB storage BOT, level: compile; UAS, level: —) | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open. UAS dispatch (protocol 0x62) not yet wired. |
| USB hub (non-root) | ✅ | 🔲 | [MISSING] | Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock). No physical hub inventoried. |
| **Bluetooth** | | | | |
| redbear-btusb btmtk (MediaTek Bluetooth) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: MT7922 USB BT [0e8d:0616], level: —) | HCI core exists; btmtk WMT module + real USB HCI transport planned (todo 29). |
| **GPU/Display** | | | | |
| VESA | ✅ | 🔲 | [AVAILABLE] (LG Gram: GOP framebuffer) | QEMU framebuffer works. LG Gram VESA via GOP framebuffer — vesad fix for bare metal landed (2026-06-19). |
| virtio-gpu | ✅ | N/A | N/A | 2D only, QEMU |
| redox-drm (Intel MTL iGPU) | 🔲 | 🔲 | [AVAILABLE] (LG Gram: MTL [8086:7d51]) | 0x7D51 in INTEL_GEN12_MTL_IDS. DMC load, GMBUS EDID, CPU PWM backlight, GuC/HuC/GSC manifest — all code-complete (2026-07-22). Display init assumes Gen8-era reg layout. No HW validation. |
| amdgpu / redox-drm (AMD Raphael iGPU) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: Raphael iGPU [1002:164e], level: —) | DCN 3.1.5; currently BIOS-disabled; existing bounded AMD glue has wrong BAR model for APU. |
| **CPU/Power** | | | | |
| cpufreqd | 🔲 | 🟡 (BM MSR path fixed) | [AVAILABLE] (LG Gram: Arrow Lake-H HWP; MS-7D70: CPU power/CPPC, level: compile) | Governors implemented, MSR path fixed (2026-06-19). Bare-metal boot verified with HWP on Intel laptop. Not yet validated on LG Gram specifically. |
| thermald | 🔲 | 🔲 | [AVAILABLE] (LG Gram: TZ00 + MSR-based; MS-7D70: thermal k10temp [1022:14e3], level: compile) | ACPI thermal zones, not HW-validated. MSR fallback path exists. |
| ACPI S5 shutdown / FADT reboot | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: ACPI shutdown/reboot, level: compile) | S5 + reset-reg paths exist; bounded fallback chain planned (todo 7). |
| AMD-Vi IOMMU | ✅ | 🔲 | [AVAILABLE] (MS-7D70: AMD-Vi IOMMU, level: compile) | IVRS parser exists; QEMU first-use proof passes; real-hardware validation open. |
| **SMP** | | | | |
| x2APIC/SMP | ✅ | ✅ | [AVAILABLE] (Threadripper 128-thread + LG Gram 16-core hybrid; MS-7D70: MADT/x2APIC CPU enumeration, level: compile) | Multi-core works. AMD Threadripper 128-thread bare-metal proven. Intel Arrow Lake-H 16-core hybrid (P/E/LP-E) expected. |
| dual IO-APIC | ✅ | 🔲 | [AVAILABLE] (MS-7D70: dual IO-APIC, level: compile) | IO-APIC present; dual controller wiring code-complete. |
| **Platform** | | | | |
| SMBus (FCH) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: SMBus [1022:790b], level: —) | No driver today; redbear-smbusd planned (todo 38). |
| GPIO (AMDIF031) | 🔲 | 🔲 | [AVAILABLE] (MS-7D70: GPIO AMDIF031, level: —) | No ACPI HID→driver spawn path today; gpio-amdpt planned (todo 38). |
| **Driver Manager (driver-manager vs pcid-spawner)** | | | | |
| D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) | ✅ | 🔲 | N/A (code) | Code complete; 52 tests pass; see the D5 capability audit (removed in the 2026-07-27 consolidation; see `local/docs/SUPERSEDED-DOC-LOG.md`) |
| D1 P1 SpawnDecision + format coexistence + policy blacklist | ✅ | 🔲 | N/A (code) | `spawn_decision_gate()` consults env/CLI/blacklist; `convert_legacy` reads legacy pcid.d format |
| D1 P1 PciQuirkFlags wired into spawn | ✅ | 🔲 | N/A (code) | `driver-manager/src/quirks.rs` consumes `redox-driver-sys`; NEED_FIRMWARE defers probe; NO_MSIX/NO_MSI/FORCE_LEGACY_IRQ signal intx-fallback via env; DISABLE_ACCEL signals accel-disable |
| D1 P1 `/etc/driver-manager.d/` policy loader | ✅ | 🔲 | N/A (code) | `local/recipes/system/driver-manager/source/src/policy.rs`; reads TOML blacklist; consulted at probe |
| D2 SMP concurrent probe (worker pool over `std::thread::scope`) | ✅ | 🔲 | N/A (code) | `redox-driver-core/src/concurrent.rs` with `CountingSemaphore`; tested on host; opt-in via `--concurrent=N` |
| D2 PM hooks (Driver::suspend/resume + signal_then_collect) | ✅ | 🔲 | N/A (code) | Real SIGTERM/SIGKILL in `DriverConfig`; needs iommu/pcid SetPowerState wiring for actual D3 |
| D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) | ✅ | 🔲 | N/A (code) | Trait API complete; needs pcid AER wake source |
| D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers | ✅ Library | 🔲 HW | N/A (code) | `redox-driver-core/src/modern_technology.rs` — concrete implementations; no driver-manager wrapper (orchestrator removed at v1.4 per policy decision) |
| D3 hotplug | 🟡 Polling fallback | 🔲 | N/A (code) | Reduced to 250ms; `Bus::subscribe_hotplug` returns `Unsupported` until pcid event delivery lands |
| D4 audit-no-stubs | ✅ | N/A | N/A (code) | `local/scripts/driver-manager-audit-no-stubs.py` scans 38 files; **0 violations** at v1.7 |
| D4 SIGHUP reload worker | ✅ | N/A | N/A (code) | `driver-manager/src/sighup.rs`; worker polls `AtomicBool` and calls `SharedBlacklist::replace()`; 1 unit test; `libc::signal` install is left to the host program |
| D4 blackbox test scripts | ✅ | N/A | N/A (code) | 8 scripts in `local/scripts/test-driver-manager-*.sh` |
| D4 heartbeat publisher | ✅ | N/A | N/A (code) | `driver-manager/src/heartbeat.rs`; writes JSON to `/var/run/driver-manager.heartbeat.json` every 5s; 3 unit tests |
| D4 AER listener infrastructure | ✅ | N/A | N/A (code) | `driver-manager/src/aer.rs`; polls `/scheme/acpi/aer`; 7 unit tests; falls back to log-and-no-op when scheme is absent |
| C0 dormant service files | ✅ | N/A | N/A (code) | Committed in `local/sources/base` submodule (commit `0407d9cc`); both `ConditionPathExists`-gated |
| D5 feature-complete gate | ✅ Code | 🔲 HW | [AVAILABLE] (Threadripper AMD + LG Gram Intel Alder Lake class) | All code + tests pass; awaiting real-hardware validation on AMD Threadripper + LG Gram Arrow Lake-H. |
✅ = validated 🔲 = implemented, not validated 🟡 = partial N/A = not applicable
### Hardware Status Codes (new, 2026-07-26)
| Code | Meaning |
|------|---------|
| `[AVAILABLE]` | Physical hardware present and accessible to operator |
| `[MISSING]` | Hardware not present / not acquired — blocks bare-metal validation for this component |
| `[DEFERRED]` | Hardware present or acquirable but not yet integrated into the test bench |
| `N/A` | Not applicable: component is virtual (e.g. virtio), code-only, or has no hardware dependency |
See `local/docs/HARDWARE-NETWORKING-INVENTORY.md` for full hardware bench inventory,
per-driver PCI ID tables, Wi-Fi AP/card/firmware details, peer system specs, and
acquisition recommendations. That document is the canonical hardware inventory for
this validation matrix.
### Status note (2026-07-26)
- **Hardware inventory created:** `local/docs/HARDWARE-NETWORKING-INVENTORY.md` is the new Phase -1 gate. It enumerates all known hardware, marks missing items, and lists acquisition priorities.
- **Critical networking gaps:** (1) Threadripper build host NIC inventory never collected — operator must check. (2) No USB-Ethernet dongle for LG Gram interim networking. (3) No dedicated Wi-Fi AP for bounded validation. (4) No physical Intel/Realtek NIC cards for bare-metal Ethernet validation.
- **LG Gram hardware available:** Intel BE201 [8086:7740] Wi-Fi, NVMe SK Hynix, 2× xHCI, Intel MTL iGPU [8086:7d51], I2C-HID touchpad, PS/2 keyboard, Arrow Lake-H HWP — all mapped to drivers in this matrix. Phase 1 BM boot is the gate.
- **Network matrix expanded from 3 rows to 8 rows** (added: rtl8139d, ixgbed, redbear-iwlwifi, redbear-ecmd) — per the systematic networking fix plan, all network drivers must be tracked individually with hardware availability.
### MS-7D70 matrix refresh rule
All `[AVAILABLE] (MS-7D70: ...)` markers refresh at every ryzen-7000-x670e-compat plan gate: 23 (Gate A), 28 (Wi-Fi), 32 (coexistence), 34 (modeset), 40 (Gate B).
### Prior Status note (2026-07-20)
- The login-based QEMU proofs (PS/2 + serio, monotonic timer, IOMMU first-use, USB storage BOT)
now run through `local/scripts/qemu-login-expect.py` (stdlib python) instead of the host
`expect` tool — no external dependency, per-step timeouts, and safe retry on premature QEMU
death. See `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` § "Runtime proof
status (2026-07-20)".
- MSI-X (virtio-net) and xHCI interrupt-driven mode were re-confirmed on the current
`redbear-mini` ISO — once more on 2026-07-20 ~09:10 JST via `test-lowlevel-controllers-qemu.sh`
(log-grep legs, unaffected by host contention).
- Re-confirmation of the login-based legs (PS/2, timer, BOT) with the new
harness is pending an uncontended host — the current build host runs a parallel QEMU-testing
workload (a concurrent agent session under `~/.claude/jobs/` with its own QMP-controlled
guest) that SIGKILLs competing QEMU processes; boots reach getty but the
login prompt is not observed within the timeout there. The ✅ marks above reflect prior
validation of those legs. A retry loop (`/tmp/opencode/a2-retry.sh`) is armed to run the
PS/2, timer, and USB-storage legs automatically once the foreign QEMU workload exits.
- The IOMMU first-use leg currently skips on `redbear-mini` runs because
`build/x86_64/redbear-full/harddrive.img` is absent — a `redbear-full` build is required
to re-confirm that leg.
- Display boots (`-vga std`) can freeze at the fbcond `Performing handoff` step (the
`reopen_for_handoff()` path can block rather than return `EAGAIN` for retry). Headless
(`-vga none`) boots avoid it. Tracked separately on the graphics stack.