52e1deebd0
Submodule pointer updates (forks already pushed):
- base: netstack generic ReaderPool + OwnedFd bridge (36dddf23)
- bootloader, installer, userutils: upstream-tracking commits
Parallel agent work swept:
- kf6-kcmutils: recipe + CMakeLists + initial migration patch
- redbear-iwlwifi: Cargo.toml update
- tlc: MC-PARITY-AUDIT + README updates
- xwayland recipe+patch removed (stale)
- scripts: verify-patch-content.py, lint-config-paths.sh
- docs: CONSOLE-TO-KDE-DESKTOP-PLAN, DBUS-INTEGRATION-PLAN,
HARDWARE-VALIDATION-MATRIX, REDBEAR-FULL-SDDM-BRINGUP,
UPSTREAM-SYNC-PROCEDURE, README
102 lines
12 KiB
Markdown
102 lines
12 KiB
Markdown
# Hardware Validation Matrix — Red Bear OS
|
||
|
||
| Component | QEMU | Bare Metal | Hardware | Notes |
|
||
|-----------|------|------------|----------|-------|
|
||
| **Storage** | | | | |
|
||
| AHCI SATA | ✅ | 🔲 | [MISSING] | NCQ structure present, not runtime-validated. No AHCI-capable SATA controller inventoried for bare-metal testing. |
|
||
| NVMe | 🔲 | 🔲 | [AVAILABLE] (LG Gram: SK Hynix [1c5c:1959]) | 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 c101–c106. MLD Rust layer code-complete (23 tests), never HW-validated. See `HARDWARE-NETWORKING-INVENTORY.md` §2.6. |
|
||
| 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).** |
|
||
| **Audio** | | | | |
|
||
| Intel HDA | 🔲 | 🔲 | [AVAILABLE] (LG Gram: cAVS/SOF [8086:7728]) | 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. |
|
||
| AC97 | 🔲 | 🔲 | [MISSING] | Basic driver. No AC97 hardware inventoried. |
|
||
| **Input** | | | | |
|
||
| PS/2 | ✅ | 🔲 | [AVAILABLE] (LG Gram: i8042 keyboard, AUX disabled) | 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) | 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]) | 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) | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open. |
|
||
| 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. |
|
||
| **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. |
|
||
| **CPU/Power** | | | | |
|
||
| cpufreqd | 🔲 | 🟡 (BM MSR path fixed) | [AVAILABLE] (LG Gram: Arrow Lake-H HWP) | 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) | ACPI thermal zones, not HW-validated. MSR fallback path exists. |
|
||
| **SMP** | | | | |
|
||
| x2APIC/SMP | ✅ | ✅ | [AVAILABLE] (Threadripper 128-thread + LG Gram 16-core hybrid) | Multi-core works. AMD Threadripper 128-thread bare-metal proven. Intel Arrow Lake-H 16-core hybrid (P/E/LP-E) expected. |
|
||
| **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 `local/docs/evidence/driver-manager/D5-AUDIT.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.
|
||
|
||
### 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/legacy-obsolete-2026-07-25/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.
|