Per [maintainer]: forward-port the RV1106 SoC enablement from the vendor 5.10 tree to 6.18 LTS ourselves (no plan44), on our Buildroot. Verified mainline has ZERO RV1106 support, so this is a whole-BSP port. docs/bringup.md = the console-first milestone plan + method (sibling-delta from rv1126/rv1108, which exist in both trees). M1 (clk driver) underway: gcc-8.3 builds 6.18; wired CLK_RV1106; ported 55 CRU macros + the panic_notifier header split + the armclk signature change (flagged PORT-VERIFY for the CPU-mux, TRM-check needed). Captured in rv1106-enablement/. Honest: first of ~120 files; multi-month effort. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
2.9 KiB
RV1106 → 6.18 forward-port — live status
Target: Linux 6.18.46 (vanilla, flare-edge/research/linux-6.18.46/), forward-ported
from the vendor 5.10.160 tree, no plan44 code, built with our
arm-rockchip830-...-gcc 8.3 (confirmed: gcc 8.3 builds 6.18 fine).
Confirmed feasibility facts
- gcc 8.3 (our SDK toolchain) compiles the 6.18 kernel — no toolchain bump needed to start.
multi_v7_defconfig(ARM + rockchip) configures;CLK_RV1106=ywires in cleanly.- rv1106's siblings rv1126/rv1108 exist in both trees, so their 5.10→6.18 delta is a working template for the framework API changes.
M1 — clock driver (clk-rv1106.c, 1284 lines): IN PROGRESS
Build-fix loop against 6.18. Fixed so far (captured in clk/):
- Kconfig + Makefile hooks — added
CONFIG_CLK_RV1106(mirrors CLK_RV1126). - CRU register macros — ported all 55
RV1106_*register-accessor#defines from the vendorclk.hinto 6.18'sclk.h(mainline has none). - Header split —
panic_notifier_listmoved to<linux/panic_notifier.h>(kernel 5.18); added the include. rockchip_clk_register_armclksignature change — 5.10 took(num_parents, parent_clk, alt_parent_clk); 6.18 takes(parent_names[], num_parents)and drives the mux fromreg_data.mux_core_main/alt. Adapted the call to the 6.18 form using a parent-names array (sibling-delta from rv1126). ⚠ PORT-VERIFY: the mux input list{ "gpll","cpll","apll" }and themux_core_main/alt=2mapping are a best-effort from the 5.10 intent (main=apll) — they set the CPU clock source, so they must be checked against the RV1106CORECLKSEL_CONregister map (TRM) and validated on hardware before trusting a boot. A wrong mux silently breaks boot.
Next frontier: clk-rv1106.c:427 — CLK_FRAC_DIVIDER_NO_LIMIT, a Rockchip
downstream-only fractional-divider flag absent from mainline 6.18; needs mapping to the
mainline frac-divider behavior (likely define-as-0 if mainline defaults to no-limit, but
verify the divider min/max semantics).
Honest scope
This is the first driver of ~120 in the RV1106 BSP. The clk port alone is a multi-cycle
effort of the four delta classes above; the whole bring-up (M1–M6 in ../docs/bringup.md)
is a multi-month kernel effort. Progress is real and the method is proven; correctness of
boot-critical pieces (clock mux, PLL rates, DDR, pinctrl iomux) requires the TRM and
on-hardware validation — which waits on c8a3's recovery and, ultimately, careful bring-up.
Layout
clk/
clk-rv1106.c the ported driver (WIP, compiles to :427)
rv1106-cru.h the clock-id dt-bindings header (staged)
0001-rv1106-clk-framework-hooks.wip.patch Makefile/Kconfig/clk.h deltas vs vanilla 6.18
The full ported tree lives in flare-edge/research/linux-6.18.46/ (scratch); this dir is
the durable, reviewable capture, to become a proper patch series as milestones land.