| Message ID | 20260423-rknn-v2-1-b9457a38c140@cherry.de |
|---|---|
| State | New |
| Headers | show |
| Series | [meta-rockchip,v2] add support for upstream RKNPU/RKNN/Rocket HW AI accelerator | expand |
Hi all, On 4/23/26 6:19 PM, Quentin Schulz wrote: > From: Quentin Schulz <quentin.schulz@cherry.de> > > This adds support for the NPU (Neural Processing Unit) found on the > RK3588(S). > > The NPU is supported by a kernel driver (CONFIG_DRM_ACCEL_ROCKET), > Device Tree nodes (so not all RK3588 devices supported upstream > necessarily have the NPU declared properly!) and a userspace driver in > mesa (teflon delegate with rocket gallium driver). > > This adds a config fragment for linux-rockchip kernels such that the > disabled-by-default Rocket driver is built and enables the Rocket > gallium mesa driver with the teflon delegate, but only when the user > requests its support. > > This was tested by running the following: > > """ > wget https://gitlab.freedesktop.org/mesa/mesa/-/raw/main/src/gallium/frontends/teflon/tests/classification.py > > TEFLON_DEBUG=verbose python3 classification.py \ > -i /usr/share/label_image/grace_hopper.bmp \ > -m /usr/share/label_image/mobilenet_v1_1.0_224_quant.tflite \ > -l /usr/share/label_image/labels_mobilenet_quant_v1_224.txt \ > -e /usr/lib/libteflon.so > """ > > from an image built with meta-tensorflow's tensorflow-lite, mesa's > libteflon, meta-openembedded's python3-pillow and OE-Core's > python3-numpy packages. > > Note that the Aarch64 RK35xx SoCs all have an NPU, but only RK3588's is > currently supported in the kernel. > > Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de> > --- > This was tested on RK3588 Jaguar with linux-yocto 6.18 + > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=843b912c7241ed0259f6234243da05e10ce67c0f > > Note this (lightly) depends on > https://lore.kernel.org/yocto-patches/20260423-python3-14-tflite-v1-3-68bca178a550@cherry.de/ > being merged in meta-tensorflow. Another option is to simply add This has now merged in meta-tensorflow. Cheers, Quentin
diff --git a/README b/README index c2697d1..6d9db9b 100644 --- a/README +++ b/README @@ -222,6 +222,26 @@ Notes: NOTE: this variable must be set before any include/require in the machine configuration file + Neural Processing Unit (NPU) + + The Aarch64 RK35xx SoCs have a Neural Processing Unit (NPU) available. + It is typically named by Rockchip as RKNPU/RKNN but upstream has decided + to use Rocket instead. At the time of writing (Linux kernel v7.0), only + RK3588's NPU is supported upstream. + + This NPU is an AI hardware-accelerator. You can enable its support by + setting: + + ENABLE_UPSTREAM_RKNPU = "1" + + This requires a kernel driver (CONFIG_DRM_ACCEL_ROCKET, v6.18+) and + RKNN Device Tree nodes + (e.g. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=640366d644b1e282771a09c72be37162b6eda438). + The mesa userspace driver (rocket gallium driver) and teflon delegate + are automatically compiled when this option is enabled. You need to add + the libteflon package to your image to be able to use the teflon + delegate. + U-Boot Environment: ------------------ In order to configure U-Boot to be able to store its environment into the diff --git a/recipes-graphics/mesa/mesa.bbappend b/recipes-graphics/mesa/mesa.bbappend index d9e7c08..69a210f 100644 --- a/recipes-graphics/mesa/mesa.bbappend +++ b/recipes-graphics/mesa/mesa.bbappend @@ -10,5 +10,9 @@ MALI_DRIVER:rk3308 = "" PACKAGECONFIG:append:rockchip = " ${@bb.utils.filter('MALI_DRIVER', 'lima panfrost', d)}" PACKAGECONFIG:append:rockchip = "${@bb.utils.contains('MALI_DRIVER', 'panfrost', ' libclc', '', d)}" +# Enable teflon for upstream RKNPU/rocket support +# Requires CONFIG_DRM_ACCEL_ROCKET in Linux kernel to actually work +PACKAGECONFIG:append:rk3588s = "${@oe.utils.vartrue('ENABLE_UPSTREAM_RKNPU', ' teflon rocket', '', d)}" + # Mali Gen10 (Valhall, supported by Panthor) requires a firmware blob RRECOMMENDS:mesa-megadriver:append:rk3588s = " linux-firmware-mali-csffw-arch108" diff --git a/recipes-kernel/linux/linux-rockchip.inc b/recipes-kernel/linux/linux-rockchip.inc index 6c62e84..dc30327 100644 --- a/recipes-kernel/linux/linux-rockchip.inc +++ b/recipes-kernel/linux/linux-rockchip.inc @@ -36,3 +36,4 @@ SRC_URI:append:nanopi-r4s = " file://realtek-r8169.cfg" KERNEL_FEATURES:append:rockchip:arm = " bsp/rockchip/remove-non-rockchip-arch-arm.scc" KERNEL_FEATURES:append:rockchip:aarch64 = " bsp/rockchip/remove-non-rockchip-arch-arm64.scc" +KERNEL_FEATURES:append:rockchip = "${@oe.utils.vartrue('ENABLE_UPSTREAM_RKNPU', ' bsp/rockchip/rocket-npu.scc', '', d)}" diff --git a/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.cfg b/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.cfg new file mode 100644 index 0000000..9f6af63 --- /dev/null +++ b/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.cfg @@ -0,0 +1,2 @@ +CONFIG_DRM_ACCEL=y +CONFIG_DRM_ACCEL_ROCKET=y diff --git a/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.scc b/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.scc new file mode 100644 index 0000000..a8b4277 --- /dev/null +++ b/recipes-kernel/linux/linux-rockchip/rockchip-kmeta/bsp/rockchip/rocket-npu.scc @@ -0,0 +1 @@ +kconf hardware rocket-npu.cfg