IwlWiFi: Intel so firmware issue

From: Clark Vitek
Date: Wed Jun 19 2024 - 22:11:11 EST


FTM initiator appears to be functional up v79,

example working ucode (lshw): firmware=79.27f1c37b.0 so-a0-gf-a0-79.uc

Firmware v81 and above give not supported response to iw dev measurement command.

example not working ucode (lshw): firmware=81.31fc9ae6.0 so-a0-gf-a0-81.uc

testing with kernel 6.5.0-41-generic currently, have also backported and tested in 6.2 kernel and determined it is firmware only dependency.

To replicate just change firmware between v79 to v81 and higher in /lib/firmware and remove/reload iwlwifi. Example sequence as follows:

**** Working Example v79 ****

$ cat conf80
50:E4:E0:E0:D8:30 bw=80 cf=5600 cf1=5610 lci ftms_per_burst=8

$ sudo iw dev wlp0s20f3 measurement ftm_request conf80
wdev 0x1 (phy #0): Peer measurements (cookie 4):
  Peer 50:e4:e0:e0:d8:30: status=0 (SUCCESS) @833087291004 tsf=0
    FTM
      BURST_INDEX: 0
      NUM_BURSTS_EXP: 0
      BURST_DURATION: 0
      FTMS_PER_BURST: 0
      RSSI_AVG: 4294967249
      RSSI_SPREAD: 0
      RTT_AVG: 88982
      RTT_VARIANCE: 1763414
      RTT_SPREAD: 3523
      LCI: 04 00 08 00 10 00 00 00 00 00 00 00 00 00 00 00
      LCI: 00 00 00 00 40 04 06 00 00 00 00 00 00 06 01 01

wdev 0x1 (phy #0): peer measurement complete

****END Working Example v79****

****Not Working Example v89****

$ sudo iw dev wlp0s20f3 measurement ftm_request conf80
command failed: Operation not supported (-95)

**** END Not Working Example v89 ****

Full Details of the Device (lspci), identical output for both above examples in both lspci, lsmod, and lshw. Only difference is latest firmware placed in /lib/firmware and remove/load of iwlwifi

$ sudo lspci -vvvvv
0000:00:14.3 Network controller: Intel Corporation Alder Lake-P PCH CNVi WiFi (rev 01)
    Subsystem: Rivet Networks Dual Band Wi-Fi 6E(802.11ax) AX1675i 160MHz 2x2 [Garfield Peak]
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 16
    IOMMU group: 11
    Region 0: Memory at 603c2b4000 (64-bit, non-prefetchable) [size=16K]
    Capabilities: [c8] Power Management version 3
        Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
        Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
    Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Address: 0000000000000000  Data: 0000
    Capabilities: [40] Express (v2) Root Complex Integrated Endpoint, MSI 00
        DevCap:    MaxPayload 128 bytes, PhantFunc 0
            ExtTag- RBE- FLReset+
        DevCtl:    CorrErr- NonFatalErr- FatalErr- UnsupReq-
            RlxdOrd+ ExtTag- PhantFunc- AuxPwr+ NoSnoop+ FLReset-
            MaxPayload 128 bytes, MaxReadReq 128 bytes
        DevSta:    CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr+ TransPend-
        DevCap2: Completion Timeout: Range B, TimeoutDis+ NROPrPrP- LTR+
             10BitTagComp- 10BitTagReq- OBFF Via WAKE#, ExtFmt- EETLPPrefix-
             EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
             FRS-
             AtomicOpsCap: 32bit- 64bit- 128bitCAS-
        DevCtl2: Completion Timeout: 16ms to 55ms, TimeoutDis- LTR+ OBFF Disabled,
             AtomicOpsCtl: ReqEn-
    Capabilities: [80] MSI-X: Enable+ Count=16 Masked-
        Vector table: BAR=0 offset=00002000
        PBA: BAR=0 offset=00003000
    Capabilities: [100 v1] Latency Tolerance Reporting
        Max snoop latency: 0ns
        Max no snoop latency: 0ns
    Capabilities: [164 v1] Vendor Specific Information: ID=0010 Rev=0 Len=014 <?>
    Kernel driver in use: iwlwifi
    Kernel modules: iwlwifi

thank you for any direction, suggestions, or assistance. I am an end user/test enthusiast of linux wireless on different devices. FTM to infrastructure responders (Access Points) with Android devices works very well in my test setup including range and LCI. I would love to get this functionality in mainline linux kernel working reliably.

thanks,

Clark