From: Jiaxing Hu <gahing@gahingwoo.com>
To: tomeu@tomeuvizoso.net, heiko@sntech.de, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, joro@8bytes.org,
will@kernel.org, robin.murphy@arm.com, ulfh@kernel.org,
p.zabel@pengutronix.de, ogabbay@kernel.org,
zhangqing@rock-chips.com
Cc: royalnet026@gmail.com, abel.vesa@oss.qualcomm.com,
sebastian.reichel@collabora.com, sidong.yang@furiosa.ai,
u.kleine-koenig@baylibre.com, chaoyi.chen@rock-chips.com,
shawn.lin@rock-chips.com, finley.xiao@rock-chips.com,
diederik@cknow-tech.com, alchark@flipper.net, leonard@lausen.nl,
jeff.hugo@oss.qualcomm.com, rfoss@kernel.org,
dri-devel@lists.freedesktop.org,
linux-rockchip@lists.infradead.org, iommu@lists.linux.dev,
linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Jiaxing Hu <gahing@gahingwoo.com>
Subject: [PATCH v16 00/16] accel/rocket: RK3576 NPU (RKNN) enablement
Date: Sun, 8 Nov 2026 19:59:01 +1300 [thread overview]
Message-ID: <20261108065917.135194-1-gahing@gahingwoo.com> (raw)
This series adds RK3576 NPU (RKNN) support to the mainline DRM rocket
driver.
Based on: next-20261105
Changes in v16:
- Tomeu: rewrote the descriptions and code comments of the accel/rocket
patches; I write them in Chinese first and translate them into English
with an LLM. Added a GET_PARAM ioctl that gives userspace the NPU
hardware version (13/16). Please check whether the proposed enum values
are fine (RK3588 = 1, RK3576 = 2).
- Heiko: shortened the commit messages of 1/16 and 3/16 and kept the
original comment in 3/16; moved to one power domain per core, and cut
the IOMMU clocks from five to four. The measurements are in 8/16 and
15/16.
- Chaoyi: removed the unneeded comment in 11/16.
- Sashiko: 4/16 now drops the runtime PM reference after
rocket_core_reset(), with an A/B test showing that the old order hangs
the board.
Testing, on a ROCK 4D and an ArmSoM CM5-IO, both running Armbian edge 7.3
with the v16 changes:
- Tested with charsiu (https://github.com/gahingwoo/charsiu), an open
source LLM inference runtime. It drives the NPU directly through the
rocket UAPI (/dev/accel), without Mesa or the vendor runtime.
- Llama-3.2-1B (Q4_0), with both NPU cores running together, gives
correct results.
- Perplexity on the same model and the same text is 41.1009, identical to
the previous version.
- On the ROCK 4D, tested IOMMU clock combinations; four clocks are needed.
- On the ROCK 4D, repeated resets with a 2 ms job timeout, to compare the
two orders of dropping the runtime PM reference.
Armbian has merged support based on v14, in armbian/build#11162
and armbian/build#11163.
Known issue: after repeated resets with a 2 ms job timeout, the IOMMU
does not recover ("MMU_DTE_ADDR is not functioning"). I have not looked
into it further.
Tool use:
An LLM helped me read code and technical material and write part of the
implementation. Some of the code in the series was first drafted by an
LLM, and the commit messages and cover letters of earlier versions were
mostly written by an LLM.
I reviewed the generated code and tested the changes on real hardware.
I also used an LLM to write test scripts and to compare register write
traces.
For v16 I rewrote the cover letter, commit messages and code comments
myself in Chinese first and translated them into English with an LLM.
Tag changes:
- Picked up Heiko's Reviewed-by tags from v15.
- 4/16 changed after Heiko's Reviewed-by. Heiko, please confirm whether
it still applies.
- Igor's Tested-by on 4/16 was given on the earlier code, so I've dropped
it until it is retested.
- 8/16 has Conor's Acked-by. The clock count changed from five to four;
Conor, please confirm whether it still applies.
Igor Paunovic (1):
accel/rocket: request the core clocks by name
Jiaxing Hu (15):
accel/rocket: take the completion register writes under job_lock
accel/rocket: wait for a running IRQ handler before resetting a core
accel/rocket: let the core suspend after a reset
accel/rocket: factor the completion tail out of the IRQ handler
dt-bindings: npu: rockchip: add rockchip,rk3576-rknn-core
dt-bindings: power: rockchip: allow resets in a power domain node
dt-bindings: iommu: rockchip: describe the RK3576 NPU MMU
pmdomain: rockchip: add optional per-domain power-on settle delay
pmdomain: rockchip: cycle an optional power-domain reset on power-on
accel/rocket: select the per-core clock and reset counts from match
data
accel/rocket: add RK3576 NPU (RKNN) support
accel/rocket: add a GET_PARAM ioctl for the hardware version
arm64: dts: rockchip: add NPU core domain clocks and resets to rk3576
arm64: dts: rockchip: add NPU (RKNN) nodes to rk3576
arm64: dts: rockchip: enable the NPU on rk3576-rock-4d
.../bindings/iommu/rockchip,iommu.yaml | 26 ++++++
.../npu/rockchip,rk3588-rknn-core.yaml | 40 ++++++++-
.../power/rockchip,power-controller.yaml | 8 ++
.../boot/dts/rockchip/rk3576-rock-4d.dts | 22 +++++
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 82 ++++++++++++++++-
drivers/accel/rocket/rocket_core.c | 14 ++-
drivers/accel/rocket/rocket_core.h | 10 ++-
drivers/accel/rocket/rocket_device.c | 3 +-
drivers/accel/rocket/rocket_drv.c | 61 +++++++++++--
drivers/accel/rocket/rocket_drv.h | 2 +
drivers/accel/rocket/rocket_job.c | 84 ++++++++++++-----
drivers/pmdomain/rockchip/pm-domains.c | 89 ++++++++++++++-----
include/uapi/drm/rocket_accel.h | 40 +++++++++
13 files changed, 419 insertions(+), 62 deletions(-)
base-commit: ddfe51b0a0f5dc9e415cc2c8ad8db17532dd426b
--
2.43.0
next reply other threads:[~2026-11-08 6:59 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-08 6:59 Jiaxing Hu [this message]
2026-11-08 6:59 ` [PATCH v16 01/16] accel/rocket: request the core clocks by name Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 02/16] accel/rocket: take the completion register writes under job_lock Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 03/16] accel/rocket: wait for a running IRQ handler before resetting a core Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 04/16] accel/rocket: let the core suspend after a reset Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 05/16] accel/rocket: factor the completion tail out of the IRQ handler Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 06/16] dt-bindings: npu: rockchip: add rockchip,rk3576-rknn-core Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 07/16] dt-bindings: power: rockchip: allow resets in a power domain node Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 08/16] dt-bindings: iommu: rockchip: describe the RK3576 NPU MMU Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 09/16] pmdomain: rockchip: add optional per-domain power-on settle delay Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 10/16] pmdomain: rockchip: cycle an optional power-domain reset on power-on Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 11/16] accel/rocket: select the per-core clock and reset counts from match data Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 12/16] accel/rocket: add RK3576 NPU (RKNN) support Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 13/16] accel/rocket: add a GET_PARAM ioctl for the hardware version Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 14/16] arm64: dts: rockchip: add NPU core domain clocks and resets to rk3576 Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 15/16] arm64: dts: rockchip: add NPU (RKNN) nodes " Jiaxing Hu
2026-11-08 6:59 ` [PATCH v16 16/16] arm64: dts: rockchip: enable the NPU on rk3576-rock-4d Jiaxing Hu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261108065917.135194-1-gahing@gahingwoo.com \
--to=gahing@gahingwoo.com \
--cc=abel.vesa@oss.qualcomm.com \
--cc=alchark@flipper.net \
--cc=chaoyi.chen@rock-chips.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=diederik@cknow-tech.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=finley.xiao@rock-chips.com \
--cc=heiko@sntech.de \
--cc=iommu@lists.linux.dev \
--cc=jeff.hugo@oss.qualcomm.com \
--cc=joro@8bytes.org \
--cc=krzk+dt@kernel.org \
--cc=leonard@lausen.nl \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=ogabbay@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=royalnet026@gmail.com \
--cc=sebastian.reichel@collabora.com \
--cc=shawn.lin@rock-chips.com \
--cc=sidong.yang@furiosa.ai \
--cc=tomeu@tomeuvizoso.net \
--cc=u.kleine-koenig@baylibre.com \
--cc=ulfh@kernel.org \
--cc=will@kernel.org \
--cc=zhangqing@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®