wiki:FSA

Version 7 (modified by Ryan Erbstoesser, 3 weeks ago) ( diff )

adjust power enable section

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

The 'FSA Header' on the VeniceFLEX SBC can connect to several different adapters, including the following:

  • GW16FE0 - FSA to M.2 E Key (WiFi)
  • GW16FB0 - FSA to M.2 B Key (Modems)
  • GW16FM0 - FSA to M.2 M Key (NVME)
  • GW16FP0 - FSA to Mini-PCIe (WiFi / Cellular / Etc)

These adapters and various radios are detailed below.

GW82xx Baseboard

The GW82xx has two FSA sockets:

  • FSA1 (J29): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), SPI, GPIO (3x), 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

Power Enable

Power enable allows the power to be completely cut from the Mini-PCIe or M.2 card from a Linux GPIO. This can be useful for resets or power saving.

To toggle the gpio, use the gpioinfo command from the Linux command line to see the assigned GPIO. For more GPIO instructions, read gpio

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: qca2066 hw2.1
    [    8.703674] mhi mhi0: Loaded FW: ath11k/QCA2066/hw2.1/amss.bin, sha256: 8f10357b53b40238333f0b055b4829fc8dd87994aa2476ae3fa92234d8f31065
    [    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.438310] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/QCA2066/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd23c92c730241139779d55b9b2f25cce3
    [    9.442371] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/QCA2066/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd23c92c730241139779d55b9b2f25cce3
    [    9.445073] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/QCA2066/hw2.1/regdb.bin, sha256: 0c8ae0f1224c240ba41df6407492d6f7b612d761c01391e969fbdec4c443d889
    [    9.457116] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/QCA2066/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd23c92c730241139779d55b9b2f25cce3
    [    9.488994] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/QCA2066/hw2.1/m3.bin, sha256: 9b9b226abf8ce0e005209e53c0c9a4443abaf7b3def7fefe7e5c5676255c7bdc
    [    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
      

GW16FM0 FSA to M.2 M-Key Adapter

This adapter allows M.2 M-Key cards to be plugged into a VeniceFLEX SBC.

This is primarily focused around NVMe storage drives that run over PCIe.

GW16FP0 FSA to Mini-PCIe Adapter

This adapter allows standard Mini-PCIe wireless cards and modems to be plugged into a VeniceFLEX SBC.

This adapter exposes a Mini-PCIe slot that adheres to the generic Mini-PCIe specification, primarily with PCIe and USB signals.

Note: See TracWiki for help on using the wiki.