M1 pinctrl ported from vendor 5.10 (effort S, no API drift): enum, DRV/PULL/SMT macros + 3 calc fns, case RV1106 in the 3 pull fns + RK3568 drive group, pin_banks + pin_ctrl, of_device_id (dropped CPU_RV1106 guard). pinctrl-rockchip.o 173KB, no errors. iomux DRV/PULL/SMT offsets cross-validated against the upstream Simon Glass v3 patch (match with the 0x10000 per-bank IOC base) -> the boot-critical iomux PORT-VERIFY is retired via a 3rd independent source, no hardware. Upstream tracked as a correctness oracle (doesn't apply to 6.18 cleanly; unmerged). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
5.0 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, 1294 lines): ✅ COMPILES CLEAN on 6.18
Build-fix loop against 6.18 — clk-rv1106.o (85732 bytes) builds with no errors.
Fixed (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. -
CLK_FRAC_DIVIDER_NO_LIMIT— Rockchip downstream-only frac-divider flag (6 uses on the UART frac clocks); mainline has no min/max opt-out, mapped to 0 (default limit). ⚠ PORT-VERIFY: UART fractional baud accuracy.
M1 — pinctrl (pinctrl-rockchip.c/.h): ✅ COMPILES CLEAN on 6.18
pinctrl-rockchip.o (173688 bytes) builds no-errors. Transplanted from vendor 5.10 (effort S,
zero API drift — the survey's assessment held): added RV1106 to the type enum; a 159-line
block of RV1106_DRV/PULL/SMT_* macros + 3 rv1106_calc_*_reg_and_bit() functions; case RV1106: in the 3 pull functions + the RK3568 drive-strength group; rv1106_pin_banks[] +
rv1106_pin_ctrl; and the rockchip,rv1106-pinctrl of_device_id (dropping the vendor's
#ifdef CONFIG_CPU_RV1106 guard — mainline compiles all SoCs unconditionally). Captured as
pinctrl/0001-rv1106-pinctrl.patch.
- PORT-VERIFY RESOLVED (iomux offsets): the DRV/PULL/SMT per-bank offsets are confirmed by
a THIRD independent source — the upstream Simon Glass v3 pinctrl patch. Its
rv1106_{drv,pull,smt}_offsets[]match ours exactly once the 0x10000-strided per-bank IOC base is applied (e.g. vendor GPIO2 DRV0x100C0=0x10000 + 0xc0). Retires the "do not guess" iomux risk without hardware. (Note upstream uses per-bank IOC regmaps + low offsets; we use the vendor's full-offset form — same absolute register, both compile.) - Still PORT-VERIFY: GPIO4 bank pin-count (
pin_bankssays 24, DTgpio-rangessays 32) — carried from vendor unchanged; needs TRM/hardware.
M1 — mach + defconfig: NEXT
Per the breadth survey's integration order: mach is a ~2-line DT-compat add to rockchip.c
(do NOT recreate the dropped CPU_RV1106 symbol); then the minimal M2 defconfig; then the DT
(SoC nodes transplant + board-specific PORT-VERIFY: console UART, boot media, panel timings);
then the first full kernel build toward an earlycon boot.
Upstream tracking (decision 2026-08-23)
Base stays the vendor forward-port (applies to 6.18; we control it). The unmerged upstream
RV1106 series (~35 patches, "New" state, does NOT apply cleanly to 6.18 — pinctrl v3 failed at
pinctrl-rockchip.c:3390) is used as a correctness oracle for boot-critical PORT-VERIFY
values (already retired the iomux offsets) and tracked for eventual convergence when it merges.
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.