diff --git a/kernel/rv1106-enablement/DRIVER-PARITY.md b/kernel/rv1106-enablement/DRIVER-PARITY.md index a4a54be..605d3ba 100644 --- a/kernel/rv1106-enablement/DRIVER-PARITY.md +++ b/kernel/rv1106-enablement/DRIVER-PARITY.md @@ -36,7 +36,7 @@ c8a3, not just compiled. | AIC8800 wifi (bsp/fdrv) | aic8800_* | **out-of-tree** | ⬜ M5 | | AIC8800 BT (btlpm) | aic8800_btlpm | **out-of-tree** | ⬜ M5 | | NPU (rknpu, ff660000) | rknpu, ff660000.npu | **out-of-tree** | ⬜ M6 — plan: `npu/PORT-PLAN.md` | -| RGA 2D (rga2) | rga2 | rockchip | ⬜ M6 | +| RGA 2D (rga2) | rga2 | ported (vendor char-dev) | ✅ /dev/rga, hw 3.3.87975 | | I2S audio (i2s-tdm) | i2s | rv1126 fallback | 🔨 DAI built; needs acodec+card | | FIQ debugger (ttyFIQ0) | fiq_glue | rockchip | ⬜ optional (we use ttyS2) | diff --git a/kernel/rv1106-enablement/dts/rv1106-warden.dts b/kernel/rv1106-enablement/dts/rv1106-warden.dts index 2886869..9625087 100644 --- a/kernel/rv1106-enablement/dts/rv1106-warden.dts +++ b/kernel/rv1106-enablement/dts/rv1106-warden.dts @@ -159,3 +159,8 @@ &i2s0_8ch { status = "okay"; }; + + +&rga2 { + status = "okay"; +}; diff --git a/kernel/rv1106-enablement/rga/PORT-DONE.md b/kernel/rv1106-enablement/rga/PORT-DONE.md new file mode 100644 index 0000000..f3e3ade --- /dev/null +++ b/kernel/rv1106-enablement/rga/PORT-DONE.md @@ -0,0 +1,27 @@ +# RGA port — DONE, verified on hardware (2026-08-24) + +Ported the vendor char-dev RGA driver (`drivers/video/rockchip/rga3/`, the +multicore `CONFIG_ROCKCHIP_MULTI_RGA` driver — WardenOS's librga uses `/dev/rga`, +not V4L2) to 6.18. Open source (vendor C source). On warden-c8a3: +``` +rga: rga2, irq = 55, match scheduler +rga: rga2 hardware loaded successfully, hw_version:3.3.87975 +rga: rga2 probe successfully → /dev/rga present, /dev/dma_heap present +``` + +## Build tree wiring +`drivers/video/rockchip/{Kconfig,Makefile}` created (source rga3/); wired into +`drivers/video/{Kconfig,Makefile}`. `CONFIG_ROCKCHIP_MULTI_RGA=y`. +`&rga2 { status="okay"; }`. For `/dev/dma_heap/cma`: use the kernel's default 64 MiB +CMA + `CONFIG_DMABUF_HEAPS{,_CMA,_SYSTEM}=y` — do NOT add a `linux,cma` DT node +(a mis-aligned/duplicate one hangs the boot at reserved-memory init). + +## 5.10 → 6.18 API deltas fixed (all mechanical) +1. `platform_driver.remove`: `int` → `void` (`rga_drv_remove`, drop the returns). +2. `hrtimer_init(&t,…)` + `t.function=fn` → `hrtimer_setup(&t, fn, CLOCK_MONOTONIC, + HRTIMER_MODE_REL)` — the scheduler tick; verified under the live probe. +3. `iommu_map` / `iommu_map_sg`: added the new `gfp` arg (`GFP_KERNEL`). +4. `get_user_pages_remote`: dropped the removed `vmas` arg. +5. `MAX_ORDER` (removed) → compat `#define MAX_ORDER (MAX_PAGE_ORDER + 1)` in + `rga3/include/rga_drv.h` (preserves the old exclusive semantics everywhere). +6. `MODULE_IMPORT_NS()` → `MODULE_IMPORT_NS("DMA_BUF")` (string form).