Skip to content

Instantly share code, notes, and snippets.

@Foadsf
Created January 29, 2026 10:21
Show Gist options
  • Select an option

  • Save Foadsf/439cf7c88074c8134898ffc63a207243 to your computer and use it in GitHub Desktop.

Select an option

Save Foadsf/439cf7c88074c8134898ffc63a207243 to your computer and use it in GitHub Desktop.

Radxa Dragon Q6A NPU Troubleshooting Guide

Status: 🔴 UNRESOLVED - Community help needed
Last Updated: January 29, 2026
Hardware: Radxa Dragon Q6A (QCS6490, 8GB RAM)
Goal: Run AI inference (Llama 3.2 1B) on the Hexagon NPU (12 TOPS)


Table of Contents

  1. Objective
  2. Hardware Overview
  3. The Problem
  4. Troubleshooting Journey
  5. Root Cause Analysis
  6. What Works
  7. What Doesn't Work
  8. Open Issues
  9. Potential Solutions
  10. Resources
  11. How to Contribute

Objective

Run the official Radxa Llama 3.2 1B demo on the Dragon Q6A's NPU following the documentation:

Expected outcome: Generate text using the Hexagon NPU with 12 TOPS of AI compute power.

Actual outcome: [ERROR] "Failed to create device: 14001" - Device Creation Failure


Hardware Overview

Component Specification
Board Radxa Dragon Q6A
SoC Qualcomm QCS6490
CPU Octa-core Kryo 670 (1x Prime @ 2.7GHz, 3x Gold @ 2.4GHz, 4x Silver @ 1.9GHz)
GPU Adreno 643 (Vulkan 1.3, OpenCL 2.2, OpenGL ES 3.2)
NPU Hexagon DSP + Tensor Accelerator, 12 TOPS
RAM 8GB LPDDR5
Storage MicroSD card (119GB)

Purchase: AliExpress (~$140 for 8GB variant)


The Problem

Symptom

When running the Qualcomm Genie text-to-text inference tool:

./genie-t2t-run -c htp-model-config-llama32-1b-gqa.json -p '<prompt>'

Output:

Using libGenie.so version 1.13.0
[ERROR] "Failed to create device: 14001"
[ERROR] "Device Creation failure"
Failure to initialize model. 
Failed to create the dialog.

Root Cause (dmesg)

$ sudo dmesg | grep -i fastrpc
qcom,fastrpc a300000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC
qcom,fastrpc 3700000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC

Translation: The kernel's device tree is missing DMA memory reservations required for FastRPC communication between the CPU and the Hexagon DSP/NPU.


Troubleshooting Journey

Phase 1: Initial Setup with T4 Image

Image: radxa-dragon-q6a_noble_kde_t4.output_512.img.xz
Kernel: 6.18.2-1-qcom
Source: https://github.com/radxa-build/radxa-dragon-q6a/releases

What was tried:

  1. Downloaded and flashed T4 image to SD card
  2. Installed required packages:
    sudo apt update
    sudo apt install -y task-qualcomm embloader sdboot-is-embloader
  3. Downloaded Llama 3.2 1B model:
    pip3 install modelscope --break-system-packages
    modelscope download --model radxa/Llama3.2-1B-1024-qairt-v68 --local_dir ~/llama-test
  4. Ran inference: Got Error 14001

Observations:

  • FastRPC devices exist: /dev/fastrpc-cdsp, /dev/fastrpc-adsp, /dev/fastrpc-cdsp-secure
  • Services running: qrtr-ns, pd-mapper
  • Kernel reports DMA memory error

Phase 2: Gemini AI Troubleshooting (OS Bricked)

Engaged Google Gemini 3 Pro for troubleshooting assistance. Multiple approaches were attempted:

Attempt 1: Install missing userspace packages

sudo apt install -y fastrpc libcdsprpc1 libadsprpc1 libpdmapper1

Result: Packages not found in repositories.

Attempt 2: Install QRTR and PD-Mapper

sudo apt install -y qrtr-tools protection-domain-mapper

Result: Services installed and running, but Error 14001 persists.

Attempt 3: Copy libraries to system DSP folders

sudo cp ~/llama-test/*.so /usr/lib/rfsa/cdsp/default/
sudo cp ~/llama-test/*.so /usr/lib/rfsa/adsp/default/

Result: No change.

Attempt 4: Switch to Ubuntu 6.8 Kernel (⚠️ CAUSED OS FAILURE)

Gemini identified that the 6.18 kernel from noble-test repository might lack proper DMA reservations, and suggested switching to the stable Ubuntu 6.8 kernel.

# Install 6.8 kernel
sudo apt install -y linux-image-qcom linux-headers-qcom

# Move 6.18 boot entry to force 6.8
sudo mkdir -p /boot/efi/loader/entries/disabled
sudo mv /boot/efi/loader/entries/*6.18*.conf /boot/efi/loader/entries/disabled/
sudo reboot

Result:SYSTEM UNBOOTABLE

The 6.8 kernel installation had errors:

find: '/usr/lib/linux-image-6.8.0-1057-qcom/': No such file or directory
/usr/lib/kernel/install.d/99-update-overlay.install failed with exit status 1
dpkg: error processing package linux-image-6.8.0-1057-qcom

Moving the 6.18 boot entry left no working kernel to boot from.

Lesson Learned

⚠️ Never disable the only working boot entry without confirming the alternative kernel boots successfully first. Always test new kernels by selecting them manually from the bootloader before removing other options.


Phase 3: Fresh Install and T7 Image

After the OS failure, performed a fresh installation.

Flash Procedure (from Linux Mint laptop)

# Identify SD card device
lsblk  # Confirmed /dev/sdb is the SD card

# Unmount any mounted partitions
sudo umount /dev/sdb* 2>/dev/null

# Flash T4 image first
cd ~/Downloads
wget https://github.com/radxa-build/radxa-dragon-q6a/releases/download/rsdk-t4/radxa-dragon-q6a_noble_kde_t4.output_512.img.xz
xzcat radxa-dragon-q6a_noble_kde_t4.output_512.img.xz | sudo dd of=/dev/sdb bs=4M status=progress conv=fsync
sudo sync

Post-Install Setup

# SSH into the board (default: radxa/radxa)
ssh radxa@<board-ip>

# Critical: Install Qualcomm platform packages
sudo apt update
sudo apt install -y task-qualcomm embloader sdboot-is-embloader
sudo reboot

T4 Result

  • Kernel: 6.17.1-2-qcom
  • dmesg: Still shows no reserved DMA memory for FASTRPC
  • Error: 14001 persists

Discovery: T7 Image Exists

Found that T7 (January 2026) is available on GitHub releases:

  • radxa-dragon-q6a_noble_gnome_t7.output_512.img.xz

According to a Medium article by Anton Maltsev:

"For T3 and lower, I was not able to configure the NPU. From T5, it should work out of the box."

T7 Flash and Test

# Flash T7 image
xzcat radxa-dragon-q6a_noble_gnome_t7.output_512.img.xz | sudo dd of=/dev/sdb bs=4M status=progress conv=fsync
sudo sync

T7 Result

$ sudo dmesg | grep -i fastrpc
qcom,fastrpc a300000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC
qcom,fastrpc 3700000.remoteproc:glink-edge.fastrpcglink-apps-dsp.-1.-1: no reserved DMA memory for FASTRPC

T7 still has the same DMA memory issue. The NPU does not work.


Root Cause Analysis

Technical Details

The FastRPC (Fast Remote Procedure Call) driver requires reserved DMA memory regions defined in the kernel's device tree. This allows the CPU to communicate with the Hexagon DSP/NPU through shared memory.

Expected device tree entry:

reserved-memory {
    fastrpc_mem: fastrpc@<address> {
        compatible = "shared-dma-pool";
        reg = <0x0 0x<address> 0x0 0x<size>>;
        no-map;
    };
};

Current state: The reserved-memory node in the kernel's DTB lacks FastRPC-specific allocations.

Why This Happens

  1. Kernel source issue: The upstream kernel or Radxa's fork may not have complete device tree support for QCS6490's FastRPC requirements
  2. DTB override missing: The board-specific device tree overlay that should add these reservations is either missing or not being applied
  3. Software stack maturity: As noted in reviews, "the software stack is still maturing" for this platform

What Works

Component Status
Ubuntu 24.04 Noble boot
SSH access
Kernel modules load
FastRPC device nodes exist ✅ (/dev/fastrpc-cdsp, /dev/fastrpc-adsp)
QRTR name service ✅ (qrtr-ns active)
Protection Domain Mapper ✅ (pd-mapper active)
Model download ✅ (ModelScope works)
Genie libraries load ✅ (libGenie.so version 1.13.0)

What Doesn't Work

Component Status Error
NPU device initialization Error 14001
FastRPC DMA allocation "no reserved DMA memory"
Llama 3.2 inference Device Creation Failure

Open Issues

Issue 1: Missing DMA Memory Reservations

Severity: Critical (blocks all NPU functionality)

Evidence:

dmesg: qcom,fastrpc: no reserved DMA memory for FASTRPC

Affects: All tested images (T4, T7)

Potential fixes:

  1. Device tree patch from Radxa
  2. Kernel update with proper reserved-memory nodes
  3. Custom DTB overlay

Issue 2: Desktop Environment Issues (Minor)

Observation: T4 KDE image boots to TTY, GDM fails with "no session desktop files installed"

Workaround: Use SSH or TTY directly


Potential Solutions

Solution 1: Wait for Official Fix

Solution 2: Device Tree Overlay

Create a custom overlay to add reserved memory:

// fastrpc-memory.dts (UNTESTED - needs verification)
/dts-v1/;
/plugin/;

&{/reserved-memory} {
    fastrpc_cdsp_mem: fastrpc_cdsp@0x88000000 {
        compatible = "shared-dma-pool";
        reg = <0x0 0x88000000 0x0 0x2000000>; // 32MB at 0x88000000
        no-map;
    };
};

⚠️ Memory addresses need to be determined from Qualcomm documentation or working Android DTB

Solution 3: Try Armbian

Armbian has experimental support:

Solution 4: Contact Radxa Support

Post on the forum with full details:


Resources

Official Documentation

GitHub

Community

Qualcomm Resources

Third-Party Reviews

Kernel/Driver Documentation


How to Contribute

If you have a working Dragon Q6A with NPU functionality, please share:

  1. Your image version (cat /etc/radxa-release or image filename)
  2. Kernel version (uname -r)
  3. dmesg output (sudo dmesg | grep -i fastrpc)
  4. Working configuration steps

Reproducing This Issue

# 1. Flash any official image (T4-T7 tested)
# 2. Boot and SSH in
# 3. Check for DMA error
sudo dmesg | grep -i fastrpc

# 4. Install test tools
pip3 install modelscope --break-system-packages
mkdir -p ~/llama-test && cd ~/llama-test
modelscope download --model radxa/Llama3.2-1B-1024-qairt-v68 --local_dir .

# 5. Run test
chmod +x genie-t2t-run
export LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH"
./genie-t2t-run -c htp-model-config-llama32-1b-gqa.json -p '<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\nYou are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHello<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n'

Timeline

Date Event
2026-01-26 Initial T4 setup, encountered Error 14001
2026-01-26 Gemini troubleshooting session
2026-01-26 OS bricked after kernel switch attempt
2026-01-28 Fresh T4 install, same DMA error
2026-01-29 Discovered and tested T7, same DMA error
2026-01-29 Created this troubleshooting guide

License

This document is released under CC BY-SA 4.0. Feel free to share, adapt, and contribute.


If this guide helped you or you found a solution, please share it back with the community!

@chenchongbiao
Copy link

https://forum.radxa.com/t/remoteproc-remoteproc0-direct-firmware-load-for-qcom-qcs6490-radxa-dragon-q6a-adsp-mbn-failed-with-error-2/30288

After a kernel upgrade, the remoteproc kernel modules may get included in the initramfs due to MODULES=most in /etc/initramfs-tools/initramfs.conf. This causes the DSP subsystem to attempt firmware loading too early (during initramfs stage), before /lib/firmware is available — resulting in errors like:

remoteproc remoteproc0: request_firmware failed: -2

To fix this, exclude the remoteproc drivers from initramfs using a hook script:

sudo tee /usr/share/initramfs-tools/hooks/zz-exclude-remoteproc <<'EOF'
#!/bin/sh -e
# Exclude Qualcomm remoteproc drivers from initramfs
if [ "$1" = "prereqs" ]; then
    exit 0
fi

. /usr/share/initramfs-tools/hook-functions

REMOTEPROC_DIR="$DESTDIR/lib/modules/$version/kernel/drivers/remoteproc"
if [ -d "$REMOTEPROC_DIR" ]; then
    rm -rf "$REMOTEPROC_DIR"
fi
EOF

sudo chmod +x /etc/initramfs-tools/hooks/zz-exclude-remoteproc
sudo update-initramfs -u -k $(uname -r)

After reboot, verify with:

dmesg | grep -i dsp

You should see remote processor adsp/cdsp is now up without early -2 errors.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment