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.

1 Like

I have issue to get NPU working.
I use Debian Testing with Radxa’s 7.0.11-2-qcom and fastrpc_1.0.6-1. Things is not going well, and these are the result of my end:

fastrpc_test -a v68
ERROR 0x80000600: Unable to create FastRPC session on domain 3
Exiting…
Test FAILED
Please look at the mini-dm logs or the adb logcat logs for DSP output
[FAIL] libmultithreading.so (error code: 0x80000600)

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

hap_example function FAILED
Please look at the mini-dm logs or the adb logcat logs for DSP output
Error occurred with selector FARF_RUNTIME (id: 0): -2147482112
ERROR 0x80000600: Unable to create FastRPC session on domain 3

hap_example function FAILED
Please look at the mini-dm logs or the adb logcat logs for DSP output
Error occurred with selector MEM (id: 1): -2147482112
ERROR 0x80000600: Unable to create FastRPC session on domain 3

hap_example function FAILED
Please look at the mini-dm logs or the adb logcat logs for DSP output
Error occurred with selector PERF (id: 2): -2147482112
[FAIL] libhap_example.so (error code: 0x80000600)

Allocate 4000 bytes from ION heap
Creating sequence of numbers from 0 to 999
Compute sum on domain 3
Retry attempt unsuccessful. Timing out…
ERROR 0x80000600: Failed to compute sum on domain 3
ERROR 0x80000600: Failed to find max on domain 3
[FAIL] libcalculator.so (error code: 0x80000600)

========================================
Test Summary:
Total tests run:    3
Passed:             0
Failed:             3
Skipped:            0

RESULT: 3 test(s) FAILED

Thanks, this is very useful. I’m seeing basically the same failure on my Dragon Q6A too:

fastrpc_test -a v68

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

So it looks like the problem is below QNN/TFLite/model level. FastRPC cannot even create a CDSP/domain 3 session.

On my side, remoteproc/CDSP looked alive and FastRPC device nodes existed, but fastrpc_test -a v68 still failed. I also saw signs pointing toward FastRPC reserved DMA memory / CDSP session setup rather than an AI model issue.

Could you also share:

uname -a

dpkg -l | grep -E “qcom|radxa|fastrpc|firmware”

ls -l /dev/fastrpc* /dev/adsprpc* 2>/dev/null

dmesg | grep -i -E “fastrpc|cdsp|adsp|remoteproc|dma|reserved|qcom”

cat /proc/cmdline

If both 6.18 and 7.0.11-2-qcom fail with the same 0x80000600, then maybe we should report this as a Radxa/QCOM kernel/DTB/firmware issue instead of debugging QNN models.

Thank you @okay . I have alsow opened a report in github fastrpc.

Here my result as you asked:

uname -a
Linux dragon 7.0.11-2-qcom #2 SMP PREEMPT_DYNAMIC Fri Jun 26 16:39:16 UTC 2026 aarch64 GNU/Linux

dpkg -l | grep -E “qcom|radxa|fastrpc|firmware”
ii  aic8800-firmware                              5.0+git20260123.5f7be68d-6         all          Aicsemi aic8800 supplemental firmware
ii  alsa-ucm-conf                                 1.2.14-1radxa3                     all          ALSA Use Case Manager configuration files
ii  fastrpc                                       1.0.6-1                            arm64        Facilitates efficient remote procedure calls - main package
ii  fastrpc-support                               1.0.2-2                            arm64        Qualcomm FastRPC - support daemons and udev rules
ii  fastrpc-test                                  1.0.6-1                            arm64        Facilitates efficient remote procedure calls - test files
ii  firmware-atheros                              20260519-1                         all          Binary firmware for Qualcomm Atheros wireless cards
ii  firmware-qcom-dsp                             0~20260519-1                       all          Binary firmware for DSP on Qualcomm SoCs
ii  firmware-qcom-soc                             20260519-1                         all          Binary firmware for Qualcomm SoCs
ii  firmware-realtek                              20260519-1                         all          Binary firmware for Realtek network and audio chips
ii  fwupd-arm64-signed                            1:1.8+5                            arm64        Tools to manage UEFI firmware updates (signed)
ii  hexagon-dsp-binaries-radxa-dragon-q6a         0~20260519-1                       all          Hexagon DSP binaries and libraries for radxa dragon-q6a
ii  linux-headers-6.18.2-4-qcom                   6.18.2-4                           arm64        Linux kernel headers for 6.18.2-4-qcom on arm64
ii  linux-headers-7.0.11-1-qcom                   7.0.11-1                           arm64        Linux kernel headers for 7.0.11-1-qcom on arm64
ii  linux-headers-7.0.11-2-qcom                   7.0.11-2                           arm64        Linux kernel headers for 7.0.11-2-qcom on arm64
ii  linux-image-6.18.2-4-qcom                     6.18.2-4                           arm64        Linux kernel, version 6.18.2-4-qcom
ii  linux-image-7.0.11-1-qcom                     7.0.11-1                           arm64        Linux kernel, version 7.0.11-1-qcom
ii  linux-image-7.0.11-2-qcom                     7.0.11-2                           arm64        Linux kernel, version 7.0.11-2-qcom
ii  radxa-firmware                                0.2.35                             all          Radxa supplemental firmware


ls -l /dev/fastrpc* /dev/adsprpc* 2>/dev/null
crw-r----- 1 root fastrpc 10, 265 Jun 28 23:07 /dev/fastrpc-adsp
crw-r----- 1 root fastrpc 10, 264 Jun 28 23:07 /dev/fastrpc-cdsp
crw-r----- 1 fastrpc fastrpc 10, 263 Jun 28 23:07 /dev/fastrpc-cdsp-secure

sudo dmesg | grep -i -E “fastrpc|cdsp|adsp|remoteproc|dma|reserved|qcom”
[sudo] password for sally:
[    0.000000] Linux version 7.0.11-2-qcom (vscode@c62a947ff66f) (aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #2 SMP PREEMPT_DYNAMIC Fri Jun 26 16:39:16 UTC 2026
[    0.000000] OF: reserved mem: 0x0000000080000000..0x00000000805fffff (6144 KiB) nomap non-reusable hyp@80000000
[    0.000000] OF: reserved mem: 0x0000000080600000..0x00000000807fffff (2048 KiB) nomap non-reusable xbl@80600000
[    0.000000] OF: reserved mem: 0x0000000080800000..0x000000008085ffff (384 KiB) nomap non-reusable aop@80800000
[    0.000000] OF: reserved mem: 0x0000000080860000..0x000000008087ffff (128 KiB) nomap non-reusable aop-cmd-db@80860000
[    0.000000] OF: reserved mem: 0x0000000080884000..0x0000000080893fff (64 KiB) nomap non-reusable xbl-uefi-res@80880000
[    0.000000] OF: reserved mem: 0x00000000808ff000..0x00000000808fffff (4 KiB) nomap non-reusable sec-apps@808ff000
[    0.000000] OF: reserved mem: 0x0000000080900000..0x0000000080afffff (2048 KiB) nomap non-reusable smem@80900000
[    0.000000] OF: reserved mem: 0x0000000080b00000..0x0000000080bfffff (1024 KiB) nomap non-reusable cpucp@80b00000
[    0.000000] OF: reserved mem: 0x0000000081800000..0x00000000826fffff (15360 KiB) nomap non-reusable lpass-ml@81800000
[    0.000000] OF: reserved mem: 0x0000000082700000..0x000000008270ffff (64 KiB) nomap non-reusable cdsp-secure-heap@82700000
[    0.000000] OF: reserved mem: 0x000000008b800000..0x000000008dffffff (40960 KiB) nomap non-reusable adsp@8b800000
[    0.000000] OF: reserved mem: 0x000000008e000000..0x000000008fdfffff (30720 KiB) nomap non-reusable cdsp@8e000000
[    0.000000] OF: reserved mem: 0x000000008fe00000..0x00000000902fffff (5120 KiB) nomap non-reusable video@8fe00000
[    0.000000] OF: reserved mem: 0x0000000090300000..0x0000000090304fff (20 KiB) nomap non-reusable zap@90300000
[    0.000000] OF: reserved mem: 0x00000000c0000000..0x00000000c00fffff (1024 KiB) nomap non-reusable tz-stat@c0000000
[    0.000000] OF: reserved mem: 0x00000000c0100000..0x00000000c12fffff (18432 KiB) nomap non-reusable tags@c0100000
[    0.000000] OF: reserved mem: 0x00000000c1300000..0x00000000c17fffff (5120 KiB) nomap non-reusable qtee@c1300000
[    0.000000] OF: reserved mem: 0x00000000c1800000..0x00000000c39fffff (34816 KiB) nomap non-reusable trusted-apps@c1800000
[    0.000000] OF: reserved mem: 0x00000000c6500000..0x00000000c6cfffff (8192 KiB) nomap non-reusable adsp-rpc-remote-heap@c6500000
[    0.000000] cma: Reserved 32 MiB at 0x00000000fda00000
[    0.000000]   DMA      [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000]   DMA32    empty
[    0.000000] On node 0, zone DMA: 132 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 512 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 1280 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 19209 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 42496 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 3840 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 2048 pages in unavailable ranges
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-7.0.11-2-qcom root=UUID=6996ed0e-617e-406b-87de-3cb9c926865e ro clk_ignore_unused
[    0.020770] Memory: 11722792K/12304844K available (22848K kernel code, 14530K rwdata, 17620K rodata, 18112K init, 3134K bss, 541232K reserved, 32768K cma-reserved)
[    0.032433] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations
[    0.032700] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.055557] iommu: DMA domain TLB invalidation policy: strict mode
[    0.058740] qcom_scm: convention: smc arm 64
[    0.059487] qcom_scm firmware:scm: qseecom: found qseecom with version 0x1402000
[    0.059983] qcom_scm firmware:scm: scm storage size 33554432 bytes
[    0.060178] qcom_qseecom qcom_qseecom: setting up client for qcom.tz.uefisecapp
[    0.110520] arm-smmu 3da0000.iommu: 	preserved 0 boot mappings
[    0.113195] arm-smmu 15000000.iommu: 	preserved 0 boot mappings
[    0.113984] platform 900000.dma-controller: Adding to iommu group 3
[    0.114066] platform a00000.dma-controller: Adding to iommu group 5
[    0.114165] platform 1dc4000.dma-controller: Adding to iommu group 7

[    0.147572] EDAC DEVICE0: Giving out device to module qcom_llcc_edac controller llcc: DEV qcom_llcc_edac (INTERRUPT)
[    0.161375] qcom,qfprom 784000.efuse: supply vcc not found, using dummy regulator
[    0.361228] mmc0: SDHCI controller on 7c4000.mmc [7c4000.mmc] using ADMA 64-bit
[    0.367486] mmc1: SDHCI controller on 8804000.mmc [8804000.mmc] using ADMA 64-bit
[    0.973325] qcom-pcie 1c08000.pcie: supply vdda not found, using dummy regulator
[    0.973382] qcom-pcie 1c08000.pcie: supply vddpe-3v3 not found, using dummy regulator
[    0.973512] qcom-pcie 1c08000.pcie: host bridge /soc@0/pcie@1c08000 ranges:
[    0.973527] qcom-pcie 1c08000.pcie:       IO 0x0040200000..0x00402fffff → 0x0000000000
[    0.973533] qcom-pcie 1c08000.pcie:      MEM 0x0040300000..0x005fffffff → 0x0040300000
[    0.973594] qcom-pcie 1c00000.pcie: supply vdda not found, using dummy regulator
[    0.973643] qcom-pcie 1c00000.pcie: supply vddpe-3v3 not found, using dummy regulator
[    0.991431] qcom-pcie 1c00000.pcie: host bridge /soc@0/pcie@1c00000 ranges:
[    0.991486] qcom-pcie 1c00000.pcie:       IO 0x0060200000..0x00602fffff → 0x0000000000
[    0.991507] qcom-pcie 1c00000.pcie:      MEM 0x0060300000..0x0063ffffff → 0x0060300000
[    1.028495] usb usb1: Manufacturer: Linux 7.0.11-2-qcom xhci-hcd
[    1.086750] qcom-pcie 1c08000.pcie: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 1024G
[    1.103136] qcom-pcie 1c00000.pcie: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 1024G
[    1.286772] qcom-pcie 1c08000.pcie: PCIe Gen.3 x2 link up
[    1.287520] qcom-pcie 1c08000.pcie: PCI host bridge to bus 0001:00
[    1.302091] qcom-pcie 1c00000.pcie: PCIe Gen.1 x1 link up
[    1.302173] qcom-pcie 1c00000.pcie: PCI host bridge to bus 0000:00
[    1.317607] Modules linked in: r8169 qcom_pon nvmem_qcom_spmi_sdam gpu_sched camcc_sc7280 i2c_qcom_geni qcom_sysmon videocc_sc7280 aux_bridge dwc3_qcom pinctrl_lpass_lpi drm_exec lpassaudiocc_sc7280 mdt_loader phy_qcom_qmp_pcie phy_qcom_qmp_ufs qcom_wdt nvmem_reboot_mode
[    1.317638] CPU: 6 UID: 0 PID: 72 Comm: kworker/u32:4 Not tainted 7.0.11-2-qcom #2 PREEMPT(lazy)  f861619c24fea5f0601300adc57f7b418b1326a5
[    1.317828]  qcom_pcie_probe+0x684/0x970
[    1.558653] qcom_q6v5_pas 3700000.remoteproc: Failed to read SMP2P state; falling back to firmware load
[    1.558869] remoteproc remoteproc0: adsp is available
[    1.563791] qcom_q6v5_pas a300000.remoteproc: Failed to read SMP2P state; falling back to firmware load
[    1.563975] remoteproc remoteproc1: cdsp is available
[    1.570717] remoteproc remoteproc0: powering up adsp
[    1.572783] remoteproc remoteproc1: powering up cdsp
[    1.576771] remoteproc remoteproc1: Booting fw image qcom/qcs6490/radxa/dragon-q6a/cdsp.mbn, size 3612672
[    1.577137] remoteproc remoteproc0: Booting fw image qcom/qcs6490/radxa/dragon-q6a/adsp.mbn, size 9871840
[    1.602564] usb usb2: Manufacturer: Linux 7.0.11-2-qcom xhci-hcd
[    1.610432] usb usb3: Manufacturer: Linux 7.0.11-2-qcom xhci-hcd
[    1.665957] remoteproc remoteproc1: remote processor cdsp is now up
[    1.668944] qcom_q6v5_pas 3700000.remoteproc: Handover signaled, but it already happened
[    1.677440] remoteproc remoteproc0: remote processor adsp is now up
[    1.687326] PDR: Indication received from msm/adsp/audio_pd, state: 0x1fffffff, trans-id: 1
[    1.687491] qcom,apr 3700000.remoteproc:glink-edge.adsp_apps.-1.-1: Adding APR/GPR dev: gprsvc:service:2:1
[    1.687646] qcom,apr 3700000.remoteproc:glink-edge.adsp_apps.-1.-1: Adding APR/GPR dev: gprsvc:service:2:2
[    1.703738] msm_dpu ae01000.display-controller: Direct firmware load for qcom/a660_sqe.fw failed with error -2
[    1.824989] WARNING: drivers/clk/qcom/clk-rcg2.c:156 at update_config+0x110/0x150, CPU#6: (udev-worker)/207
[    1.825015] Modules linked in: rpmsg_ctrl qrtr_smd rpmsg_char qcom_pd_mapper rtc_ds1307 msm(+) ubwc_config ocmem qcom_q6v5_pas qcom_pil_info phy_qcom_qmp_combo qcom_common pinctrl_sc7280_lpass_lpi qcom_glink_smem drm_gpuvm qcom_q6v5 r8169 qcom_pon nvmem_qcom_spmi_sdam gpu_sched camcc_sc7280 i2c_qcom_geni qcom_sysmon videocc_sc7280 aux_bridge dwc3_qcom pinctrl_lpass_lpi drm_exec lpassaudiocc_sc7280 mdt_loader phy_qcom_qmp_pcie phy_qcom_qmp_ufs qcom_wdt nvmem_reboot_mode

[    1.825086] CPU: 6 UID: 0 PID: 207 Comm: (udev-worker) Tainted: G        W           7.0.11-2-qcom #2 PREEMPT(lazy)  f861619c24fea5f0601300adc57f7b418b1326a5
[    1.825277]  qmp_v3_configure_dp_clocks+0x90/0xf0 [phy_qcom_qmp_combo 5963cfc1f1b6cbc313818ed46ded8bd7033388c3]
[    1.825304]  qmp_v456_configure_dp_phy+0x98/0x310 [phy_qcom_qmp_combo 5963cfc1f1b6cbc313818ed46ded8bd7033388c3]
[    1.825322]  qmp_v4_configure_dp_phy+0x2c/0x268 [phy_qcom_qmp_combo 5963cfc1f1b6cbc313818ed46ded8bd7033388c3]
[    1.825337]  qmp_combo_dp_power_on+0x1f0/0x470 [phy_qcom_qmp_combo 5963cfc1f1b6cbc313818ed46ded8bd7033388c3]
[    6.176319] qcom_scm_storage qcom_scm_storage: scm storage 0x1960ef registered with size 33554432 bytes
[    6.216755] qcomtee: QTEE version 0.0.0
[    6.380109] qcom,fastrpc a300000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC
[    6.385614] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@1: Adding to iommu group 16
[    6.418854] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@2: Adding to iommu group 17
[    6.423175] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@3: Adding to iommu group 18
[    6.426758] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@4: Adding to iommu group 19
[    6.428176] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@5: Adding to iommu group 20
[    6.431664] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@6: Adding to iommu group 21
[    6.449822] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@7: Adding to iommu group 22
[    6.458367] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@8: Adding to iommu group 23
[    6.472305] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@11: Adding to iommu group 24
[    6.522066] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@12: Adding to iommu group 25
[    6.560039] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@13: Adding to iommu group 26
[    6.574359] platform a300000.remoteproc:glink-edge:fastrpc:compute-cb@14: Adding to iommu group 27
[    6.585011] qcom,fastrpc 3700000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC
[    6.595463] platform 3700000.remoteproc:glink-edge:fastrpc:compute-cb@3: Adding to iommu group 28
[    6.622497] platform 3700000.remoteproc:glink-edge:fastrpc:compute-cb@4: Adding to iommu group 29
[    6.637549] platform 3700000.remoteproc:glink-edge:fastrpc:compute-cb@5: Adding to iommu group 30
[    7.014901] qcom-iris aa00000.video-codec: firmware download failed -22
[    7.018489] qcom-iris aa00000.video-codec: core init failed
[    7.021505] qcom-iris aa00000.video-codec: firmware download failed -22
[    7.024040] qcom-iris aa00000.video-codec: core init failed
[    7.953659] qcom-iris aa00000.video-codec: firmware download failed -22
[    7.964487] qcom-iris aa00000.video-codec: core init failed
[    7.968934] qcom-iris aa00000.video-codec: firmware download failed -22
[    7.980468] qcom-iris aa00000.video-codec: core init failed
[    9.474654] qcom-iris aa00000.video-codec: firmware download failed -22
[    9.484580] qcom-iris aa00000.video-codec: core init failed
[    9.494366] qcom-iris aa00000.video-codec: firmware download failed -22
[    9.503974] qcom-iris aa00000.video-codec: core init failed
[   10.200946] msm_dpu ae01000.display-controller: [drm:adreno_request_fw [msm]] loaded qcom/a660_sqe.fw from new location
[   10.201898] msm_dpu ae01000.display-controller: [drm:adreno_request_fw [msm]] loaded qcom/a660_gmu.bin from new location
[   11.749166] qcom-apm gprsvc:service:2:1: CMD timeout for [1001021] opcode
[   11.756607] platform 3700000.remoteproc:glink-edge:gpr:service@1:dais: Adding to iommu group 31
[   11.818735] qcom-soundwire 3210000.soundwire: din-ports (0) mismatch with controller (1)
[   11.827238] qcom-soundwire 3210000.soundwire: dout-ports (5) mismatch with controller (6)
[   11.839701] qcom-soundwire 3230000.soundwire: din-ports (3) mismatch with controller (4)
[   12.684999] qcom-iris aa00000.video-codec: firmware download failed -22
[   12.694542] qcom-iris aa00000.video-codec: core init failed
[   12.703062] qcom-iris aa00000.video-codec: firmware download failed -22
[   12.712533] qcom-iris aa00000.video-codec: core init failed
[   18.349836] qcom-iris aa00000.video-codec: firmware download failed -22

[   18.363036] qcom-iris aa00000.video-codec: core init failed
[   18.370691] qcom-iris aa00000.video-codec: firmware download failed -22
[   18.380253] qcom-iris aa00000.video-codec: core init failed
[   18.959481] qcom-iris aa00000.video-codec: firmware download failed -22
[   18.968908] qcom-iris aa00000.video-codec: core init failed
[   18.978303] qcom-iris aa00000.video-codec: firmware download failed -22
[   18.988472] qcom-iris aa00000.video-codec: core init failed
[   20.129379] qcom-iris aa00000.video-codec: firmware download failed -22
[   20.139027] qcom-iris aa00000.video-codec: core init failed
[   20.147757] qcom-iris aa00000.video-codec: firmware download failed -22
[   20.157411] qcom-iris aa00000.video-codec: core init failed
[   44.845651] qcom-iris aa00000.video-codec: firmware download failed -22
[   44.855720] qcom-iris aa00000.video-codec: core init failed
[   44.959505] qcom-iris aa00000.video-codec: firmware download failed -22
[   44.969134] qcom-iris aa00000.video-codec: core init failed
[  134.671059] qcom-iris aa00000.video-codec: firmware download failed -22
[  134.680529] qcom-iris aa00000.video-codec: core init failed
[  134.758708] qcom-iris aa00000.video-codec: firmware download failed -22
[  134.768713] qcom-iris aa00000.video-codec: core init failed
[  135.718920] qcom-iris aa00000.video-codec: firmware download failed -22
[  135.729021] qcom-iris aa00000.video-codec: core init failed
[  135.739372] qcom-iris aa00000.video-codec: firmware download failed -22
[  135.748843] qcom-iris aa00000.video-codec: core init failed

cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-7.0.11-2-qcom root=UUID=6996ed0e-617e-406b-87de-3cb9c926865e ro clk_ignore_unused

Thanks, this is very helpful. I think your logs show the same root issue I am seeing.

The key line seems to be:

qcom,fastrpc a300000.remoteproc:…: no reserved DMA memory for FASTRPC

qcom,fastrpc 3700000.remoteproc:…: no reserved DMA memory for FASTRPC

So CDSP/ADSP are booting and the /dev/fastrpc-* nodes exist, but FastRPC has no reserved DMA memory available. That would explain why fastrpc_test -a v68 fails with:

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

This looks lower level than QNN/TFLite/model code. It seems more like a kernel/device-tree/reserved-memory issue in the Radxa/QCOM BSP. The DSP is up, but FastRPC cannot create a usable session because the required shared DMA memory region is missing or not attached correctly.

So maybe the bug report should focus on:

no reserved DMA memory for FASTRPC

rather than the model/runtime layer.

1 Like

Thank you.

Here the dtbs with my current installed kernel:

dpkg -L linux-image-$(uname -r) | grep -i dtb | grep -i radxa
/usr/lib/linux-image-7.0.11-2-qcom/amlogic/meson-g12a-radxa-zero.dtb
/usr/lib/linux-image-7.0.11-2-qcom/amlogic/meson-g12b-radxa-zero-2pro.dtb
/usr/lib/linux-image-7.0.11-2-qcom/amlogic/meson-g12b-radxa-zero2.dtb
/usr/lib/linux-image-7.0.11-2-qcom/mediatek/mt8395-radxa-nio-12l-8-hd-panel.dtb
/usr/lib/linux-image-7.0.11-2-qcom/mediatek/mt8395-radxa-nio-12l-8-hd-panel.dtbo
/usr/lib/linux-image-7.0.11-2-qcom/mediatek/mt8395-radxa-nio-12l.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/qcs6490-radxa-cm-q64-rpi-cm5-io-kvm.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/qcs6490-radxa-cm-q64-rpi-cm5-io.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/qcs6490-radxa-dragon-q6a-kvm.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/qcs6490-radxa-dragon-q6a.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/sc8280xp-radxa-dragon-q8b-el2.dtb
/usr/lib/linux-image-7.0.11-2-qcom/qcom/sc8280xp-radxa-dragon-q8b.dtb

Is there any missing dtbs which I have to install?

Thanks. From that list, the main Dragon Q6A DTB seems to be installed:

/usr/lib/linux-image-7.0.11-2-qcom/qcom/qcs6490-radxa-dragon-q6a.dtb

So I don’t think this is simply a missing DTB package.

The issue may be that the installed DTB does not include the required FastRPC reserved DMA memory region, or the FastRPC node does not reference it with memory-region.

The dmesg line still seems like the key clue:

qcom,fastrpc … no reserved DMA memory for FASTRPC

Could you check the live device tree with:

sudo apt install -y device-tree-compiler

mkdir -p ~/dtb-check

cd ~/dtb-check

sudo dtc -I fs -O dts /sys/firmware/devicetree/base > live.dts

grep -n -i -E “fastrpc|cdsp|adsp|reserved-memory|memory-region|dma-pool|remoteproc” live.dts > fastrpc-memory-check.txt

sed -n ‘1,260p’ fastrpc-memory-check.txt

What we need to confirm is whether the live FastRPC/CDSP node has something like:

memory-region = <…>;

pointing to a reserved shared-dma-pool.

If the DTB exists but the memory-region is missing, then the fix is probably a kernel/device-tree patch or overlay, not installing another DTB package.

1 Like

I finally got FastRPC working on my Dragon Q6A.

Short version: the issue was not only the missing device-tree FastRPC memory-region. There were actually two problems.

  1. Device tree / boot overlay issue

The live DT originally had FastRPC nodes without memory-region, and dmesg showed:

qcom,fastrpc … no reserved DMA memory for FASTRPC

I first made a DTBO overlay to add:

memory-region = <&adsp_rpc_remote_heap_mem>;

to both FastRPC nodes:

/soc@0/remoteproc@a300000/glink-edge/fastrpc
/soc@0/remoteproc@3700000/glink-edge/fastrpc

But on my board, /boot/extlinux/extlinux.conf was not the active boot path. The board boots via Qualcomm UEFI + systemd-boot, so the active entry was:

/boot/efi/loader/entries/RadxaOS-6.18.2-4-qcom.conf

After installing the overlay into the active EFI DTBO folder and adding it to the systemd-boot entry, the memory-region appeared in the live device tree.

Then I made a v2 overlay that also added:

compatible = “shared-dma-pool”;

to:

/reserved-memory/adsp-rpc-remote-heap@c6500000

After reboot, the old “no reserved DMA memory for FASTRPC” warning disappeared, and dmesg showed the FastRPC pool being created and assigned.

  1. Corrupted / mixed DSP payload files

Even after the DT fix, fastrpc_test still failed with:

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

The real remaining issue was that my DSP payload tree was modified/mixed. dpkg -V radxa-firmware-qcs6490 showed many mismatched DSP files. In particular:

/usr/lib/dsp/cdsp/fastrpc_shell_3
/usr/lib/dsp/cdsp/fastrpc_shell_unsigned_3

did not match the package hashes from radxa-firmware-qcs6490 0.2.29.

I downloaded the exact package without installing it:

apt download radxa-firmware-qcs6490=0.2.29

Then extracted it with dpkg-deb, backed up the live modified files, and restored the mismatched radxa-firmware-qcs6490 DSP payload files from the pristine package.

After that:

dpkg -V radxa-firmware-qcs6490

was clean, and:

sudo fastrpc_test -a v68

finally passed:

RESULT: All applicable tests PASSED

So the working fix was:

  • Add FastRPC memory-region overlay
  • Make the reserved heap a shared-dma-pool
  • Make sure the overlay is added to the active systemd-boot entry under /boot/efi, not just extlinux
  • Restore the exact pristine radxa-firmware-qcs6490 0.2.29 DSP payload files if dpkg -V shows mismatches

Important note: I did not run apt upgrade or apt autoremove. I only used apt download and extracted the .deb manually.

Can you help me? I'm having similar issues. I can run my model, but there's a major bottleneck with the VTCM; I'm only able to pass 2MB through it, even though the SRAM has 8MB.