-
Notifications
You must be signed in to change notification settings - Fork 2
Home
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.
| 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 |
- 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.
- 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.
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).