Dragon Q6A FastRPC/NPU fails: FASTRPC_IOCTL_INIT_CREATE returns 0x80000600 on CDSP

Hi Radxa team,

I’m trying to get NPU / HTP acceleration working on a Radxa Dragon Q6A, but I seem to be blocked at a lower FastRPC/CDSP user-PD creation level.

Board/setup:

  • Board: Radxa Dragon Q6A

  • SoC: QCS6490

  • OS: Ubuntu 24.04 Noble

  • Kernel: 6.18.2-4-qcom

  • Goal: run QNN / HTP / TFLite delegate on the NPU

I have already fixed one earlier issue: ADSP/CDSP firmware was not included in initramfs, so remoteproc failed to load the firmware at boot. I added an initramfs hook to include the Dragon Q6A remoteproc firmware, rebuilt initramfs, rebooted, and now both DSPs start automatically.

Current boot state:

remoteproc0 adsp running
remoteproc1 cdsp running
/dev/fastrpc-adsp
/dev/fastrpc-cdsp
/dev/fastrpc-cdsp-secure

Originally I was debugging QNN/HTP because qnn-platform-validator, SNPE validator, and the Radxa TFLite delegate demo all failed with errors like:

DspTransport.openSession qnn_open failed, 0x80000600
Failed to load skel, error: 1002
Transport layer setup failed: 14001
QNN_DEVICE_ERROR_INVALID_CONFIG
Please use testsig if using unsigned images

However, after more testing, this now looks lower than QNN/TFLite. Even Radxa fastrpc_test -a v68 fails.

I installed Radxa packages:

fastrpc       1.0.4-1
fastrpc-test  1.0.4-1
libcdsprpc1   1.0.4-1

Then tested with sudo and explicit paths:

sudo env \
ADSP_LIBRARY_PATH=/usr/share/fastrpc_test/v68:/usr/lib/rfsa/adsp/cdsp:/usr/lib/dsp/cdsp \
LD_LIBRARY_PATH=/usr/lib/fastrpc_test:/usr/lib/rfsa/adsp/cdsp:/usr/lib \
fastrpc_test -a v68

Result:

ERROR 0x80000600: Failed to compute sum on domain 3
ERROR 0x80000600: Failed to find max on domain 3
[FAIL] libcalculator.so (error code: 0x80000600)

ERROR 0x80000600: Unable to create FastRPC session on domain 3

[FAIL] libhap_example.so (error code: 0x80000600)
[FAIL] libmultithreading.so (error code: 0x80000600)

RESULT: 3 test(s) FAILED

The most useful new finding is from strace. It shows this is not just a missing skel path:

openat("/dev/fastrpc-cdsp-secure", O_RDONLY|O_NONBLOCK) = ok
ioctl(FASTRPC_IOCTL_GET_DSP_INFO) = 0
openat("/usr/lib/rfsa/adsp/cdsp/fastrpc_shell_unsigned_3") = ok
ioctl(FASTRPC_IOCTL_INIT_CREATE) = 0xffffffff80000600

So CDSP is reachable enough for GET_DSP_INFO, and fastrpc_shell_unsigned_3 is found, but FastRPC user-PD/session creation fails at FASTRPC_IOCTL_INIT_CREATE.

Things already tested:

  • ADSP/CDSP are running through remoteproc.

  • /dev/fastrpc-cdsp and /dev/fastrpc-cdsp-secure exist.

  • Running as normal user fails.

  • Running with sudo also fails.

  • Running with explicit ADSP_LIBRARY_PATH and LD_LIBRARY_PATH also fails.

  • Adding RFSA symlinks for QNN skel/libc++ did not fix QNN.

  • Adding RFSA symlinks for fastrpc_shell_unsigned_3 and fastrpc-test v68 skels did not fix FastRPC.

  • Starting /usr/bin/cdsprpcd manually did not help.

  • FASTRPC_DEBUG_TESTSIG=1 did not help.

  • Forcing non-secure /dev/fastrpc-cdsp instead of /dev/fastrpc-cdsp-secure did not help.

  • Radxa official Inception_v3_qairt_tflite_delegate demo also fails with the same qnn_open 0x80000600 / skel load 1002 error.

My current understanding:

FastRPC device exists
CDSP is running
DSP info ioctl works
fastrpc_shell_unsigned_3 is found
FASTRPC_IOCTL_INIT_CREATE fails with 0x80000600

This looks like a kernel/firmware/security policy issue around unsigned user-PD creation on CDSP, rather than a TensorFlow Lite, YOLO, Python, or QNN model problem.

Questions:

  1. Is unsigned user-PD creation supported on Dragon Q6A Ubuntu 24.04 with the current public firmware/kernel?

  2. Does Dragon Q6A require a testsig setting/tool, special firmware, or signed fastrpc_shell_unsigned_3 / skel package?

  3. Is fastrpc_test -a v68 expected to pass on the current Dragon Q6A Ubuntu image?

  4. If yes, what exact package/image/kernel/firmware combination is known to pass it?

  5. Should Dragon Q6A use Radxa fastrpc 1.0.4-1, Canonical qcom-fastrpc1, or some other FastRPC package set?

  6. Is there a supported way to enable unsigned CDSP user PDs on this board?

  7. If unsigned user PD is not supported, where can I get the signed Dragon Q6A-compatible skels/runtime package needed for QNN/HTP?

I can provide logs for:

  • fastrpc_test -a v68

  • strace showing FASTRPC_IOCTL_INIT_CREATE = 0xffffffff80000600

  • dmesg

  • package list

  • remoteproc state

  • /dev/fastrpc-* permissions

  • QNN/TFLite delegate failure logs

Thanks.