Skip to content

Firmware and Source Pins

Julius Bairaktaris edited this page Jun 18, 2026 · 2 revisions

Firmware and Source Pins

Which NSS firmware exists for IPQ807x, which host sources pair with it, and the reasoning behind every pin in the nss-packages feed. Researched 2026-06; re-verify the "newest" claims before bumping anything.

The NSS firmware landscape

NSS firmware is proprietary and distributed only inside Qualcomm SPF (QSDK) releases. Publicly available blobs:

Source Newest release Newest IPQ807x firmware
quic/qca-sdk-nss-fw (official) SPF 12.0 (2022) NSS.FW.12.1-022-HK.R
qosmio/qca-sdk-nss-fw (fork, adds SPF 12.1–12.5) SPF 12.5 ED1 (2024) NSS.FW.12.5-210-HK.R

NSS.FW.12.5-210 is the newest NSS firmware that exists publicly for IPQ807x, full stop. A GitHub-wide search finds no NSS.FW.13*, no 12.5 build newer than 210, and no firmware from the newer win.* release trains. The suffix decodes as: HK = Hawkeye (IPQ807x), CP = Cypress (IPQ60xx), MP = Maple (IPQ50xx); .R = retail build.

The host-source landscape (CodeLinaro)

Qualcomm's open-source host components live on git.codelinaro.org with one branch per release train:

  • NHSS.QSDK.12.5.x — pairs with SPF 12.5 (the published firmware). Frozen: nss-drv's last 12.5 commit is from April 2024.
  • NHSS.QSDK.13.0.x — SPF 13.0 train; no public firmware.
  • win.nss.1.0 / 1.1 / 1.10 — the current "WIN" train. Actively maintained (nss-drv head December 2025, ECM January 2026), still carries the IPQ807x HAL; its matching firmware has never been published. win.nss.1.10 is an April 2025 snapshot fully contained in win.nss.1.1.

Why this feed pairs win.nss.1.1 host sources with 12.5 firmware

The release-coherent choice ("12.5 host sources for 12.5 firmware") was tried first and rejected on evidence:

  • The 12.5 host branches predate kernel API changes that the maintained line absorbed upstream. Concretely: 12.5-era nss_core.c still uses SKBTX_DEV_ZEROCOPY (removed from modern kernels); win.nss.1.1 fixed that in the vendor tree. Every such gap on a frozen branch becomes a local patch this project would own forever.
  • The mixed pairing — win.nss.1.1 host driving 12.5-210 firmware — is what this stack was brought up, gated and production-soaked on, and the same pairing the wider community NSS builds (qosmio) ship. The host/firmware wire interface is exercised constantly at runtime; it is verified, not assumed.

Feed pins

Package Repo Pin Rationale
qca-nss-drv clo/qsdk/oss/lklm/nss-drv 6aa14c7 (2025-12-26) Tip of win.nss.1.1.
qca-nss-ecm clo/qsdk/oss/lklm/qca-nss-ecm fafe228 (2026-01-16) Tip of win.nss.1.1; most recent ECM in existence, NSS front end fully retained.
qca-nss-clients clo/qsdk/oss/lklm/nss-clients 51be82d (2024-09-11) Tip of NHSS.QSDK.12.5.5 — the legacy clients (qdisc, pppoe) were never carried into the win.* lines; this is the newest nss-clients commit anywhere.
nss-firmware qosmio/qca-sdk-nss-fw 12.5 Release 210 Newest published firmware (see above).

When bumping a pin: check the branch heads on CodeLinaro (git ls-remote --heads <repo> 'win.*'), re-verify the firmware situation, and expect to re-run the hardware gates — the wire interface is the contract.

Memory profiles

qca-nss-drv sizes its buffer pools by a build-time profile (Config.in choice in the feed):

  • NSS_MEM_PROFILE_HIGH — 1 GB boards. The ipq807x default.
  • NSS_MEM_PROFILE_MEDIUM — 512 MB boards (AX3600 and friends). MEDIUM pbuf pools are 9984 + 1736 buffers; SQM queue limits are capped accordingly (see SQM and Shaping).
  • NSS_MEM_PROFILE_LOW — 256 MB boards (untested here).

The profile is per-image, not per-device: pick it to match the board the image targets. A 512 MB board running the HIGH profile risks memory exhaustion under load.

Related observation from soak testing on MEDIUM: a small number of N2H payload-allocation failures and queue-0 drops appear under bursty load (hundreds out of tens of millions of packets) — burst-level pool pressure, with no measured effect on steady-state throughput.

Feature switches

The driver's NSS_DRV_*_ENABLE flags all default off (IPv4 is always on) and follow package selection: the PPPoE manager forces NSS_DRV_PPPOE_ENABLE, the qdisc forces NSS_DRV_SHAPER_ENABLE and NSS_DRV_IGS_ENABLE, ECM brings IPV6/VIRT_IF. Keeping unused firmware features off keeps firmware memory usage down — relevant on MEDIUM.

Clone this wiki locally