[RFC PATCH 0/9] accel/rocket: RK3576 NPU (RKNN) enablement
From: Jiaxing Hu <hidden>
Date: 2026-07-17 08:52:43
Also in:
linux-arm-kernel, linux-iommu, linux-pm, linux-rockchip, lkml
This adds RK3576 NPU support to accel/rocket. RFC: the NPU brings up and runs, but full inference is not correct yet, and I would rather get feedback now than sit on it. Tested on a Radxa ROCK 4D. The NPU probes, powers on, brings up its IOMMUs, and runs jobs to completion (rocket + Mesa Teflon). Getting there took a few fixes outside the driver too: a power-domain settle delay and reset cycling (else a cold power-on throws an async SError), two rk_iommu fixes for banks firmware leaves faulted, taking the full clock set on the MMU nodes, and both NPU power domains on the core. Not solved: only the first operation in a power session gives the right answer. Every later one engages and DMAs its input, but the compute output never lands, so the readback is the zero-point. I chased it through the whole software surface (registers, IOMMU/TLB, cache, power/clock/reset, dispatch) and it reproduces even with the driver environment matched to the vendor's on the same kernel, so it looks to be below software, in the fixed-function block. Traces available. Two asks: review of the bring-up and the shared pmdomain/iommu changes; and if anyone knows the RK3576 NPU internals, whether that per-power-session arm can be driven from software at all. The series is split by subsystem (binding, pmdomain, iommu, driver, DT). The board DT keeps vdd_npu_s0 always-on for now; happy to switch to proper runtime control if preferred. I used Claude Opus 4.8 to help trim this series out of my debugging tree and generate the diffs. Jiaxing Hu (9): dt-bindings: npu: rockchip: add rockchip,rk3576-rknn-core pmdomain/rockchip: add optional per-domain power-on settle delay pmdomain/rockchip: cycle optional power-domain resets on power-on iommu/rockchip: skip orphaned-fault banks in rk_iommu_is_stall_active iommu/rockchip: skip orphaned-fault banks in CMD_ENABLE_STALL dispatch iommu/rockchip: take all DT clocks accel/rocket: add RK3576 NPU (RKNN) support arm64: dts: rockchip: rk3576: add NPU (RKNN) nodes arm64: dts: rockchip: rk3576-rock-4d: enable NPU .../npu/rockchip,rk3588-rknn-core.yaml | 2 +- .../boot/dts/rockchip/rk3576-rock-4d.dts | 16 ++ arch/arm64/boot/dts/rockchip/rk3576.dtsi | 78 ++++++++- drivers/accel/rocket/rocket_core.c | 43 ++++- drivers/accel/rocket/rocket_core.h | 22 ++- drivers/accel/rocket/rocket_device.c | 4 + drivers/accel/rocket/rocket_drv.c | 1 + drivers/accel/rocket/rocket_job.c | 154 ++++++++++++++---- drivers/iommu/rockchip-iommu.c | 66 +++++--- drivers/pmdomain/rockchip/pm-domains.c | 68 +++++--- 10 files changed, 367 insertions(+), 87 deletions(-) -- 2.43.0