Jump to content

Recommended Posts

Posted (edited)

Hello Armbian-Community!

 

TL;DR

 

I've successfully enabled the Rockchip RK3568 NPU (0.8 TOPS INT8) on the ODROID-M1 with 8GB RAM running Armbian 6.18.9-current-rockchip64.

 

The only thing needed to make this work for everyone is a 1-line kernel patch in Armbian build that I've already submitted: https://github.com/armbian/build/pull/9403

 

Once this patch is merged into Armbian, the DKMS modules will work out-of-the-box on all RK3568 boards.

 

The Problem

 

1. Hardkernel and Rockchip provide NPU patches for quite old kernel versions:

  • rockchip <= 6.6
  • hardkernel <= 5.10

 

2. IOMMU page table allocation bug — On systems with >4GB RAM, the kernel's IOMMU allocates page tables above 4GB, but the NPU can only access the first 4GB of physical memory, causing DMA mapping failures and inference timeouts

 

The Solution

 

1. Kernel Patch (1 line!)

 

-   .gfp_flags = 0,
+   .gfp_flags = GFP_DMA32,

 

This forces IOMMU page tables to be allocated below 4GB, fixing NPU operation on 8GB boards.

 

2. DKMS Driver Package

 

I've created a complete DKMS package that:

- Includes DT overlays for NPU, IOMMU, power-domain, and clock configuration

- Supports dynamic frequency scaling (100 MHz - 1000 MHz)

- Provides `/dev/dri/renderD129` (DRM/GEM interface) for RKNN Runtime

- Would compile against Armbian's stock kernel headers with the above patch merged

 

The Questions

 

1. What would be the best way to provide those modules for installation in the armbian system?

2. Has someone a 4 GB version of the M1 and could test the modules?

 

Edited by m1zfs
Posted

Hello,
 

I believe @m1zfs's work on the DKMS modules is available here:

https://github.com/vitalijborissow/rk3568-npu-ODROID-M1

 

I have spent many hours trying to get the NPU working on my ODROID-M1 (8 GB) running Armbian 26.5.1 with current kernel 6.18.x as well as edge kernels 6.19 and 7.1. I also tried building the latest Armbian image from source (July 19 build including U-Boot 2026.07), but so far I have not been able to get the device tree / overlay and DKMS modules from the repository working on any of these combinations.

 

The system always fails to boot. Fortunately, I can capture the boot process through the serial console and see where it fails.

The log shows a kernel exception related to enabling the RK3568 NPU power domain:

 

rockchip-pm-domain fdd90000.power-management:power-controller:
failed to get ack on domain 'npu', val=0x1ee

platform fde40000.npu: Adding to iommu group 3

Internal error: synchronous external abort
...
Workqueue: pm genpd_power_off_work_fn
...
rockchip_pd_power

 

From the log it appears that the crash occurs before rknpu.ko is loaded. This makes me believe the issue is more likely related to the device tree, overlay, power-domain, regulator, or clock configuration rather than to the DKMS module itself.

 

Has anyone seen a similar issue on recent Armbian kernels, or can suggest a direction for further troubleshooting? I am still willing to spend some time investigating this and would appreciate any ideas or hints.

 

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines