wiki:FSA

Version 1 (modified by Tim Harvey, 3 weeks ago) ( diff )

initial page

Flexible Socket Architecture (FSA)

Flexible Socket Architecture is a custom connector form-factor present on the Gateworks 'Venice-Flex' product line currently consisting of the following boards:

  • GW82xx

The goal of the FSA socket is to bridge the gap between the various socket formats:

  • MiniPCIe
  • M.2 E-Key
  • M.2 B-Key
  • M.2 M-Key

GW82xx Baseboard

The GW82xx has two FSA sockets:

  • FSA1 (J29): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), SPI, Power Enable
  • FSA2 (J30): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), PCM, UART (4-wire), SPI, SDIO (1.8V), GPIO (3x), Power Enable

GW16FE0 FSA M.2 E-Key Adapter

The GW16FE0 E-Key Adapter provides an M.2 E-Key socket with the following:

  • I2C (1.8V CLK/SDA/ALERT#)
  • USB2.0
  • PCIE3.0 (with PERST# 3.3V)
  • PCM (1.8V)
  • UART (1.8V 4-wire)
  • SPI (1.8V 1 chip-select)
  • GPIO1 (W_DISALBE1# 3.3V)
  • GPIO2 (W_DISABLE2# 3.3V)
  • GPIO4 (ALERT# 1.8V)
  • LED1# (OD Yellow)
  • LED2# (OD Yellow)
  • Power Enable (baseboard GPIO)

Pinout (from baseboard perspective):

pin signal signal pin
1 GND 3.3V 2
3 USB_DP 3.3V 4
5 USB_DN LED1#(OD) 6
7 GND PCM_CLK(I/O)(1.8V) 8
9 SDIO_CLK(O)(1.8V) PCM_SYNC(I/O)(1.8V) 10
11 SDIO_CMD(O)(1.8V) PCM_IN(I)(1.8V) 12
13 SDIO_D0(O)(1.8V) PCM_OUT(O)(1.8V) 14
15 SDIO_D1(O)(1.8V) LED2#(OD) 16
17 SDIO_D2(O)(1.8V) GND 18
19 SDIO_D3(O)(1.8V) NC 20
21 NC UART_RXD(I)(1.8V) 22
23 SDIO_RST#(O)(1.8V) KEY 24
25 KEY KEY 26
27 KEY KEY 28
29 KEY KEY 30
31 KEY UART_TXD(O)(1.8V) 32
33 GND UART_CTS(I)(1.8V) 34
35 PCIE_TXP UART_RTS(O)(1.8V) 36
37 PCIE_TXN SPI_MOSI(O)(1.8V)2 38
39 GND SPI_MISO(I)(1.8V)2 40
41 PCIE_RXP SPI_CLK(O)(1.8V)2 42
43 PCIE_RXN COEX11 44
45 GND COEX21 46
47 PCIE_CKP COEX31 48
49 PCIE_CKN NC 50
51 GND PERST#(O)(3.3V) 52
53 NC W_DISABLE2(O)(3.3V) 54
55 NC W_DISABLE1(O)(3.3V) 56
57 GND I2C_SDA(I/O)(1.8V) 58
59 NC I2C_CLK(O)(1.8V) 60
61 NC ALERT#(I)(1.8V) 62
63 GND SPI_SS0(O)(1.8V)2 64
65 NC NC 66
67 NC NC 68
69 GND NC 70
71 NC 3.3V 72
73 NC 3.3V 74
75 GND
  1. The COEX[1..3] signals are ganged to each FSA socket on the baseboard
  2. There are no SPI pins defined in the M.2 specification; MOSI/MSIO/CLK above are defined as 'VENDOR SPECIFIED', SPI_SS0 (pin 64) is defined as RESERVED in v1-v3 of the M.2 specification and as VIO 1.8V in the v4 specification, and ALERT# is defined as an I2C interrupt which can also be used as a SPI interrupt.

Card: Intel 9260 M.2 E-Key WiFi5 (802.11ac) / BT5.1

The Intel 9260 M.2 E-Key combo card uses PCI for WiFi and USB2.0 for Bluetooth

Pin Details:

  • W_DISABLE1# WLAN_EN (drive high to enable WiFi RF; low to disable)
  • W_DISABLE2# BT_EN (drive high to enable USB/BT)

WiFi details:

  • WiFi5 802.11ac
  • PCIe 0x8086:0x2526
  • supported by iwlwifi; drivers/net/wireless/intel/iwlwifi CONFIG_IWLWIFI
  • registers 6 MSI interrupts
  • Example usage:
    • driver
      [    8.222036] iwlwifi 0000:07:00.0: enabling device (0000 -> 0002)
      [    8.287908] iwlwifi 0000:07:00.0: Detected crf-id 0x2816, cnv-id 0x1000200 wfpm id 0x80000000
      [    8.287937] iwlwifi 0000:07:00.0: PCI dev 2526/0014, rev=0x321, rfid=0x105110
      [    8.288081] iwlwifi 0000:07:00.0: _request_firmware iwlwifi-9260-th-b0-jf-b0-46.ucode
      [    8.308533] iwlwifi 0000:07:00.0: Loaded FW: iwlwifi-9260-th-b0-jf-b0-46.ucode, sha256: 05f4c12514fddfd56fea660b3d2eb6b6e6f
      4a87a324d5d40464050312ddca911
      [    8.308682] iwlwifi 0000:07:00.0: WRT: Overriding region id 0
      [    8.308693] iwlwifi 0000:07:00.0: WRT: Overriding region id 1
      [    8.308701] iwlwifi 0000:07:00.0: WRT: Overriding region id 2
      [    8.308706] iwlwifi 0000:07:00.0: WRT: Overriding region id 3
      [    8.308711] iwlwifi 0000:07:00.0: WRT: Overriding region id 4
      [    8.308717] iwlwifi 0000:07:00.0: WRT: Overriding region id 6
      [    8.308722] iwlwifi 0000:07:00.0: WRT: Overriding region id 8
      [    8.308728] iwlwifi 0000:07:00.0: WRT: Overriding region id 9
      [    8.308733] iwlwifi 0000:07:00.0: WRT: Overriding region id 10
      [    8.308738] iwlwifi 0000:07:00.0: WRT: Overriding region id 11
      [    8.308744] iwlwifi 0000:07:00.0: WRT: Overriding region id 15
      [    8.308750] iwlwifi 0000:07:00.0: WRT: Overriding region id 16
      [    8.308755] iwlwifi 0000:07:00.0: WRT: Overriding region id 18
      [    8.308761] iwlwifi 0000:07:00.0: WRT: Overriding region id 19
      [    8.308766] iwlwifi 0000:07:00.0: WRT: Overriding region id 20
      [    8.308772] iwlwifi 0000:07:00.0: WRT: Overriding region id 21
      [    8.308778] iwlwifi 0000:07:00.0: WRT: Overriding region id 28
      [    8.309979] iwlwifi 0000:07:00.0: _request_firmware iwl-debug-yoyo.bin
      [    8.310663] iwlwifi 0000:07:00.0: loaded firmware version 46.7e3e4b69.0 9260-th-b0-jf-b0-46.ucode op_mode iwlmvm
      [    8.732849] iwlwifi 0000:07:00.0: Detected Intel(R) Wireless-AC 9260 160MHz, REV=0x321
      [    8.890083] iwlwifi 0000:07:00.0: reporting RF_KILL (radio disabled)
      [    8.945928] iwlwifi 0000:07:00.0: base HW address: d8:3b:bf:ba:5e:a5, OTP minor version: 0x4
      root@noble-venice:~# ls -l /sys/class/net/wlan0
      lrwxrwxrwx 1 root root 0 Oct 28 19:49 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
      .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0
      

Bluetooth details:

  • Bluetooth 5.1
  • USB2.0: 0x8087:0x0025 (needs W_DISABLE2# BT_EN asserted high)
  • supported by btusb; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB

Card: LAIRD 453-00048 LWB5+ M.2 E-Key (SDIO/UART) WiFi5 (802.11ac) / BT5.2

The LAIRD 453-00048 LWB5+ M.2 E-Key combo radio uses SDIO for WiFi and UART for Bluetooth and is based on the LAIRD 453-00047 module. The module on this board is resistor strapped to select the 1.8V SDIO for WiFi and USB for Bluetooth.

See:

Pin Considerations:

  • W_DISABLE1# WLAN_EN (needs to be asserted high for WiFi)
  • W_DISABLE2# BT_EN (needs to be asserted high for Bluetooth)

A device-tree overlay is required to bind the proper wifi and bluetooth drivers:

&usdhc1 {
        wifi@0 {
                compatible = "cypress,cyw4373-fmac", "brcm,bcm4329-fmac";
                reg = <0>;
        };
};

&uart3 {
        bluetooth {
                compatible = "brcm,bcm4330-bt";
        };
};

WiFi Details:

  • WiFi5 802.11ac
  • SDIO 0x02d0:0x4373 SDR104
    # cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device}
    0x02d0
    0x4373
    # dmesg | grep mmc0
    [    1.012822] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
    [    1.041288] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1)
    [    1.048092] mmc_sdio_init_card mmc0 setting voltage to 1.8V
    [    1.208613] mmc0: new ultra high speed SDR104 SDIO card at address 0001
    # cat /sys/kernel/debug/mmc0/ios
    clock: 25000000 Hz
    actual clock: 25000000 Hz
    vdd: 21 (3.3 ~ 3.4 V)
    bus mode: 2 (push-pull)
    chip select: 0 (don't care)
    power mode: 2 (on)
    bus width: 2 (4 bits)
    timing spec: 6 (sd uhs SDR104)
    signal voltage: 1 (1.80 V)
    driver type: 0 (driver type B)
    
  • firmware: https://www.ezurio.com/support/faqs/what-are-all-these-firmware-files-sterling-lwb5
    • have to symlink the generic brcmfmac4373-sdio.bin firmware to your board specific firmware? (brcmfmac4373-sdio.gateworks,imx8mp-gw82xx-2x.bin)
  • supported by brcmfmac driver; ./drivers/net/wireless/broadcom/brcm80211/brcmfmac CONFIG_BRCMFMAC

Bluetooth Details:

  • Bluetooth 5.2
  • supported by hci_bcm driver; drivers/bluetooth/hci_bcm.c CONFIG_BT_BCM

Card: Silex SDMAX M.2 E-Key SDIO/UART WiFi6 / BT5.3

The Silex SDMAX Wifi6+BT5.3 802.11ax M.2 E-Key combo radio is based on the NXP IW611 chip using SDIO for wifi and UART for bluetooth:

Pin Details:

  • W_DISABLE1# PDn (drive low to power down)
  • W_DISABLE2# BT_RESET (drive low to reset BT)

!Wifi details:

  • Wifi6 802.11ax
  • SDIO 0x0471:0x0204 SDR104
    # dmesg | grep mmc0
    [    1.007858] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
    [    1.119413] mmc0: new ultra high speed SDR104 SDIO card at address 0001
    # cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device}
    0x0471
    0x0204
    # cat /sys/kernel/debug/mmc0/ios
    clock: 25000000 Hz
    actual clock: 25000000 Hz
    vdd: 21 (3.3 ~ 3.4 V)
    bus mode: 2 (push-pull)
    chip select: 0 (don't care)
    power mode: 2 (on)
    bus width: 2 (4 bits)
    timing spec: 6 (sd uhs SDR104)
    signal voltage: 1 (1.80 V)
    driver type: 0 (driver type B)
    
  • supported by the mwifiex driver
    • as of Linux 6.6 at least you need the out-of-tree mwifiex driver; the out-of-tree mwifiex driver has support for 5.4, 5.10, 5.15, 6.1, 6.6 (based on NXP bsp branch naming)
      # get firmware (out-of-tree mwifiex requires a conf file)
      git clone https://github.com/nxp-imx/imx-firmware.git
      cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/
      # build driver
      git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
      make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
      # load driver
      insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
      insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
      [   86.896141] wlan: Loading MWLAN driver
      [   86.900322] wlan: Register to Bus Driver...
      [   86.904773] vendor=0x0471 device=0x0205 class=0 function=1
      [   86.910432] Attach moal handle ops, card interface type: 0x109
      [   86.916324] rps set to 0 from module param
      [   86.920471] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf
      [   86.931066] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: 8ab3a368b9a8b8003de96c94b27847d9cfc6a428248af35b2a9d4e3f53460993
      [   86.943911] SDIW612: init module param from usr cfg
      [   86.948864] card_type: SDIW612, config block: 0
      [   86.953430] cfg80211_wext=0xf
      [   86.956408] max_vir_bss=1
      [   86.959099] cal_data_cfg=none
      [   86.962116] ps_mode = 1
      [   86.964589] auto_ds = 1
      [   86.967051] host_mlme=enable
      [   86.969946] fw_name=nxp/sduart_nw61x_v1.bin.se
      [   86.974434] SDIO: max_segs=128 max_seg_size=65535
      [   86.979160] rx_work=1 cpu_num=4
      [   86.982319] Enable moal_recv_amsdu_packet
      [   86.986376] Attach mlan adapter operations.card_type is 0x109.
      [   86.992806] wlan: Enable TX SG mode
      [   86.996337] wlan: Enable RX SG mode
      [   87.003840] Request firmware: nxp/sduart_nw61x_v1.bin.se
      [   87.009193] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se
      [   87.027218] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b2289e85c24fd
      [   87.326643] Wlan: FW download over, firmwarelen=1004248 downloaded 916048
      [   87.731821] WLAN FW is active
      [   87.734802] on_time is 87519080591
      [   87.757772] VDLL image: len=88200
      [   87.761457] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff
      [   87.767086] uuid: af55156e818b5e64a916b21032b7c73b
      [   87.771916] max_p2p_conn = 8, max_sta_conn = 16
      [   87.797069] Register NXP 802.11 Adapter mlan0
      [   87.801642] wlan: uap%d set max_mtu 2000
      [   87.807759] Register NXP 802.11 Adapter uap0
      [   87.823977] Register NXP 802.11 Adapter wfd0
      [   87.829691] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92) 
      [   87.844678] wlan: Register to Bus Driver Done
      [   87.849116] wlan: Driver loaded successfully
      root@noble-venice:~# ls /sys/class/net/
      can0  can1  eth0  eth1  lo  mlan0  uap0  wfd0
      

Bluetooth details:

  • Bluetooth 5.3 BR/EDR/LE
  • the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/uartspi_n61x_v1.bin.se) for bluetooth operation
  • supported by hciuart driver; drivers/bluetooth/hci_* CONFIG_BT_HCIUART* (must start at 115200bd then can switch to 3000000bd using hci vendor command)
    # start out at 115200 bd
    root@noble-venice:~# hciattach /dev/ttymxc2 any 115200 flow
    [  319.957921] Bluetooth: Core ver 2.22
    [  319.961601] NET: Registered PF_BLUETOOTH protocol family
    [  319.966938] Bluetooth: HCI device and connection manager initialized
    [  319.973321] Bluetooth: HCI socket layer initialized
    [  319.978216] Bluetooth: L2CAP socket layer initialized
    [  319.983296] Bluetooth: SCO socket layer initialized
    [  320.034524] Bluetooth: HCI UART driver ver 2.3
    [  320.039019] Bluetooth: HCI UART protocol H4 registered
    [  320.044176] Bluetooth: HCI UART protocol BCSP registered
    [  320.049592] Bluetooth: HCI UART protocol LL registered
    [  320.054756] Bluetooth: HCI UART protocol ATH3K registered
    [  320.060276] Bluetooth: HCI UART protocol Three-wire (H5) registered
    [  320.066807] Bluetooth: HCI UART protocol Intel registered
    [  320.072441] Bluetooth: HCI UART protocol Broadcom registered
    [  320.078188] Bluetooth: HCI UART protocol QCA registered
    [  320.083442] Bluetooth: HCI UART protocol AG6XX registered
    [  320.088905] Bluetooth: HCI UART protocol Marvell registered
    Device setup complete
    [  320.310779] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [  320.316127] Bluetooth: BNEP filters: protocol multicast
    [  320.321436] Bluetooth: BNEP socket layer initialized
    [  320.332546] Bluetooth: MGMT ver 1.22
    root@noble-venice:~# hciconfig
    hci0:   Type: Primary  Bus: UART
            BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
            UP RUNNING 
            RX bytes:860 acl:0 sco:0 events:60 errors:0
            TX bytes:2780 acl:0 sco:0 commands:60 errors:0
    
    root@noble-venice:~# hciconfig hci0 up
    root@noble-venice:~# hciconfig hci0
    hci0:   Type: Primary  Bus: UART
            BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
            UP RUNNING 
            RX bytes:860 acl:0 sco:0 events:60 errors:0
            TX bytes:2780 acl:0 sco:0 commands:60 errors:0
    
    root@noble-venice:~# hcitool -i hci0 scan
    Scanning ...
    Scanning ...
            0C:C4:13:19:C4:64       Pixel 6
    
    # now lets switch to 3mbd
    root@noble-venice:~# hcitool -i hci0 cmd 0x3f 0x0009 0xc0 0xc6 0x2d 0x00
    < HCI Command: ogf 0x3f, ocf 0x0009, plen 4
      C0 C6 2D 00 
    > HCI Event: 0x0e plen 4
      01 09 FC 00 
    root@noble-venice:~# killall hciattach
    [  392.862476] Bluetooth: hci0: sending frame failed (-49)
    [  392.867770] Bluetooth: hci0: Opcode 0x0c03 failed: -49
    
    root@noble-venice:~# hciattach /dev/ttymxc2 any -s 3000000 3000000 flow
    Device setup complete
    [  399.083288] Bluetooth: MGMT ver 1.22
    hciconfig hci0 up
    root@noble-venice:~# hciconfig hci0
    hci0:   Type: Primary  Bus: UART
            BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
            UP RUNNING 
            RX bytes:825 acl:0 sco:0 events:55 errors:0
            TX bytes:1795 acl:0 sco:0 commands:55 errors:0
    
    root@noble-venice:~# hcitool -i hci0 scan
    Scanning ...
            0C:C4:13:19:C4:64       Pixel 6
    
  • also supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART (make sure to not load the driver until mwifiex has loaded the firmware)
    # modprobe btnxpuart
    [  137.086491] Bluetooth: Core ver 2.22
    [  137.090174] NET: Registered PF_BLUETOOTH protocol family
    [  137.095519] Bluetooth: HCI device and connection manager initialized
    [  137.101909] Bluetooth: HCI socket layer initialized
    [  137.106805] Bluetooth: L2CAP socket layer initialized
    [  137.111891] Bluetooth: SCO socket layer initialized
    [  137.337842] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [  137.343186] Bluetooth: BNEP filters: protocol multicast
    [  137.348445] Bluetooth: BNEP socket layer initialized
    [  137.348448] Bluetooth: MGMT ver 1.22^^^ works
    # hciconfig hci0 up && hcitool -i hci0 scan
    
    • note the btnxpuart driver will load the nxp/uartspi_n61x_v1.bin.se, firmware via hci if mwifiex has not been loaded and wifi is not being used
    • btnxpuart initial baudrate must be 115200bd until firmware is loaded at which point it will automatically switch to 3000000bd
    • btnxpuart requires a device-tree node (see below)

device-tree for GW8201-A+GW7020+GW16FE0-A revision:

/* FSA1 */
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        /* reparent clock for up to 4mbd support */
        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
        status = "okay";

        /* if using btnxpuart this is needed; if hci_uart do not define this */
        bluetooth {
                compatible = "nxp,88w8987-bt";
                fw-init-baudrate = <115200>; /* Note this is the default if the prop is omitted */
        };
};

&iomuxc {
        pinctrl_uart3: uart3grp {
                fsl,pins = <
                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
                >;
        };
};

Card: ublox MAYA-W2 M.2 E-Key SDIO/UART/PCM/SPI tri-radio WiFi6 / BT5.4 / 802.15.4 combo

The ublox MAYA M.2 E-Key tri-radio combo card is based on the NXP IW612 chip using SDIO for WiFi, UART/PCM for Bluetooth, and SPI for 802.15.4 Thread.

See also:

  • MAYA-W2_SIM_UBX-22011459.pdf

Pin details:

  • W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
  • W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
  • LED1/LED2 unused

WiFi details:

  • WiFi6 802.11ax dual-band
  • SDIO 0x471:0x0204
    # dmesg | grep mmc0
    [    1.007660] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
    [    1.034751] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1)
    [    1.044515] mmc_sdio_init_card mmc0 setting voltage to 1.8V
    [    1.193261] mmc0: new ultra high speed SDR104 SDIO card at address 0001
    # cat /sys/bus/mmc/devices/mmc0:0001/{vendor,device}
    0x0471
    0x0204
    # cat /sys/kernel/debug/mmc0/ios
    clock:          208000000 Hz
    vdd:            21 (3.3 ~ 3.4 V)[   55.900039] mlan: module verification failed: signature and/or required key missing - tai
    nting kernel
    
    bus mode:       2 (push-pull)
    chip select:    0 (don't care)
    power mode:     2 (on)
    bus width:      2 (4 bits)
    timing spec:    6 (sd uhs SDR104)
    signal voltage: 1 (1.80 V)
    driver type:    0 (driver type B)
    
  • supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
    # get firmware (out-of-tree mwifiex requires a conf file)
    git clone https://github.com/nxp-imx/imx-firmware.git
    cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/
    # build driver
    git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
    make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
    # load driver
    insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
    insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
    [  146.092851] wlan: Loading MWLAN driver
    [  146.096939] wlan: Register to Bus Driver...
    [  146.101327] vendor=0x0471 device=0x0205 class=0 function=1
    [  146.107030] Attach moal handle ops, card interface type: 0x109
    [  146.112890] rps set to 0 from module param
    [  146.117032] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf
    [  146.124214] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: f846d679de6e3c32db51cb28df05fac588018d34073e19a255ab45901c9
    4f6e7
    [  146.137040] SDIW612: init module param from usr cfg
    [  146.141937] card_type: SDIW612, config block: 0
    [  146.146486] cfg80211_wext=0xf
    [  146.149462] max_vir_bss=1
    [  146.152100] cal_data_cfg=none
    [  146.155097] ps_mode = 1
    [  146.157552] auto_ds = 1
    [  146.160025] host_mlme=enable
    [  146.162928] fw_name=nxp/sduart_nw61x_v1.bin.se
    [  146.167415] SDIO: max_segs=128 max_seg_size=65535
    [  146.172144] rx_work=1 cpu_num=4
    [  146.175307] Enable moal_recv_amsdu_packet
    [  146.179358] Attach mlan adapter operations.card_type is 0x109.
    [  146.185634] wlan: Enable TX SG mode
    [  146.189150] wlan: Enable RX SG mode
    [  146.194044] Request firmware: nxp/sduart_nw61x_v1.bin.se
    [  146.199379] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se
    [  146.218147] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b228
    9e85c24fd
    [  146.522473] Wlan: FW download over, firmwarelen=1004248 downloaded 916048
    [  146.926002] WLAN FW is active
    [  146.928984] on_time is 146755067377
    [  146.953100] VDLL image: len=88200
    [  146.956808] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff
    [  146.962416] uuid: a559bd0eabc155d9a2ebd1624c432f5c
    [  146.967245] max_p2p_conn = 8, max_sta_conn = 16
    [  146.993650] Register NXP 802.11 Adapter mlan0
    [  146.998191] wlan: uap%d set max_mtu 2000
    [  147.004930] Register NXP 802.11 Adapter uap0
    [  147.017128] Register NXP 802.11 Adapter wfd0
    [  147.024401] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92) 
    [  147.037465] wlan: Register to Bus Driver Done
    [  147.041938] wlan: Driver loaded successfully
    
    • see MAYA-W2_SIM_UBX-22011459.pdf for details
    • uartspi_n61x_v1.bin.se is the wifi standalone firmware for download via wifi driver
    • sduart_nw61x_v1.bin.se is the combo firmware for wifi/bt downloaded via wifi driver

Bluetooth details:

  • Bluetooth 5.4 BLE/LE
  • the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/uartspi_n61x_v1.bin.se) for bluetooth operation (so you probably want to blacklist this from loading automatically)
  • supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
    # modprobe btnxpuart
    [  147.136762] Bluetooth: Core ver 2.22
    [  147.140455] NET: Registered PF_BLUETOOTH protocol family
    [  147.145863] Bluetooth: HCI device and connection manager initialized
    [  147.152449] Bluetooth: HCI socket layer initialized
    [  147.157415] Bluetooth: L2CAP socket layer initialized
    [  147.162537] Bluetooth: SCO socket layer initialized
    [  147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [  147.353949] Bluetooth: BNEP filters: protocol multicast
    [  147.359207] Bluetooth: BNEP socket layer initialized
    [  148.324754] Bluetooth: MGMT ver 1.22
    # hciconfig hci0 up && hcitool -i hci0 scan
    hci0:   Type: Primary  Bus: UART
            BD Address: 6C:1D:EB:9B:D6:0C  ACL MTU: 1021:7  SCO MTU: 120:6
            UP RUNNING 
            RX bytes:860 acl:0 sco:0 events:60 errors:0
            TX bytes:2295 acl:0 sco:0 commands:60 errors:0
    
    Scanning ...
            28:39:5E:5B:0B:BF       n/a
    

Thread details:

  • spidev using Open Thread Border Router which is part of the NXP Matter implementation
  • the M.2 card has an on-board I/O expander with an output that enables the SPI transmit buffer; you must drive this high for SPI to respond (likely defaulted low for compatibility as these are vendor-defined pins):
  • openthread:
    # install build tools
    apt update
    apt install -y build-essential git
    # clone repo
    git clone https://github.com/openthread/openthread
    cd openthread
    # build the spi-hdlc-adapter tool
    gcc tools/spi-hdlc-adapter/spi-hdlc-adapter.c -o spi-hdlc-adapter
    ./spi-hdlc-adapter -v /dev/spidev1.2
    # FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST
    # FSA1_ALERT (GPIO4_4) is SPI_INT
    echo 120 > /sys/class/gpio/export
    echo 100 > /sys/class/gpio/export
    ./spi-hdlc-adapter --gpio-res=/sys/class/gpio/gpio120 --gpio-int=/sys/class/gpio/gpio100 --spi-align-allowance=16 -v /dev/spidev1.2
    Cntl-C
    echo 120 > /sys/class/gpio/unexport
    echo 100 > /sys/class/gpio/unexport
    # build oc-cli
    apt-get --no-install-recommends install -y g++ lsb-release cmake ninja-build shellcheck
    # build POSIX CLI
    ./script/cmake-build posix -DOT_POSIX_RCP_SPI_BUS=ON
    # FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST
    # FSA1_ALERT (GPIO4_4) is SPI_INT
    ./build/posix/src/posix/ot-cli -v -d3 'spinel+spi:///dev/spidev1.2?gpio-reset-device=/dev/gpiochip3&gpio-reset-line=24&gpio-int-device=/dev/gpiochip3&gpio-int-line=4&spi-mode=0&spi-speed=1000000&spi-reset-delay=0&spi-align-allowance=16'
    

device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:

/* Bluetooth */
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        /* reparent clock for up to 4mbd support */
        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
        status = "okay";
        bluetooth {
                compatible = "nxp,88w8987-bt";
                fw-init-baudrate = <3000000>;
        };
};

/* Thread */
&ecspi2 {
        /* ublox MAYA in FSA1 (CS2) */
        spidev@2 {
                reg = <2>;
                compatible = "lwn,bk4";
                spi-max-frequency = <1000000>;
        };
}

/* I2C port expander */
&fsa1_i2c {
        gpio@21 {
                compatible = "nxp,pcal9554b";
                reg = <0x21>;
                gpio-controller;
                #gpio-cells = <2>;
                gpio-line-names =
                        "spien", "thread_rst#", "wake_wlan", "wake_btthread",
                        "btthread_reset_in", "", "", "", "";

                spien_hog {
                        gpio-hog;
                        output-high;
                        gpios = <0 GPIO_ACTIVE_HIGH>;
                        line-name = "spien";
                };

                threadrst_hog {
                        gpio-hog;
                        output-high;
                        gpios = <1 GPIO_ACTIVE_HIGH>;
                        line-name = "thread_rst#";
                };

                wlanwake_hog {
                        gpio-hog;
                        output-low;
                        gpios = <2 GPIO_ACTIVE_HIGH>;
                        line-name = "wlan_wake#";
                };

                threadwake_hog {
                        gpio-hog;
                        output-low;
                        gpios = <3 GPIO_ACTIVE_HIGH>;
                        line-name = "thread_wake#";
                };

                threadrstin_hog {
                        gpio-hog;
                        input;
                        gpios = <4 GPIO_ACTIVE_HIGH>;
                        line-name = "threadrstin";
                };
        };
};

&iomuxc {
        pinctrl_uart3: uart3grp {
                fsl,pins = <
                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
                >;
        };
};
  • note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
  • note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer

Card: ublox JODY M.2 E-Key PCIe/UART/PCM dual-radio WiFi6 / BT 5.3 combo

The ublox JODY-W3 M.2 E-Key dual-radio combo card is based on the NXP 88W9098 chip using PCIe/SDIO for WiFi, and UART/PCM for Bluetooth.

See also:

By default the M2-JODY-W3 card is configured to use PCIe for WiFi but a resistor strapping option on the card exists to use SDIO for WiFi (see M2-JODY-W3 datasheet). Additionally a resistor strapping option can change VIO from the default 1.8V to 3.3V for the W_DISABLE1#, W_DISABLE2# and UART_WAKE# signals.

Pin details:

  • W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
  • W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
  • LED1/LED2 unused

WiFi details:

  • WiFi6 802.11ax dual-band
  • PCIe 0x1b4b:0x2b43 (function 1) and 0x1b4b:0x2b44 (function 2)
  • supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
    # get firmware (out-of-tree mwifiex requires a conf file)
    git clone https://github.com/nxp-imx/imx-firmware.git
    cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_9098_PCIE/* /lib/firmware/nxp/
    # build driver
    git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
    make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
    # load driver
    insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
    insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
    [   88.049771] wlan: Loading MWLAN driver
    [   88.053927] wlan: Register to Bus Driver...
    [   88.058461] PCI memory map Virt0: 00000000a73ddc41 PCI memory map Virt2: 00000000e0878cd5
    [   88.066707] Attach moal handle ops, card interface type: 0x206
    [   88.072575] rps set to 0 from module param
    [   88.078267] PCIE9098: init module param from usr cfg
    [   88.083316] card_type: PCIE9098, config block: 0
    [   88.087975] cfg80211_wext=0xf
    [   88.090980] max_vir_bss=1
    [   88.093614] cal_data_cfg=none
    [   88.096610] ps_mode = 1
    [   88.099084] auto_ds = 1
    [   88.101543] host_mlme=enable
    [   88.104450] fw_name=nxp/pcieuart9098_combo_v1.bin
    [   88.109204] rx_work=1 cpu_num=4
    [   88.115019] Request firmware: nxp/pcieuart9098_combo_v1.bin
    [   88.674795] WLAN FW is active
    [   88.677775] on_time is 88463011256
    [   88.713355] Register NXP 802.11 Adapter mlan0
    [   88.718062] wlan: uap%d set max_mtu 2000
    [   88.726907] Register NXP 802.11 Adapter uap0
    [   88.750747] Register NXP 802.11 Adapter wfd0
    [   88.756708] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92) 
    [   88.765023] PCI memory map Virt0: 00000000ea6851b2 PCI memory map Virt2: 00000000e8001719
    [   88.775806] Attach moal handle ops, card interface type: 0x206
    [   88.781820] rps set to 0 from module param
    [   88.791183] PCIE9098: init module param from usr cfg
    [   88.796258] card_type: PCIE9098, config block: 1
    [   88.800994] cfg80211_wext=0xf
    [   88.804003] max_vir_bss=1
    [   88.808088] cal_data_cfg=none
    [   88.811100] ps_mode = 1
    [   88.813553] auto_ds = 1
    [   88.816070] host_mlme=enable
    [   88.822850] fw_name=nxp/pcieuart9098_combo_v1.bin
    [   88.830099] rx_work=1 cpu_num=4
    [   88.848531] Request firmware: nxp/pcieuart9098_combo_v1.bin
    [   88.856748] WLAN FW is active
    [   88.859755] on_time is 88644991126
    [   88.884288] Register NXP 802.11 Adapter mmlan0
    [   88.889110] wlan: muap%d set max_mtu 2000
    [   88.894440] Register NXP 802.11 Adapter muap0
    [   88.916583] Register NXP 802.11 Adapter mwfd0
    [   88.921118] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92) 
    [   88.929262] wlan: Register to Bus Driver Done
    [   88.933703] wlan: Driver loaded successfully
    root@noble-venice:~# ls /sys/class/net
    can0  can1  eth0  eth1  lo  mlan0  mmlan0  muap0  mwfd0  uap0  wfd0
    

Bluetooth details:

  • Bluetooth 5.3 BR/EDR/LE
  • the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/pcieuart9098_combo_v1.bin,) for bluetooth operation (so you probably want to blacklist this from loading automatically)
  • supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
    # modprobe btnxpuart
    [  147.136762] Bluetooth: Core ver 2.22
    [  147.140455] NET: Registered PF_BLUETOOTH protocol family
    [  147.145863] Bluetooth: HCI device and connection manager initialized
    [  147.152449] Bluetooth: HCI socket layer initialized
    [  147.157415] Bluetooth: L2CAP socket layer initialized
    [  147.162537] Bluetooth: SCO socket layer initialized
    [  147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [  147.353949] Bluetooth: BNEP filters: protocol multicast
    [  147.359207] Bluetooth: BNEP socket layer initialized
    [  148.324754] Bluetooth: MGMT ver 1.22
    # hciconfig hci0 up && hcitool -i hci0 scan
    hci0:   Type: Primary  Bus: UART
            BD Address: 6C:1D:EB:9B:D6:0C  ACL MTU: 1021:7  SCO MTU: 120:6
            UP RUNNING 
            RX bytes:860 acl:0 sco:0 events:60 errors:0
            TX bytes:2295 acl:0 sco:0 commands:60 errors:0
    
    Scanning ...
            28:39:5E:5B:0B:BF       n/a
    

device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:

/* Bluetooth */
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        /* reparent clock for up to 4mbd support */
        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
        status = "okay";
        bluetooth {
                compatible = "nxp,88w8987-bt";
                fw-init-baudrate = <3000000>;
        };
};

&iomuxc {
        pinctrl_uart3: uart3grp {
                fsl,pins = <
                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
                >;
        };
};
  • note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
  • note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer

Card: AzureWave AW-CM276MA M.2 E-Key PCIE-UART WiFi5 / BT 5.3 combo

The AzureWave AW-CM276MA Wifi5+BT5.3 M.2 E-Key combo radio based on the NXP 88W8997 chipset uses PCIe and UART for BT:

WiFi details:

  • WiFi5 802.11ac
  • PCIe: 0x1b4b:0x2b42
  • supported by in-kernel 6.6 mwifiex driver (loads mrvl/pcieuart8997_combo_v4.bin combo firmware reuqired for pcie/bluetooth)
  • supported by out-of-tree mwifiex driver as well with firmware nxp/pcieuart8997_combo_v4.bin from imx-firmware
    [   32.919130] wlan: Loading MWLAN driver
    [   32.923299] wlan: Register to Bus Driver...
    [   32.927735] wlan_pcie 0000:03:00.0: enabling device (0000 -> 0002)[   32.934062] PCI memory map Virt0: 0000000078035496 PCI memory map Virt2: 00000000dc1c2bc9
    [   32.942283] Attach moal handle ops, card interface type: 0x204
    [   32.948144] rps set to 0 from module param
    [   32.952266] wlan_pcie 0000:03:00.0: _request_firmware nxp/wifi_mod_awcm276ma.conf
    [   32.963086] wlan_pcie 0000:03:00.0: Loaded FW: nxp/wifi_mod_awcm276ma.conf, sha256: b6e2dbc1bdfdc60ceda5674c7a95425ce9056328af3ab9ec6b1f0
    c02d916a71d
    [   32.976426] PCIE8997: init module param from usr cfg
    [   32.981414] card_type: PCIE8997, config block: 0
    [   32.986057] cfg80211_wext=0xf
    [   32.989046] max_vir_bss=1
    [   32.991696] cal_data_cfg=none
    [   32.994691] ps_mode = 1
    [   32.997144] auto_ds = 1
    [   32.999613] host_mlme=enable
    [   33.002515] fw_name=nxp/pcieuart8997_combo_v4.bin
    [   33.007263] rx_work=1 cpu_num=4
    [   33.010430] Enable moal_recv_amsdu_packet
    [   33.014487] Attach mlan adapter operations.card_type is 0x204.
    [   33.022569] Request firmware: nxp/pcieuart8997_combo_v4.bin
    [   33.028166] wlan_pcie 0000:03:00.0: _request_firmware nxp/pcieuart8997_combo_v4.bin
    [   33.043994] wlan_pcie 0000:03:00.0: Loaded FW: nxp/pcieuart8997_combo_v4.bin, sha256: 5d08062fe8dd7d2b7f3e26646cfb42288f0de111fc70c86a03f
    bafbc37050b9f
    [   33.661253] FW download over, size 621276 bytes
    [   34.382556] WLAN FW is active
    [   34.385539] on_time is 34479014993
    [   34.431874] VDLL image: len=8652
    [   34.435158] FW country code WW does not match with US
    [   34.440399] fw_cap_info=0x587c6fa3, dev_cap_mask=0xffffffff
    [   34.446025] max_p2p_conn = 8, max_sta_conn = 8
    [   34.474292] Register NXP 802.11 Adapter mlan0
    [   34.478819] wlan: uap%d set max_mtu 2000
    [   34.484964] Register NXP 802.11 Adapter uap0
    [   34.496213] Register NXP 802.11 Adapter wfd0
    [   34.500799] wlan: version = PCIE8997--16.92.21.p119.2-MM6X16437.p3-GPL-(FP92) 
    [   34.508656] wlan: Register to Bus Driver Done
    [   34.513081] wlan: Driver loaded successfully
    

Bluetooth details:

  • Bluetooth 5.3
  • the mwifiex wifi driver must be loaded first configured to load the combo firmware for bluetooth operation (so you probably want to blacklist this from loading automatically)
  • supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART

device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:

/* Bluetooth */
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        /* reparent clock for up to 4mbd support */
        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
        status = "okay";
        bluetooth {
                compatible = "nxp,88w8987-bt";
        };
};

&iomuxc {
        pinctrl_uart3: uart3grp {
                fsl,pins = <
                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
                >;
        };
};
  • no fw-init-baudrate = <300000> (not sure why I had to drop this low)

Card: Silex SX-PCEAX PCI/USB WiFi6E / BT 5.2 combo card

The Silex SX-PCEAX combo card uses the QCA2066 chipset with PCI for wifi and USB for bluetooth:

Pin Details:

  • M2.54 W_DISABLE2# input; BT_EN active high to enable USB/bluetooth
  • M2.56 W_DISABLE1# N/C (datasheet rev AX Sept 2022 shows this as not used)
  • M2.6 LED1# N/C (datasheet rev AX Sept 2022 shows this as not used)
  • M2.16 LED2# N/C (datasheet rev AX Sept 2022 shows this as not used)

WiFi details:

  • Wifi6E 802.11ax
  • PCIe 3.0 0x17cb:0x1103
  • supported by the ath11k driver but needs a board-2.bin and regdb from Silex:
    # firmware
    unzip ath11k_board-data_regdb_GF_SEC.zip (documentation says it was tested with 5.17.0)
    cp ath11k_board-data_regdb_GF_SEC/board-2_US_EU_JP.bin /lib/firmware/ath11k/WCN6855/hw2.1/board-2.bin
    cp ath11k_board-data_regdb_GF_SEC/regdb.bin /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin
    rm /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin.zst
    # reboot
    [    8.346705] ath11k_pci 0000:03:00.0: BAR 0: assigned [mem 0x18200000-0x183fffff 64bit]
    [    8.346761] ath11k_pci 0000:03:00.0: enabling device (0000 -> 0002)
    [    8.352980] ath11k_pci 0000:03:00.0: MSI vectors: 1
    [    8.353012] ath11k_pci 0000:03:00.0: wcn6855 hw2.1
    [    8.605970] mhi mhi0: _request_firmware ath11k/WCN6855/hw2.1/amss.bin
    [    8.703674] mhi mhi0: Loaded FW: ath11k/WCN6855/hw2.1/amss.bin, sha256: 8f10357b53b40238333f0b055b4829fc8dd87994aa2476ae3fa
    92234d8f31065
    [    9.423579] ath11k_pci 0000:03:00.0: chip_id 0x12 chip_family 0xb board_id 0xff soc_id 0x400c1211
    [    9.423603] ath11k_pci 0000:03:00.0: fw_version 0x1106196e fw_build_timestamp 2024-01-12 11:30 fw_build_id WLAN.HSP.1.1-031
    25-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37
    [    9.423620] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
    [    9.438310] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
    3c92c730241139779d55b9b2f25cce3
    [    9.438452] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
    [    9.442371] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
    3c92c730241139779d55b9b2f25cce3
    [    9.442532] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/regdb.bin
    [    9.445073] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/regdb.bin, sha256: 0c8ae0f1224c240ba41df6407492d6f7b61
    2d761c01391e969fbdec4c443d889
    [    9.453593] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
    [    9.457116] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
    3c92c730241139779d55b9b2f25cce3
    [    9.483549] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/m3.bin
    [    9.488994] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/m3.bin, sha256: 9b9b226abf8ce0e005209e53c0c9a4443abaf7
    b3def7fefe7e5c5676255c7bdc
    [    9.533962] ath11k_pci 0000:03:00.0: leaving PCI ASPM disabled to avoid MHI M2 problems
    # interface
    root@noble-venice:~# ls -l /sys/class/net/wlan0
    lrwxrwxrwx 1 root root 0 Oct 28 19:02 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
    .0/0000:01:00.0/0000:02:01.0/0000:03:00.0/net/wlan0
    

Bluetooth Details:

  • Bluetooth 5.2 BR/EDR/LE
  • USB2.0 0x0cf3:0xe600
  • supported by the btusb driver; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB:
    root@noble-venice:~# dmesg | grep Bluetooth
    [    8.188778] Bluetooth: Core ver 2.22
    [    8.188899] Bluetooth: HCI device and connection manager initialized
    [    8.189878] Bluetooth: HCI socket layer initialized
    [    8.189901] Bluetooth: L2CAP socket layer initialized
    [    8.189932] Bluetooth: SCO socket layer initialized
    [    8.340707] Bluetooth: hci0: using rampatch file: qca/rampatch_usb_00130201.bin
    [    8.340712] Bluetooth: hci0: QCA: patch rome 0x130201 build 0x65e2, firmware rome 0x130201 build 0x38e6
    [    8.910493] Bluetooth: hci0: using NVM file: qca/nvm_usb_00130201_gf.bin
    [    9.047564] Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
    [    9.316899] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
    [    9.316916] Bluetooth: BNEP filters: protocol multicast
    [    9.316929] Bluetooth: BNEP socket layer initialized
    [    9.323882] Bluetooth: MGMT ver 1.22
    root@noble-venice:~# hciconfig hci0
    hci0:   Type: Primary  Bus: USB
            BD Address: 1C:BC:EC:01:43:B5  ACL MTU: 1024:7  SCO MTU: 240:8
            UP RUNNING 
            RX bytes:954 acl:0 sco:0 events:75 errors:0
            TX bytes:2870 acl:0 sco:0 commands:75 errors:0
    
    root@noble-venice:~# hcitool -i hci0 scan
    Scanning ...
    

GW16FB0 FSA M.2 B-Key Adapter

The GW16FB0 B-Key Adapter provides an M.2 B-Key socket with the following:

  • GPIO5 (drive-high; drive-low; high-Z 1.8V)
  • GPIO6 (drive-high; drive-low; high-Z 1.8V)
  • DPR (drive-high or drive-low 1.8V)
  • WP# (OD; high-Z or drive-low)
  • W_DISALBE1# (OD|drive-high|drive-low @1.8V or 3.3V)
  • W_DISABLE2# (OD|drive-high|drive-low @1.8V or 3.3V)
  • RESET# (OD|drive-high|drive-low @1.8V or 3.3V)
  • CRDPWROFF# (OD|drive-high|drive-low @1.8V or 3.3V)
  • CONFIG[0-3]
  • COEX[0-2]
  • SIM1
  • SIM2
  • USB2.0
  • PCIE3.0 (with PERST# 3.3V)
  • LED1# (OD Yellow)

Pinout (from baseboard perspective):

pin signal signal pin
1 CONFIG3(I)(3.3V pu) 3.3V 2
3 GND 3.3V 4
5 GND CRDPWROFF#(O/OD) 6
7 USB_DP W_DISABLE1#(O/OD) 8
9 USB_DM LED1#(OD) 10
11 GND KEY 12
13 KEY KEY 14
15 KEY KEY 16
17 KEY KEY 18
19 KEY GPIO5(O/OD) 20
21 CONFIG0(I)(3.3V pu) GPIO6(O/OD) 22
23 NC NC 24
25 DPR W_DISABLE2#(O/OD) 26
27 GND NC 28
29 USB_RXN SIM1_RST3 30
31 USB_RXP SIM1_CLK3 32
33 GND SIM1_DAT3 34
35 USB_TXN SIM1_PWR3 36
37 USB_TXP NC 38
39 GND SIM2_DET3 40
41 PCIE_RXN SIM2_DAT3 42
43 PCIE_RXP SIM2_CLK3 44
45 GND SIM2_RST3 46
47 PCIE_TXN SIM2_PWR3 48
49 PCIE_TXP PERST#(O)(3.3V) 50
51 GND NC 52
53 PCIE_CKN NC 54
55 PCIE_CKP NC 56
57 GND NC 58
59 NC COEX31 60
61 NC COEX21 62
63 NC COEX11 64
65 NC SIM1_DET3 66
67 RESET#(O/OD) WP#(O/OD) 68
69 CONFIG1(I)(3.3V pu) 3.3V 70
71 GND 3.3V 72
73 GND 3.3V 74
75 CONFIG2(I)(3.3V pu)
  1. The COEX[1..3] signals are ganged to each FSA socket on the baseboard
  2. CONFIG[0..3] are inputs to the port expander with onboard pullups
  3. The SIM signals do not connect to the baseboard SoC and go directly to the on-board SIM connector

The following GPIO's are highly customizable via a dip-switch and I/O port expander:

  • W_DISALBLE1#: output level is fsa_wdisable1# gpio
  • CRDPWROFF#: output level is fsa_crdpwroff# gpio
  • RESET#: output level is fsa_reset# gpio
  • W_DISABLE2#: output level is fsa_wdisable1# gpio
  • GPIO5:
    • high-Z: gpio5_oe#=high
    • 1.8V: gpio5_oe#=low, DIP[9]=off
    • 0V: gpio5_oe=low, DIP[9]=on
  • GPIO6:
    • high-Z: gpio6_oe#=high
    • 1.8V: gpio6_oe#=low, DIP[10]=off
    • 0V: gpio6_oe=low, DIP[10]=on

Card: Compex WLTB7002E25 M.2 B-Key/M-Key WiFi7 radio

The Compex WLTB7002 is a Wifi7 802.11be M.2 B-Key PCIE based radio using a Qualcomm chipset and supported by the ath12k driver. Note that the early product naming was WLTM which was changed to WLTB (the card we have says WLTM).

Pin Details:

  • PERST# has a pu to 3.3V on card
  • CONFIG[0..3]=1111
  • DIP[1..10]=1101011111 (W_DISABLE1# OD)
  • M2.8 W_DISABLE1# OD

WiFi details:

  • WiFi7 802.11be
  • PCIe 0x17cb 0x1109
  • ath12:
    • firmware: ath12k/QCN9274/hw2.0
      • board-2.bin and firmware-2.bin (from https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware; several options for firmware-2.bin all which work accept for QCN9274/hw2.0/testing/1.4.1/WLAN.WBE.1.4.1-00103-QCAHKSWPL_SILICONZ-1/firmware-2.bin)
      • regdb.bin and board.bin (not publicly available and are provided by Compex :sales@…)
    • driver:
      root@noble-venice:~# cat /proc/cmdline                                                                                        
      console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait net.ifnames=0 cma=196M
      root@noble-venice:~# dmesg | grep ath12
      [    9.439459] ath12k_pci 0000:07:00.0: BAR 0 [mem 0x18200000-0x183fffff 64bit]: assigned
      [    9.439514] ath12k_pci 0000:07:00.0: enabling device (0000 -> 0002)
      [    9.440236] ath12k_pci 0000:07:00.0: MSI vectors: 16
      [    9.440262] ath12k_pci 0000:07:00.0: Hardware name: qcn9274 hw2.0
      [    9.651582] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/firmware-2.bin, sha256: 6d2330c27a55b5a64a303bfcf6a05b
      dfe8a8e32f61fccff0b7ac980eee71a019
      [   10.430023] ath12k_pci 0000:07:00.0: memory type 10 not supported
      [   10.435234] ath12k_pci 0000:07:00.0: chip_id 0x0 chip_family 0xb board_id 0x101a soc_id 0x401a2200
      [   10.435258] ath12k_pci 0000:07:00.0: fw_version 0x111300d6 fw_build_timestamp 2024-08-06 08:43 fw_build_id QC_IMAGE_VERSION
      _STRING=WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1
      [   10.439493] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
      8f5e5c5a4235bb2a061d6138233e2e5
      [   10.440555] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
      8f5e5c5a4235bb2a061d6138233e2e5
      [   10.441504] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/regdb.bin, sha256: a36fbe1cdaa83c8ae6792614bfa0e3b9fa2
      f1a0d01b07fdafad3ace46d34bc9a
      [   10.449868] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
      8f5e5c5a4235bb2a061d6138233e2e5
      [   10.450680] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
      8f5e5c5a4235bb2a061d6138233e2e5
      [   10.452542] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board.bin, sha256: cc31d22d444fe3e574891ad0470bf64092b
      75ece32dd229c27fbd60835ef61a3
      [   13.055026] ath12k_pci 0000:07:00.0: Invalid module id 2
      [   13.055062] ath12k_pci 0000:07:00.0: failed to parse tlv -22
      root@noble-venice:~# ls -l /sys/class/net/wlan*
      lrwxrwxrwx 1 root root 0 Apr 19  2024 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
      .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0
      lrwxrwxrwx 1 root root 0 Apr 19  2024 /sys/class/net/wlan1 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
      .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan1
      
  • There is a patch posted (not accepted yet) which fixes the 'Invalid module id2' 'failed to parse tlv -22' issue (https://patchwork.kernel.org/project/linux-wireless/patch/20231030222700.18914-2-quic_rajkbhag@quicinc.com/)
  • Note that additional cma is needed (cma=196M) for this card
  • Note that Linux 6.9 or newer is likely required (tested 6.9, 6.10, 6.11, 6.12-rc6; 6.6 is too old, not sure about 6.7, 6.8)
  • iperf3 showed TX/RX rate of 503/499 mbps

Card: Quectel EM06 M.2 B-Key Modem

The Quectel EM06 B-Key Modem is a USB2.0 Category 6 LTE modem with dual-sim and GNSS support.

Pin Details:

  • DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
  • CONFIG[0..3]=0011
  • GPIO5 and GPIO6 are used for PCM CLK and DAT input
  • W_DISABLE1# Disable Modem
  • W_DISABLE2# Disable GPS
  • WWAN_LED# RF Status
  • dual-sim

Modem Details:

  • DIP[1..10]=1101011100 (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD, GPIO5 and GPIO6 driven low at power-up until U-Boot drives the OE's high)
  • CONFIG[0..3]=1111
  • USB2.0 2c7c:0306
  • drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
    root@noble-venice:~# mmcli -m 0
      -----------------------------------
      General  |                    path: /org/freedesktop/ModemManager1/Modem/0
               |               device id: 3a44c51e195b25f52092cb3bf35d5c7102a7b6fc
      -----------------------------------
      Hardware |            manufacturer: Quectel
               |                   model: EM06-A
               |       firmware revision: EM06ALAR03A05M4G
               |          carrier config: ROW_Generic_3GPP
               | carrier config revision: 06010821
               |            h/w revision: EM06-A
               |               supported: gsm-umts, lte
               |                 current: gsm-umts, lte
               |            equipment id: 861364040064220
      -----------------------------------
      System   |                  device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2
               |                 physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2
               |                 drivers: option, cdc_mbim
               |                  plugin: quectel
               |            primary port: cdc-wdm0
               |                   ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps), 
               |                          ttyUSB2 (at), ttyUSB3 (at), wwan0 (net)
      -----------------------------------
      Status   |                    lock: sim-pin2
               |          unlock retries: sim-pin2 (3)
               |                   state: disabled
               |             power state: on
      -----------------------------------
      Modes    |               supported: allowed: 3g; preferred: none
               |                          allowed: 4g; preferred: none
               |                          allowed: 3g, 4g; preferred: 4g
               |                          allowed: 3g, 4g; preferred: 3g
               |                 current: allowed: 3g, 4g; preferred: 4g
      -----------------------------------
      Bands    |               supported: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5, 
               |                          eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29, 
               |                          eutran-30, eutran-41, eutran-66
               |                 current: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5, 
               |                          eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29, 
               |                          eutran-30, eutran-41, eutran-66
      -----------------------------------
      IP       |               supported: ipv4, ipv6, ipv4v6
      -----------------------------------
      3GPP     |                    imei: 861364040064220
               |           enabled locks: fixed-dialing
      -----------------------------------
      3GPP EPS |    ue mode of operation: csps-2
      -----------------------------------
      SIM      |        primary sim path: /org/freedesktop/ModemManager1/SIM/0
    root@noble-venice:~# mmcli -m 0 --sim 0
      -------------------------------
      General    |              path: /org/freedesktop/ModemManager1/SIM/0
      -------------------------------
      Properties |            active: yes
                 |              imsi: 234500007828248
                 |             iccid: 8944501109208282487
                 |       operator id: 23450
                 |     operator name: Hologram
                 |              gid1: FFFFFFFF
                 |              gid2: FFFFFFFF
    

Card: Sierra Wireless EM9191 B-Key Modem

Pin Details:

  • Full_Card_Power_Off# —Active-low input from the host—Low turns the module off, high turns the module on.
  • W_DISABLE1# pu W_DISABLE#—Active low input from the host—Low disables the main RF radio or triggers a ‘Dying Gasp’ SMS, depending on configuration.
  • W_DISABLE2# pu GPS_DISABLE#—Active low input from the host—Low disables the GNSS radio receiver.
  • RESET#—Active low input from the host—Low resets the module.
  • Dynamic power control (DPR)—Signal used to adjust Tx power to meet FCC SAR requirements. For details, see
  • GPIO5/GPIO6 drive high for USB3.0 or drive low for PCIe
  • LED# blinks on 0.5s every 5 seconds or so

Modem Details:

  • DIP[1..10]=1101011100 (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD, GPIO5 and GPIO6 driven low at power-up until U-Boot drives the OE's high)
    • CONFIG[0..3]=0011
    • USB3.0 1199:90d3
    • drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
      root@noble-venice:~# dmesg | egrep option\|mbim
      [    0.000000] earlycon: ec_imx6q0 at MMIO 0x0000000030890000 (options '115200')
      [    7.866598] usbcore: registered new interface driver option
      [    7.871271] option 2-1:1.3: GSM modem (1-port) converter detected
      [    7.873704] option 2-1:1.4: GSM modem (1-port) converter detected
      [    7.988211] cdc_mbim 2-1:1.0: setting rx_max = 16384
      [    8.046418] cdc_mbim 2-1:1.0: cdc-wdm0: USB WDM device
      [    8.123786] cdc_mbim 2-1:1.0 wwan0: register 'cdc_mbim' at usb-xhci-hcd.0.auto-1, CDC MBIM, 6a:f5:5b:cf:07:fd
      [    8.123962] usbcore: registered new interface driver cdc_mbim
      
    • modemmanager:
      root@noble-venice:~# mmcli -m 0
        ----------------------------------
        General  |                   path: /org/freedesktop/ModemManager1/Modem/0
                 |              device id: 54d8f189055cd3252fc067e8f4e7e41fe9f4831f
        ----------------------------------
        Hardware |           manufacturer: Sierra Wireless, Incorporated
                 |                  model: Sierra Wireless EM9191
                 |      firmware revision: 01.07.19.00_GENERI_016.010_000
                 |         carrier config: default
                 |           h/w revision: EM9191
                 |              supported: gsm-umts, lte, 5gnr
                 |                current: gsm-umts, lte, 5gnr
                 |           equipment id: 355890340103204
        ----------------------------------
        System   |                 device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |                physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |                drivers: option, cdc_mbim
                 |                 plugin: sierra
                 |           primary port: cdc-wdm0
                 |                  ports: cdc-wdm0 (mbim), ttyUSB0 (at), wwan0 (net)
        ----------------------------------
        Status   |                   lock: sim-pin2
                 |         unlock retries: sim-pin2 (3)
                 |                  state: disabled
                 |            power state: on
        ----------------------------------
        Modes    |              supported: allowed: 3g; preferred: none
                 |                         allowed: 4g; preferred: none
                 |                         allowed: 3g, 4g; preferred: 4g
                 |                         allowed: 3g, 4g; preferred: 3g
                 |                         allowed: 5g; preferred: none
                 |                         allowed: 4g, 5g; preferred: 5g
                 |                         allowed: 4g, 5g; preferred: 4g
                 |                         allowed: 3g, 5g; preferred: 5g
                 |                         allowed: 3g, 5g; preferred: 3g
                 |                         allowed: 3g, 4g, 5g; preferred: 5g
                 |                         allowed: 3g, 4g, 5g; preferred: 4g
                 |                         allowed: 3g, 4g, 5g; preferred: 3g
                 |                current: allowed: 3g, 4g, 5g; preferred: 4g
        ----------------------------------
        Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, 
                 |                         eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28, 
                 |                         ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79
                 |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, 
                 |                         eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28, 
                 |                         ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79
        ----------------------------------
        IP       |              supported: ipv4, ipv6, ipv4v6
        ----------------------------------
        3GPP     |                   imei: 355890340103204
                 |          enabled locks: fixed-dialing
        ----------------------------------
        3GPP EPS |   ue mode of operation: csps-2
                 |     initial bearer apn: psntneofin
                 | initial bearer ip type: ipv4v6
        ----------------------------------
        SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
                 |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
      

Card: Sierra Wireless EM7455 B-Key Modem

The Sierra Wireless EM7455 B-Key Modem is a USB3.0 Category 6 LTE modem with dual-sim and GNSS support.

Pin Details:

  • DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
  • CONFIG[0..3]=0011
  • W_DISABLE1# Disable Modem
  • W_DISABLE2# Disable GPS
  • LED# WWAN Radio On indicator
  • GPIO5 and GPIO6 are N/C
  • dual-sim

Modem Details:

  • USB3.0 1199:9079
    • drivers: cdc_mbim/USB_NET_CDC_MBIM
      root@noble-venice:~# dmesg | egrep mbim
      [   15.407976] cdc_mbim 2-1:1.12: cdc-wdm0: USB WDM device
      [   15.408552] cdc_mbim 2-1:1.12 wwan0: register 'cdc_mbim' at usb-xhci-hcd.0.auto-1, CDC MBIM, 52:79:74:f9:6c:a9
      [   15.408712] usbcore: registered new interface driver cdc_mbim
      
    • modemmanager:
      root@noble-venice:~# mmcli --version
      mmcli 1.23.4
      Copyright (2011 - 2023) Aleksander Morgado
      License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
      This is free software: you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.
      root@noble-venice:~# mmcli -m 0
        --------------------------------
        General  |                 path: /org/freedesktop/ModemManager1/Modem/0
                 |            device id: ec2f88be52b588f89e0f12a21c4c5bb5cf5387a2
        --------------------------------
        Hardware |         manufacturer: Sierra Wireless, Incorporated
                 |                model: Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A
                 |    firmware revision: SWI9X30C_02.08.02.00
                 |       carrier config: default
                 |         h/w revision: EM7455
                 |            supported: gsm-umts, lte
                 |              current: gsm-umts, lte
                 |         equipment id: 014582002248145
        --------------------------------
        System   |               device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |              physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |              drivers: cdc_mbim, qcserial
                 |               plugin: sierra
                 |         primary port: cdc-wdm0
                 |                ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps), 
                 |                       ttyUSB2 (at), wwan0 (net)
        --------------------------------
        Status   |                 lock: sim-pin2
                 |       unlock retries: sim-pin2 (3)
                 |                state: disabled
                 |          power state: low
        --------------------------------
        Modes    |            supported: allowed: 3g; preferred: none
                 |                       allowed: 4g; preferred: none
                 |                       allowed: 3g, 4g; preferred: 4g
                 |                       allowed: 3g, 4g; preferred: 3g
                 |              current: allowed: 3g, 4g; preferred: 4g
        --------------------------------
        Bands    |            supported: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2, 
                 |                       eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, 
                 |                       eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
                 |              current: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2, 
                 |                       eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, 
                 |                       eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
        --------------------------------
        IP       |            supported: ipv4, ipv6, ipv4v6
        --------------------------------
        3GPP     |                 imei: 014582002248145
                 |        enabled locks: fixed-dialing
        --------------------------------
        3GPP EPS | ue mode of operation: csps-2
        --------------------------------
        SIM      |     primary sim path: /org/freedesktop/ModemManager1/SIM/0
                 |       sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
                 |                       slot 2: /org/freedesktop/ModemManager1/SIM/1
      

Card: Telit FN980 B-Key Modem

The Telit FN980 B-Key Modem is a USB3.0/PCIe based modem. The early hardware v1.0 uses AT commands to select between PCI and USB interfaces.

Modem Details:

  • bus selection
    • v1.2 hw pin20 GPIO5 low enables PCIe mode
    • v1.0 (what we have) requires an AT command to switch back and forth. Note that when in PCI mode a device still enumerates on USB 3.0 as well (but its not used)
      DEVICE=/dev/ttyUSB3
      stty -F $DEVICE ignbrk -brkint -icrnl -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke # config tty
      cat $DEVICE & # background process to read TTY responses
      at() { echo -n -e "$1\r" > $DEVICE; } # script for at cmds
      at "ATI" # identify modem
      at "AT#USBPCISWITCH?" # read switch
      at "AT#USBPCISWITCH=0" # set USB
      at "AT#USBPCISWITCH=1,5,0" # set PCI
      at "AT#REBOOT" # reboot modem
      
  • PCIe mode:
    • 0x17cb:0x0306
    • drivers: mhi_net, mhi-pci-generic
      [    8.764392] mhi-pci-generic 0000:03:00.0: MHI PCI device found: telit-fn980-hwv1
      [    8.764420] mhi-pci-generic 0000:03:00.0: BAR 0: assigned [mem 0x18100000-0x18100fff 64bit]
      [    8.764465] mhi-pci-generic 0000:03:00.0: enabling device (0000 -> 0002)
      [    8.778878] mhi mhi0: Requested to power ON
      [    8.778922] mhi mhi0: Power on setup success
      
    • modemmanager:
      root@noble-venice:~# mmcli -m 0
        ----------------------------------
        General  |                   path: /org/freedesktop/ModemManager1/Modem/0
                 |              device id: b9bb1ca601e8da746a588c18447cb5390535b85b
        ----------------------------------
        Hardware |           manufacturer: Telit
                 |                  model: FN980m
                 |      firmware revision: M0H.020002-B009
                 |         carrier config: default
                 |           h/w revision: 1.00
                 |              supported: gsm-umts, lte, 5gnr, tds
                 |                         cdma-evdo, lte, 5gnr, tds
                 |                         lte, 5gnr, tds
                 |                         cdma-evdo, gsm-umts, lte, 5gnr, tds
                 |                current: gsm-umts, lte, 5gnr, tds
                 |           equipment id: 350313452002366
        ----------------------------------
        System   |                 device: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01
      .0/0000:03:00.0
                 |                physdev: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01
      .0/0000:03:00.0
                 |                drivers: mhi_net, mhi-pci-generic
                 |                 plugin: telit
                 |           primary port: wwan0qmi0
                 |                  ports: mhi_hwip0 (net), wwan0qmi0 (qmi)
        ----------------------------------
        Status   |                   lock: sim-pin2
                 |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
                 |                  state: disabled
                 |            power state: on
        ----------------------------------
        Modes    |              supported: allowed: 2g; preferred: none
                 |                         allowed: 3g; preferred: none
                 |                         allowed: 2g, 3g; preferred: 3g
                 |                         allowed: 2g, 3g; preferred: 2g
                 |                         allowed: 2g, 4g; preferred: 4g
                 |                         allowed: 2g, 4g; preferred: 2g
                 |                         allowed: 3g, 4g; preferred: 4g
                 |                         allowed: 3g, 4g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g; preferred: 4g
                 |                         allowed: 2g, 3g, 4g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g; preferred: 2g
                 |                         allowed: 2g, 5g; preferred: 5g
                 |                         allowed: 2g, 5g; preferred: 2g
                 |                         allowed: 3g, 5g; preferred: 5g
                 |                         allowed: 3g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 5g; preferred: 5g
                 |                         allowed: 2g, 3g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 5g; preferred: 2g
                 |                         allowed: 2g, 4g, 5g; preferred: 5g
                 |                         allowed: 2g, 4g, 5g; preferred: 4g
                 |                         allowed: 2g, 4g, 5g; preferred: 2g
                 |                         allowed: 3g, 4g, 5g; preferred: 5g
                 |                         allowed: 3g, 4g, 5g; preferred: 4g
                 |                         allowed: 3g, 4g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 5g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 4g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 2g
                 |                current: allowed: 3g; preferred: none
        ----------------------------------
        Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, 
                 |                         eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, 
                 |                         ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38, 
                 |                         ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78, 
                 |                         ngran-79
                 |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, 
                 |                         eutran-66, eutran-71, utran-19
        ----------------------------------
        IP       |              supported: ipv4, ipv6, ipv4v6
        ----------------------------------
        3GPP     |                   imei: 350313452002366
                 |          enabled locks: fixed-dialing
        ----------------------------------
        3GPP EPS | initial bearer ip type: ipv4v6
        ----------------------------------
        SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
                 |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
                 |                         slot 2: none
      
  • USB3.0 mode:
    • USB3.0 1bc7:1050
    • drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
    • modemmanager:
      root@noble-venice:~# mmcli -m 0
        ----------------------------------
        General  |                   path: /org/freedesktop/ModemManager1/Modem/0
                 |              device id: c04a4fdf1b3d082ea319157f172714fef001f97f
        ----------------------------------
        Hardware |           manufacturer: Telit
                 |                  model: FN980m
                 |      firmware revision: M0H.020002-B009
                 |         carrier config: default
                 |           h/w revision: 1.00
                 |              supported: gsm-umts, lte, 5gnr, tds
                 |                         cdma-evdo, lte, 5gnr, tds
                 |                         lte, 5gnr, tds
                 |                         cdma-evdo, gsm-umts, lte, 5gnr, tds
                 |                current: gsm-umts, lte, 5gnr, tds
                 |           equipment id: 350313452002366
        ----------------------------------
        System   |                 device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2
                 |                physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2
                 |                drivers: option, qmi_wwan
                 |                 plugin: telit
                 |           primary port: cdc-wdm0
                 |                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (ignored), 
                 |                         ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net)
        ----------------------------------
        Status   |                   lock: sim-pin2
                 |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
                 |                  state: disabled
                 |            power state: on
        ----------------------------------
        Modes    |              supported: allowed: 2g; preferred: none
                 |                         allowed: 3g; preferred: none
                 |                         allowed: 2g, 3g; preferred: 3g
                 |                         allowed: 2g, 3g; preferred: 2g
                 |                         allowed: 2g, 4g; preferred: 4g
                 |                         allowed: 2g, 4g; preferred: 2g
                 |                         allowed: 3g, 4g; preferred: 4g
                 |                         allowed: 3g, 4g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g; preferred: 4g
                 |                         allowed: 2g, 3g, 4g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g; preferred: 2g
                 |                         allowed: 2g, 5g; preferred: 5g
                 |                         allowed: 2g, 5g; preferred: 2g
                 |                         allowed: 3g, 5g; preferred: 5g
                 |                         allowed: 3g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 5g; preferred: 5g
                 |                         allowed: 2g, 3g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 5g; preferred: 2g
                 |                         allowed: 2g, 4g, 5g; preferred: 5g
                 |                         allowed: 2g, 4g, 5g; preferred: 4g
                 |                         allowed: 2g, 4g, 5g; preferred: 2g
                 |                         allowed: 3g, 4g, 5g; preferred: 5g
                 |                         allowed: 3g, 4g, 5g; preferred: 4g
                 |                         allowed: 3g, 4g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 5g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 4g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 3g
                 |                         allowed: 2g, 3g, 4g, 5g; preferred: 2g
                 |                current: allowed: 3g; preferred: none
        ----------------------------------
        Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, 
                 |                         eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, 
                 |                         ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38, 
                 |                         ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78, 
                 |                         ngran-79
                 |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, 
                 |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, 
                 |                         eutran-66, eutran-71, utran-19
        ----------------------------------
        IP       |              supported: ipv4, ipv6, ipv4v6
        ----------------------------------
        3GPP     |                   imei: 350313452002366
                 |          enabled locks: fixed-dialing
        ----------------------------------
        3GPP EPS |   ue mode of operation: csps-2
                 | initial bearer ip type: ipv4v6
        ----------------------------------
        SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
                 |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
                 |                         slot 2: none
      

Card: Telit LN920 B-Key Modem

The https://www.telit.com/devices/ln920-series/ Telit LN920 B-Key modem is a USB3.0 Category 6 LTE modem with dual-sim and GNSS support.

Pin Details:

  • W_DISABLE1# Disable Modem
  • W_DISABLE2# Disable GPS
  • GPIO5 and GPIO6 are used for 1.8V I2S_CLK and I2S_DAT inputs
  • LED illuminates when the modem is enumerated in Linux
  • DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
  • CONFIG[0..3]=0011
  • dual-sim support

Modem Details:

  • USB3.0 1bc7:1060
    • drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
      root@noble-venice:~# dmesg | egrep GSM\|wdm
      [   19.499182] usbcore: registered new interface driver cdc_wdm
      [   19.507831] usbserial: USB Serial support registered for GSM modem (1-port)
      [   19.508079] option 2-1:1.0: GSM modem (1-port) converter detected
      [   19.508409] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
      [   19.508719] option 2-1:1.3: GSM modem (1-port) converter detected
      [   19.509063] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
      [   19.509255] option 2-1:1.4: GSM modem (1-port) converter detected
      [   19.509574] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2
      [   19.509774] option 2-1:1.5: GSM modem (1-port) converter detected
      [   19.510059] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3
      [   19.510208] option 2-1:1.6: GSM modem (1-port) converter detected
      [   19.510417] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB4
      [   19.528989] qmi_wwan 2-1:1.2: cdc-wdm0: USB WDM device
      
    • modemmanager:
      root@noble-venice:~# mmcli --version
      mmcli 1.23.4
      Copyright (2011 - 2023) Aleksander Morgado
      License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
      This is free software: you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.
      root@noble-venice:~# mmcli -m 0
        ----------------------------------
        General  |                   path: /org/freedesktop/ModemManager1/Modem/0
                 |              device id: e58cc432de177ace69c862b52587b449f1954cbc
        ----------------------------------
        Hardware |           manufacturer: Telit
                 |                  model: LN920A12-WW
                 |      firmware revision: M0L.000002
                 |         carrier config: default
                 |           h/w revision: 1.10
                 |              supported: gsm-umts, lte
                 |                current: gsm-umts, lte
                 |           equipment id: 354175753093121
        ----------------------------------
        System   |                 device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |                physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
                 |                drivers: option, qmi_wwan
                 |                 plugin: telit
                 |           primary port: cdc-wdm0
                 |                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (gps), 
                 |                         ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net)
        ----------------------------------
        Status   |                   lock: sim-pin2
                 |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
                 |                  state: disabled
                 |            power state: on
        ----------------------------------
        Modes    |              supported: allowed: 3g; preferred: none
                 |                         allowed: 4g; preferred: none
                 |                         allowed: 3g, 4g; preferred: 4g
                 |                         allowed: 3g, 4g; preferred: 3g
                 |                current: allowed: 3g, 4g; preferred: 4g
        ----------------------------------
        Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
                 |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, 
                 |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, 
                 |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, 
                 |                         eutran-29, eutran-30, eutran-38, eutran-39, eutran-40, eutran-41, 
                 |                         eutran-42, eutran-43, eutran-48, eutran-66, eutran-71, utran-19
                 |                current: utran-1, utran-4, utran-5, utran-8, utran-9, utran-2, 
                 |                         eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, 
                 |                         eutran-12, eutran-13, eutran-14, eutran-17, eutran-18, eutran-19, 
                 |                         eutran-20, eutran-25, eutran-26, eutran-28, eutran-29, eutran-30, 
                 |                         eutran-38, eutran-39, eutran-40, eutran-41, eutran-42, eutran-43, 
                 |                         eutran-48, eutran-66, eutran-71, utran-19
        ----------------------------------
        IP       |              supported: ipv4, ipv6, ipv4v6
        ----------------------------------
        3GPP     |                   imei: 354175753093121
                 |          enabled locks: fixed-dialing
        ----------------------------------
        3GPP EPS |   ue mode of operation: csps-2
                 | initial bearer ip type: ipv4v6
        ----------------------------------
        SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
                 |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
                 |                         slot 2: /org/freedesktop/ModemManager1/SIM/1
      
Note: See TracWiki for help on using the wiki.