Skip to content
Julius Bairaktaris edited this page Jun 18, 2026 · 5 revisions

NSS offload on the upstream OpenWrt EDMA stack

This wiki documents openwrt-nss-edma: Qualcomm NSS hardware offloading (the dual UBI32 cores in IPQ807x SoCs) running on top of OpenWrt main's upstream qca_edma/qca_ppe DSA ethernet drivers (openwrt/openwrt#22381) — not on the vendor qca-nss-dp/qca-ssdk driver pairing that every other NSS build uses.

This is, to our knowledge, the first NSS stack that keeps the upstream ethernet drivers. The integration was brought up from scratch on a Xiaomi AX3600 (IPQ8071A, 512 MB RAM) without serial console access — every conclusion documented here was established by live measurement on hardware, and the pages say so explicitly where it matters.

Repositories

Repo Branch Contents
openwrt-nss-edma nss-edma-rework OpenWrt tree: PR #22381 + the integration series (kernel patches, kmod-qca-ppe-nss glue, device tree)
nss-packages edma-nss Package feed: qca-nss-drv, qca-nss-ecm, qca-nss-clients (qdisc/igs/pppoe), nss-firmware, sqm-scripts-nss
Qualcommax_NSS_Builder main GitHub-Actions image builder; the edma-nss variant wires the feeds above together

Validated results (AX3600, NSS.FW.12.5-210-HK.R, kernel 6.12)

  • ECM NAT/PPPoE offload: 311 Mbit/s IPv6 through PPPoE at 99.7 % CPU idle, versus the same throughput at ~42 % of one core in softirq on the host path — a ~40x CPU reduction. IPv4 NAT: 315 Mbit/s accelerated.
  • NSS SQM shaping: 258.6 Mbit/s goodput through a 285 Mbit ingress shaper with RTT under full load of 16 ms avg / 31 ms max (idle: 20/49) — zero bufferbloat — at ~99 % CPU idle.
  • ath11k NSS Wi-Fi offload (wifili): both radios (2.4 + 5 GHz) on the NSS data path — >1M packets through the firmware Wi-Fi TX ring in the first validation soak, real stations associated, ECM accelerating Wi-Fi client flows, memory flat after the one-time 512MB-profile buffer pool growth.
  • Multi-hour, multi-client production soaks with all four switch ports on the firmware data plane: no leaks, no stalls, clean pstore.

Page index

  • Architecture — how the firmware data plane coexists with the upstream EDMA driver: the shared EDMA block, queue takeover, the glue module, and the VSI model. Read this first.
  • Firmware and Source Pins — which NSS firmware exists, which host sources pair with it, and why this project pins what it pins.
  • Runtime Operation — the bring-up sequence, ECM, recovery paths, and the operational rules that keep a remote device reachable.
  • SQM and Shaping — the NSS qdiscs, nss-edma.qos, and the firmware shaping behaviors that were verified at the firmware level.
  • Hardware Support — device coverage, port/interface numbering, and memory profiles.
  • Development and Testing — build notes, the sysupgrade-only test methodology, pstore forensics, and known build landmines.
  • Limitations and Roadmap — what is deliberately not supported, what is deferred, and findings relevant to upstream.

Status

The wired data plane is complete and validated: firmware path for all physical ports, ECM connection offload (NAT, PPPoE, VLAN), and NSS SQM. ath11k NSS Wi-Fi offload is integrated and validated on hardware: the image boots with host-mode Wi-Fi (nss_offload=0), and the bring-up script moves the radios onto the NSS data path at runtime. The qca-nss-drv platform probe is gated on data-plane arming, so the Wi-Fi module dependency on the NSS driver can never boot the firmware unarmed at boot (see Architecture and Runtime Operation).

Clone this wiki locally