Skip to main content

Firmware Versioning

This document summarizes the versioning scheme for Terragraph's wireless firmware.

QTI Firmware

The section below is specific to QTI (Qualcomm Technologies Inc.) wireless firmware.

Version Numbers

QTI firmware releases are tied to a specific Terragraph software release. See the table below for information about some past firmware releases.

FW VersionMarketing NameTG VersionTG Branch
10.11.x.99DPDK Consumer Sample R2 (DPDK-OEMR2-CSU4)M44.21-
10.11.x.92DPDK Consumer Sample R2 (DPDK-OEMR2-CSU3)M44.20-
10.11.x.87DPDK Consumer Sample R2 (DPDK-OEMR2-CSU2)M44.19-
10.11.x.83DPDK Consumer Sample R2 (DPDK-OEMR2-CSU)M44.18-
10.11.x.77DPDK Consumer Sample R2 (DPDK-OEMR2-CS)M44.17-
10.11.x.70DPDK Consumer Sample Update 2 (DPDK-CSU2)M44.17-
10.11.x.66DPDK Consumer Sample Update (DPDK-CSU)M44.16-
10.11.x.59DPDK Consumer Sample (DPDK-CS)M44.16-
10.11.x.55DPDK Engineering Sample (DPDK-ES)M44.15-
10.11.x.28Consumer Sample Update (CSU)M44.12integration/m44/cs
10.11.x.9Commercial Sample (CS)M44.11integration/m44/cs
10.9.x.yFeature Complete (FC)M44.11integration/m44/fc
10.7.x.yEngineering Sample (ES)M44.8integration/m44/es

The firmware version string can be extracted as follows:

$ /usr/sbin/get_fw_version
10.11.0.92

$ strings /lib/firmware/wil6436.fw | grep version
FW version: 10.11.0.92

Within each QTI release, there is a separate firmware version with format major.minor.sub_minor.build (as defined in meta-qca/recipes-radio/wigig-utils-private/files/fw_ver.ini). The build number is incremented on each change to the major.minor release. sub_minor can take the following values:

0 - Operational (RF), 1 - WMI_ONLY, 2 - NO_PCIE, 3 - WMI_ONLY_NO_PCIE, 4 - IF2IF

For example, the DPDK-OEMR2-CSU3 release contains RF firmware (TALYN_M_B0/wil6210.fw) with version 10.11.0.92, and IF2IF firmware (TALYN_M_B0_IF2IF/wil6210.fw) with version 10.11.4.92.

Release Packages

Releases from QTI contain several packages:

  • OEMs receive device, 3pp, and tg-src.
  • Meta additionally receives fb-src.

The contents include, among other things:

  • A firmware binary (wil6210.fw) for each sub_minor type.
  • A set of corresponding board files (*.brd) for each firmware binary. The default for QRP (QTI Reference Platform) is named wil6436.brd, which is a copy of another board file in the same directory.
  • Firmware strings (fw_image_trace_string_load.bin) required for decoding firmware logs using any of the provided tools (e.g. host_manager_11ad, wil_fw_trace). The strings are only available under special license from QTI.

Terragraph Layout

On the Terragraph software image, the files mentioned above are installed to /lib/firmware, with additional links created as follows (using the Puma platform as an example):

[read-only]
/lib/firmware/
wil6436.fw -> TALYN_M_B0/wil6210.fw # default RF firmware
wil6436.brd -> TALYN_M_B0/<production_*>.brd # "golden" board file
TALYN_M_B0/
wil6436_puma.brd -> ./<production_*>.brd # Puma default RF board file
TALYN_M_B0_IF2IF/
wil6436_puma.brd -> ./<production_*>.brd # Puma default IF2IF board file

[read-write]
/data/firmware/wil6210/ # firmware_class.path
fw_image_trace_string_load.bin -> /lib/firmware/<TALYN_M_B0*>/fw_image_trace_string_load.bin
ucode_image_trace_string_load.bin -> /lib/firmware/<TALYN_M_B0*>/ucode_image_trace_string_load.bin
wil6436.fw -> /lib/firmware/<TALYN_M_B0*>/wil6210.fw
wil6436.brd -> /lib/firmware/<TALYN_M_B0*>/wil6436_puma.brd

The driver searches for firmware and board files in /data/firmware/wil6210 first (as specified by firmware_class.path), then in /lib/firmware. The read-write path enables run-time switching of firmware and board files, e.g. to swap between RF and IF2IF operation. Much of this logic is handled in /usr/bin/fw_brd_update.sh.

When searching for board files, the driver first looks for the file <root>/<pci_id>/wil6436.brd, then <root>/wil6436.brd. The former enables the use of "native" board files calibrated for each per baseband card (in RF mode only), whereas the latter represents the "golden" board file used as a fallback.

When envParams.FW_USE_NATIVE_BOARDFILE is set to "1" in the node configuration, then "native" board files are loaded from EEPROM via /usr/bin/bb_fetch_brdfile.sh and are installed by fw_brd_update.sh as follows:

[read-write]
/data/firmware/
wil6210/
<pci_id0>/
wil6436.brd # board file for PCI slot pci_id0
<pci_id1>/
wil6436.brd # board file for PCI slot pci_id1
...
native -> ./wil6210 # link for compability with bb_fetch_brdfile.sh