kernel: full-SoC DT transplant — batch-1 peripherals at parity on 6.18

Move from the hand-built minimal DT to the vendor rv1106.dtsi (full SoC:
pinctrl, gpio×5, dmac, cru+grf_cru, all peripherals), with our lean board DTS
(rv1106-warden.dts) enabling only the wall-HMI's needs — no camera/ISP/CSI.

Two deltas made it boot on 6.18: overwrite boot-mode.h with the vendor's (extra
BOOT_* constants) and DELETE the psci node (no secure monitor → SMC fault →
"Attempted to kill the idle task"). Recipe in dts/README.md.

Verified on warden-c8a3 (uname 6.18.46, full WardenOS userspace): pinctrl,
gpio0-4, pl330 DMA, uart1/2/4 (ttyS1/2/4), i2c3, dw-wdt (watchdog0) all probe.
DRIVER-PARITY.md tracks the remaining ports (VOP display, AIC8800 wifi, rknpu,
usb2phy, saradc-compat, RGA) toward full parity with the 5.10 kernel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017wB8KB3MMQztRDXCMCkPrf
This commit is contained in:
BFE Engineering
2026-08-24 21:12:49 -06:00
co-authored by Claude Opus 4.8
parent b5a448fa84
commit 79ef2df67a
3 changed files with 128 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
# RV1106 6.18 devicetree
- **`rv1106-warden.dts`** — our board DT. `#include`s the vendor `rv1106.dtsi`
(the full SoC: pinctrl, gpio×5, dmac, cru+grf_cru, uart, emmc, i2c, saradc,
watchdog, usb, vop, npu, rga, …), then enables only what the wall-HMI needs.
No camera/ISP/CSI. Grows one driver batch at a time (see `../DRIVER-PARITY.md`).
- **`rv1106-warden-m2.dts`** — the earlier standalone minimal DT used to bring up
M2/M3 before the full-SoC transplant; kept for reference.
## Transplanting the vendor SoC DT onto 6.18 (recipe)
Copy into `arch/arm/boot/dts/rockchip/` of the 6.18 tree:
`rv1106.dtsi`, `rv1106-pinctrl.dtsi`, `rockchip-pinconf.dtsi`. Copy the
vendor-only dt-bindings headers into `include/dt-bindings/`:
`soc/rockchip-system-status.h`, `suspend/rockchip-rv1106.h`,
`display/media-bus-format.h`, and **overwrite** `soc/rockchip,boot-mode.h`
with the vendor's (it has extra BOOT_CHARGING/UMS/PANIC/WATCHDOG constants the
DT uses). Then the two hardware deltas:
1. **Delete the `psci` node** from `rv1106.dtsi`. RV1106 has no secure monitor in
our boot chain, so `arm,psci-1.0` + `method="smc"` makes the SMC call fault →
`Oops - bad mode``Attempted to kill the idle task`. (Confirmed on c8a3.)
2. Enable the peripherals in the board DTS (`&uart2`, `&emmc`, …).
Verified on warden-c8a3: pinctrl, gpio04, pl330 DMA, uart1/2/4, i2c3, dw-wdt all
probe; full WardenOS userspace boots.
@@ -0,0 +1,61 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* WardenOS 86-Panel board DT for the self-built Linux 6.18 forward-port.
*
* Includes the full vendor rv1106.dtsi (SoC nodes + pinctrl + gpio + dmac), then
* enables only what our wall-HMI needs — no camera/ISP/CSI. Grows one driver
* batch at a time toward full parity with the 5.10 kernel (DRIVER-PARITY.md).
*/
/dts-v1/;
#include "rv1106.dtsi"
/ {
model = "WardenOS 86-Panel (RV1106)";
compatible = "rockchip,rv1106-warden", "rockchip,rv1106";
chosen {
stdout-path = "serial2:115200n8";
bootargs = "earlycon=uart8250,mmio32,0xff4c0000 console=ttyS2,115200n8 earlyprintk rootwait";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x10000000>; /* 256 MiB */
};
};
/* --- console --- */
&uart2 {
status = "okay";
};
/* --- eMMC rootfs (M3) --- */
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
mmc-hs200-1_8v;
non-removable;
status = "okay";
};
/* --- batch 1: mainline peripherals (wire DT + config) --- */
&uart1 {
status = "okay";
};
&uart4 {
status = "okay";
};
&i2c3 {
status = "okay";
};
&saradc {
status = "okay";
};
&wdt {
status = "okay";
};