Capabilities audit — classify every RV1106 SoC block against a 6.18 driver: GMAC (wired eth, enabled on-board), crypto-v3, trngv1 (hw RNG), OTP, mailbox, NPU, audio codec/DSM, pvtm still to port; camera/ISP + SPI are N/A (no HW). Provenance ledger — per [maintainer]'s openness directive extended to already-ported drivers: every ported driver is GPL-2.0 kernel source (vendor-src or mainline-sibling); the only binary in the whole path is on-device wifi-chip firmware, which by construction cannot be host source. No vendor binary is loaded into our kernel. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
55 lines
3.3 KiB
Markdown
55 lines
3.3 KiB
Markdown
# Driver provenance & openness ledger
|
|
|
|
[maintainer]'s directive: **every** driver we run on the self-built 6.18 kernel must be
|
|
open source we can read, harden, and bend — not a binary blob — and this applies
|
|
to the drivers *already* ported, not just the new ones. This ledger records, for
|
|
each, where the source came from and under what license. Every entry is GPL-2.0
|
|
kernel source; nothing here is a binary-only kernel module.
|
|
|
|
## Legend
|
|
- **vendor-src** — C source from the Rockchip 5.10 vendor SDK
|
|
(`flare-edge/sdk/sysdrv/source/kernel/`), forward-ported 5.10 → 6.18.
|
|
- **mainline-sibling** — 6.18 mainline driver, extended with an rv1106 data table
|
|
derived from a sibling SoC (rv1126/px30/rk3562) whose IP block matches.
|
|
- All Rockchip vendor kernel code is a GPL-2.0 fork of mainline Linux → GPL-clean.
|
|
|
|
## Already-ported drivers (audited for openness per directive)
|
|
| Driver | Origin | License | Openness notes |
|
|
|---|---|---|---|
|
|
| clk-rv1106 (CRU) | vendor-src | GPL-2.0 | full register/PLL source; readable + hardenable |
|
|
| pinctrl-rockchip | vendor-src | GPL-2.0-only | rv1106 mux/drive tables in-source |
|
|
| rockchip_vop_reg VOP | mainline-sibling (rv1126) | GPL-2.0-only | data table only; no blob |
|
|
| phy-rockchip-inno-usb2 | mainline-sibling + vendor regs | GPL-2.0-or-later | rv1106_phy_cfgs from TRM/vendor |
|
|
| rockchip_saradc | mainline-sibling (v2) | GPL-2.0-or-later | 2-ch data table |
|
|
| rtc-rockchip | vendor-src | GPL-2.0 | whole driver, source |
|
|
| rockchip_thermal (tsadc) | vendor-src | GPL-2.0-only | rv1106 code-table + init from source |
|
|
| RGA (rga3/) | vendor-src | GPL-2.0 | full multicore 2D engine source |
|
|
|
|
## In-flight
|
|
| Driver | Origin | License | Openness notes |
|
|
|---|---|---|---|
|
|
| AIC8800 wifi/BT | vendor-src (AICSemi) | `MODULE_LICENSE("GPL")` | full full-MAC source; 50 files use GPL-only kernel/cfg80211/sdio symbols; **no** proprietary/redistribution restriction in-tree |
|
|
|
|
## The one unavoidable blob — and why it is *not* kernel code
|
|
- **`aic8800dc_fw`** (`/oem/usr/ko/`) is device firmware that the GPL host driver
|
|
*uploads to the wifi chip's on-die processor*. It never runs on the A7; it is not
|
|
linked into the kernel. This is the standard Linux firmware split (cf. every
|
|
ath10k/mt76 device) and is the only binary in the wifi path — the driver itself
|
|
is source. No open re-implementation of the AIC on-die MAC firmware exists;
|
|
reverse-engineering it is out of scope for the panel and buys nothing (the host
|
|
driver is where our control + hardening lives).
|
|
|
|
## NPU — the openness line we will not cross
|
|
The **kernel** rknpu driver is portable GPL source (`npu/PORT-PLAN.md`). What is
|
|
closed is the *userspace* RKNN runtime + the regcmd stream format — a binary blob.
|
|
Per directive we do **not** ship that blob; if NPU compute is ever wanted, the open
|
|
path is a from-scratch/reverse-engineered regcmd encoder, tracked separately, never
|
|
a vendored binary runtime. (See `npu/PORT-PLAN.md` and the graphics investigation.)
|
|
|
|
## Posture
|
|
Every kernel driver we run is source we hold. The only binaries in the whole
|
|
enablement are on-device *firmware* (wifi chip), which by construction cannot be
|
|
source on the host. That is the intended openness boundary: **host = source,
|
|
device-internal firmware = vendor blob**, and no vendor binary is ever loaded into
|
|
*our* kernel's address space.
|