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-cdspand/dev/fastrpc-cdsp-secureexist. -
Running as normal user fails.
-
Running with
sudoalso fails. -
Running with explicit
ADSP_LIBRARY_PATHandLD_LIBRARY_PATHalso fails. -
Adding RFSA symlinks for QNN skel/libc++ did not fix QNN.
-
Adding RFSA symlinks for
fastrpc_shell_unsigned_3and fastrpc-test v68 skels did not fix FastRPC. -
Starting
/usr/bin/cdsprpcdmanually did not help. -
FASTRPC_DEBUG_TESTSIG=1did not help. -
Forcing non-secure
/dev/fastrpc-cdspinstead of/dev/fastrpc-cdsp-securedid not help. -
Radxa official
Inception_v3_qairt_tflite_delegatedemo also fails with the sameqnn_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:
-
Is unsigned user-PD creation supported on Dragon Q6A Ubuntu 24.04 with the current public firmware/kernel?
-
Does Dragon Q6A require a testsig setting/tool, special firmware, or signed
fastrpc_shell_unsigned_3/ skel package? -
Is
fastrpc_test -a v68expected to pass on the current Dragon Q6A Ubuntu image? -
If yes, what exact package/image/kernel/firmware combination is known to pass it?
-
Should Dragon Q6A use Radxa
fastrpc1.0.4-1, Canonicalqcom-fastrpc1, or some other FastRPC package set? -
Is there a supported way to enable unsigned CDSP user PDs on this board?
-
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 -
straceshowingFASTRPC_IOCTL_INIT_CREATE = 0xffffffff80000600 -
dmesg -
package list
-
remoteproc state
-
/dev/fastrpc-*permissions -
QNN/TFLite delegate failure logs
Thanks.