Collecting Q6A NPU FastRPC Issues

Hi all,

We noticed that many Q6A users encounter FastRPC issues when using the NPU.
We are currently collecting these problems and trying to help analyze and fix them.

To better reproduce and debug the issues, let’s first align the environments.


Environment

Install required packages

sudo apt update
sudo apt install fastrpc fastrpc-dev libcdsprpc1 radxa-firmware-qcs6490

NPU Quick Verification

I then ran the NPU Quick Verification to check whether the NPU is working correctly.

sudo apt install python3-venv
mkdir venv && cd venv
python3 -m venv .venv
source .venv/bin/activate
pip3 install --upgrade pip
cd ~/
pip3 install modelscope setuptools==80.10.1
modelscope download --model radxa/resnet50_qairt --local ./resnet50_qairt
export PRODUCT_SOC=6490
cd resnet50_qairt/${PRODUCT_SOC}
chmod +x qnn-net-run
./qnn-net-run \
  --backend ./libQnnHtp.so \
  --retrieve_context ./resnet50_aimet_quantized_${PRODUCT_SOC}.bin \
  --input_list ./test_list.txt \
  --output_dir output_bin

Output

rock@radxa-dragon-q6a:~/resnet50_qairt/6490$ ./qnn-net-run --backend ./libQnnHtp.so --retrieve_context ./resnet50_aimet_quantized_${PRODUCT_SOC}.bin --input_list ./test_list.txt --output_dir output_bin
qnn-net-run pid:1520
qnn-net-run build version: v2.37.1.250807093845_124904
qnn-net-run log level is : QNN_LOG_LEVEL_ERROR
 <W> Initializing HtpProvider
Processing inference input(s):
../data/test/crop/ILSVRC2012_val_00003441.raw
../data/test/crop/ILSVRC2012_val_00008465.raw
../data/test/crop/ILSVRC2012_val_00010218.raw
../data/test/crop/ILSVRC2012_val_00044076.raw
/prj/qct/.../rpcmem_android.c:38: dummy call to rpcmem_init, rpcmem APIs will be used from libxdsprpc
Creating context from binary file: ./resnet50_aimet_quantized_6490.bin
Executing Graphs
Finished Executing Graphs
/prj/qct/.../rpcmem_android.c:42: dummy call to rpcmem_deinit, rpcmem APIs will be used from libxdsprpc

Result

If you see the output above, it means the NPU is working correctly.


If you encounter errors

If you see any error codes or failures, please share:

  1. What steps you followed
  2. Which packages you installed
  3. The full error log

This will help us reproduce the issue and debug it more efficiently.

Thanks for your help!

best,
Morgan

Step 1: Image installation and Setup

OS: R1

radxa@radxa-dragon-q6a:~$ sudo dmidecode  -s bios-version
6.0.260120.BOOT.MXF.1.0.1-00549-KODIAKWP-1

dd if=radxa-dragon-q6a_noble_gnome_r1.output_512.img of=/dev/sda bs=4M status=progress, where /dev/sda is the SD card that will be installed on the board

For BIOS settings, UEFI device tree loading is enabled, Hypervisor override is enabled.

Everything else is the default. (Even if I put hypervisor override as default, it still returned the same error.)

I have also tried updating the system with rsetup with no avail.

Step 2: Enable NPU

sudo apt update
sudo apt install fastrpc fastrpc-dev libcdsprpc1 radxa-firmware-qcs6490

didn’t return any errors.

Output

Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
radxa-firmware-qcs6490 is already the newest version (0.2.28).
radxa-firmware-qcs6490 set to manually installed.
The following NEW packages will be installed:
fastrpc fastrpc-dev libcdsprpc1
0 upgraded, 3 newly installed, 0 to remove and 31 not upgraded.
Need to get 160 kB of archives.
After this operation, 904 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 README qcs6490-noble/main arm64 fastrpc arm64 1.0.3-1 [4,728 B]
Get:2 README qcs6490-noble/main arm64 fastrpc-dev arm64 1.0.3-1 [24.0 kB]
Get:3 README qcs6490-noble/main arm64 libcdsprpc1 arm64 1.0.3-1 [132 kB]
Fetched 160 kB in 1s (216 kB/s)
Selecting previously unselected package fastrpc.
(Reading database … 99021 files and directories currently installed.)
Preparing to unpack …/fastrpc_1.0.3-1_arm64.deb …
Unpacking fastrpc (1.0.3-1) …
Selecting previously unselected package fastrpc-dev.
Preparing to unpack …/fastrpc-dev_1.0.3-1_arm64.deb …
Unpacking fastrpc-dev (1.0.3-1) …
Selecting previously unselected package libcdsprpc1.
Preparing to unpack …/libcdsprpc1_1.0.3-1_arm64.deb …
Unpacking libcdsprpc1 (1.0.3-1) …
Setting up fastrpc (1.0.3-1) …
Setting up libcdsprpc1 (1.0.3-1) …
Setting up fastrpc-dev (1.0.3-1) …
Processing triggers for libc-bin (2.39-0ubuntu8.6) …
Scanning processes…
Scanning processor microcode…
Scanning linux images…

Running kernel seems to be up-to-date.

The processor microcode seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

Step 3: NPU Quick Verification

Everything up until qnn-net-run didn’t return any errors.

qnn-net-run returned the following:

(.venv) radxa@radxa-dragon-q6a:~/resnet50_qairt/6490$ ./qnn-net-run   --backend ./libQnnHtp.so   --retrieve_context ./resnet50_aimet_quantized_${PRODUCT_SOC}.bin   --input_list ./test_list.txt   --output_dir output_bin
qnn-net-run pid:2323
qnn-net-run build version: v2.37.1.250807093845_124904
qnn-net-run log level is : QNN_LOG_LEVEL_ERROR
 <W> Initializing HtpProvider
Processing inference input(s):
../data/test/crop/ILSVRC2012_val_00003441.raw
../data/test/crop/ILSVRC2012_val_00008465.raw
../data/test/crop/ILSVRC2012_val_00010218.raw
../data/test/crop/ILSVRC2012_val_00044076.raw
    14.9ms [ ERROR ]  <E> DspTransport.openSession qnn_open failed, 0x80000600, prio 100

    14.9ms [ ERROR ]  <E> DspTransport.getHandle failed, error 0x0000000f

    15.0ms [ ERROR ]  <E> createDspTransportInstance failed to config transport object

    15.1ms [ ERROR ]  <E> error in creation of transport instance

    15.1ms [ ERROR ]  <E> Failed to create transport for device, error: 1002

    15.1ms [ ERROR ]  <E> Failed to load skel, error: 1002

    15.1ms [ ERROR ]  <E> Transport layer setup failed: 14001

    15.2ms [ ERROR ]  <E> Failed to parse default platform info: 14001

    15.2ms [ ERROR ]  <E> Failed to load default platform info: 14001

    15.2ms [ ERROR ]  <E> Failed to parse platform config: 14001

Device Creation failure
 <W> Backend 1 free cleanup called during process exit
journalctl -b

Had the following relevant logs:

Journalctl Logs

Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:4170: fastrpc_apps_user_init done. default domain:3 and &fastrpc_trace:0xffff959325c0
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:4291: multidsplib_env_init: libcdsprpc.so loaded
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:2668: remote_session_control Unsigned PD enable 1 request for domain 3
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:2645: remote_session_control DSP info request for domain 3, thread priority -1, stack size 17408
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: apps_std_imp.c:1062: Successfully opened file /usr/lib/dsp/cdsp/fastrpc_shell_unsigned_3
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:3328: close_device_node: closed dev 5 on domain 3
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:3800: Error 0x80000600: remote_init failed for domain 3, errno Success, ioErr -2147482112
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:4009: Error 0x80000600: domain_init (-1) failed for domain 3 (errno Success)
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:1829: Error 0x80000600: remote_handle64_open failed for file:///libQnnHtpV68Skel.so?qnn_skel_handle_invok>
Feb 13 16:47:58 radxa-dragon-q6a qnn-net-run[2323]: fastrpc_apps_user.c:4063: fastrpc_apps_user_deinit done

Hi Morgan,

I’m having the same issue as PresidentPlant. Here’s my full environment:

OS: radxa-dragon-q6a_noble_gnome_r1 .output_512.img
BIOS version: 6.0.251215.BOOT.MXF.1.0.1-00549-KODIAKWP-1

Packages installed:

  • fastrpc 1.0.3-1
  • fastrpc-dev 1.0.3-1
  • libcdsprpc1 1.0.3-1
  • radxa-firmware-qcs6490 0.2.29
  • qnn-tools 2.40.0
  • libqnn1 2.40.0

Setup followed: Official “Enable NPU on Board” docs + NPU Quick Verification

Error: Exact same 0x80000600 DspTransport.openSession qnn_open failed as PresidentPlant — full log below.

Things I’ve confirmed working:

  • Both remoteprocs (ADSP + CDSP) are running
  • cdsprpcd service is active (running)
  • /dev/fastrpc-* all present, permissions 666
  • /usr/lib/dsp/cdsp/ populated correctly for SOC ID 498
  • Error occurs even when running as root

Notably missing from our output vs your working example:

  /prj/qct/.../rpcmem_android.c:38: dummy call to rpcmem_init, rpcmem APIs will be used from libxdsprpc

This line never appears — we go straight to the DSP transport error.

Any idea what’s different between a working and non-working R1 install? Is there a BIOS setting, kernel parameter, or additional package that enables unsigned DSP execution?

Thanks!

Hi,

The NPU issues have been resolved in the latest image (radxa-dragon-q6a_noble_gnome_r2).

You can download it from the following link:

Best regards,
Morgan

Hi Morgan,

I followed your exact steps but on the R2 image (radxa-dragon-q6a_noble_gnome_r2.output_512.img), as I understood R2 resolves the FastRPC issues from this thread.

Environment:

  • OS: radxa-dragon-q6a_noble_gnome_r2.output_512.img

  • Ubuntu 24.04.4 LTS (Noble Numbat)

  • Kernel: 6.18.2-3-qcom

  • Board: Radxa Dragon Q6A (12GB LPDDR5, 256GB NVMe)

Steps followed:

  1. Followed Enable NPU on Board

  2. Installed required packages:

sudo apt install fastrpc fastrpc-dev libcdsprpc1 radxa-firmware-qcs6490
  1. Followed NPU Quick Verification exactly as posted

Installed packages (confirmed):

fastrpc 1.0.3-1
libcdsprpc1 1.0.3-1
radxa-firmware-qcs6490 0.2.29
edk2-qcs6490 0.1.0-5
radxa-system-config-qcs6490 0.6.30

Full error log:

qnn-net-run pid:1929
qnn-net-run build version: v2.37.1.250807093845_124904
qnn-net-run log level is : QNN_LOG_LEVEL_ERROR
 <W> Initializing HtpProvider
Processing inference input(s):
../data/test/crop/ILSVRC2012_val_00003441.raw
../data/test/crop/ILSVRC2012_val_00008465.raw
../data/test/crop/ILSVRC2012_val_00010218.raw
../data/test/crop/ILSVRC2012_val_00044076.raw
    19.0ms [ ERROR ]  createUnsignedPD unsigned PD or DSPRPC_GET_DSP_INFO not supported by HTP
    19.2ms [ ERROR ]  DspTransport.openSession qnn_open failed, 0x00000072, prio 100
    19.2ms [ ERROR ]  DspTransport.getHandle failed, error 0x00000007
    19.2ms [ ERROR ]  createDspTransportInstance failed to config transport object
    19.3ms [ ERROR ]  error in creation of transport instance
    19.3ms [ ERROR ]  Failed to create transport for device, error: 1002
    19.3ms [ ERROR ]  Failed to load skel, error: 1002
    19.3ms [ ERROR ]  Transport layer setup failed: 14001
    19.3ms [ ERROR ]  Failed to parse platform config: 14001
Device Creation failure

Additional info: adsprpcd service crashes and restarts in a loop every ~10 seconds. cdsprpcd runs stably. fastrpc_test -a v68 also fails with 0x80000600.

The error createUnsignedPD unsigned PD or DSPRPC_GET_DSP_INFO not supported by HTP suggests Ubuntu 24.04 is enforcing signed Protection Domain and rejecting unsigned skel images. Is there a signed skel package or a kernel configuration needed for R2?

Thank you!

Hi, @nalbakri

R2 have been fixed this problem, and pre-enable fastrpc. you don’t need to install anything after you flash the R2 image
best
Morgan

Hi Morgan,

Thank you for the quick response. I understand R2 should have this pre-fixed, but I am still experiencing the issue on a fresh R2 flash with nothing extra installed.

After digging into the logs I found something interesting. The firmware files exist and have correct permissions:

-rw-r--r-- 1 root root 9871840 adsp.mbn
-rw-r--r-- 1 root root 3612672 cdsp.mbn

However dmesg shows the kernel attempts to load them at timestamp 1.008s — very early in boot — and fails:

[1.008225] remoteproc remoteproc0: Direct firmware load for 
qcom/qcs6490/radxa/dragon-q6a/adsp.mbn failed with error -2
[1.014913] remoteproc remoteproc1: Direct firmware load for 
qcom/qcs6490/radxa/dragon-q6a/cdsp.mbn failed with error -2

This causes adsprpcd to “report fastRPC device driver is disabled, daemon exiting…” and qnn-net-run fails with “createUnsignedPD unsigned PD or DSPRPC_GET_DSP_INFO not supported by HTP.”
Could this be a timing issue where remoteproc tries to load the firmware before the filesystem is available? The board is booting from NVMe rather than eMMC, could that be relevant?
System info:

  • OS: radxa-dragon-q6a_noble_gnome_r2.output_512.img
    Kernel: 6.18.2-3-qcom
    Board: Radxa Dragon Q6A (12GB LPDDR5, booting from NVMe)

Thank you!

1 Like

Could you please check your current SPI boot firmware version by running the following command:
sudo dmidecode -s bios-version

The latest recommended version is:
6.0.260120.BOOT.MXF.1.0.1-00549-KODIAKWP-1

If your version is older, this could indeed be related to the early-boot firmware loading issue you’re seeing—especially since you’re booting from NVMe, which may affect device initialization timing.

You can update the SPI boot firmware using the instructions and files provided here:

Please let us know if the issue persists after updating!

1 Like

Edited because I found the solution:

Hi everyone,

After extensive troubleshooting I finally got the NPU working on my Radxa Dragon Q6A booting from NVMe. For anyone else hitting this issue, here is the complete fix.
My setup:

OS: radxa-dragon-q6a_noble_gnome_r2.output_512.img
Kernel: 6.18.2-3-qcom
Storage: 256GB NVMe (booting from NVMe, not eMMC)

The problems and their fixes:
Problem 1: DSP firmware not loading at boot
The kernel tries to load adsp.mbn and cdsp.mbn at ~0.934 seconds, before the NVMe root filesystem is mounted. This causes a silent failure with error -2. The fix is to add the firmware to the initramfs so it’s available at early boot:

sudo tee /etc/initramfs-tools/hooks/qcom-dsp <<‘EOF’
#!/bin/sh
PREREQ=“”
prereqs() { echo “$PREREQ”; }
case “$1” in prereqs) prereqs; exit 0 ;; esac
. /usr/share/initramfs-tools/hook-functions
copy_file firmware /lib/firmware/qcom/qcs6490/radxa/dragon-q6a/adsp.mbn
copy_file firmware /lib/firmware/qcom/qcs6490/radxa/dragon-q6a/cdsp.mbn
EOF
sudo chmod +x /etc/initramfs-tools/hooks/qcom-dsp
sudo update-initramfs -u
sudo reboot

After this reboot you should see in dmesg:

remote processor cdsp is now up
remote processor adsp is now up

Problem 2: FastRPC device permission errors
Even with the DSP booting correctly, the HTP was rejecting unsigned Protection Domain requests. The fix is to add udev rules to set the correct permissions on the fastrpc devices:

sudo tee /etc/udev/rules.d/99-fastrpc.rules <<‘EOF’
KERNEL==“fastrpc-\*”, MODE=“0666”
SUBSYSTEM==“dma_heap”, KERNEL==“system”, MODE=“0666”
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger

Problem 3: Missing output directory
The qnn-net-run tool needs the output directory to exist before running:

mkdir -p \~/resnet50_qairt/6490/output_bin
sudo chown -R radxa:radxa \~/resnet50_qairt/6490/output_bin

After all three fixes, the NPU test passes perfectly:

Classification results
acoustic guitar ✅
trifle ✅
tabby ✅
proboscis monkey ✅

I hope this helps other NVMe users. The root cause is that the R2 image was not designed with NVMe boot timing in mind — the DSP firmware needs to be in the initramfs for NVMe users. This would be a great fix to include in R3.
Thank you to Morgan and chenchongbiao for their support!

1 Like

I bumped into this yesterday (very fresh). A guy seems to have gotten it working following a different process. I do not know which one is better, but I’d thought I’d add it here just in case it is also helpful.

https://olof-astrand.medium.com/radxa-dragon-q6a-fastrpc-success-a954a1f52094