[[PageOutline]] = 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 A-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, 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 || COEX1^^^1^^^ || 44 || || 45 || GND || COEX2^^^1^^^ || 46 || || 47 || PCIE_CKP || COEX3^^^1^^^^ || 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 {{{#!bash [ 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: * [https://www.ezurio.com/documentation/product-brief-sterling-lwb5 Product-Brief-Sterling-LWB5-M2] * [https://www.ezurio.com/documentation/datasheet-sterling-lwb5-m2 Datasheet-Sterling-LWB5-M2] 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: {{{#!bash &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 {{{#!bash # 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: * https://www.silextechnology.com/connectivity-solutions/embedded-wireless/sx-sdmax * https://www.silextechnology.com/productspecs/sx-sdmax-product-specification 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 {{{#!bash # 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) {{{#!bash # 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) {{{#!bash # 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) {{{#!bash # 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: {{{#!bash /* 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 {{{#!bash # 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) {{{#!bash # 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: {{{#!bash # 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: {{{#!bash # 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: {{{#!bash /* 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: * [https://content.u-blox.com/sites/default/files/documents/M2-JODY-W3_DataSheet_UBX-21000485.pdf M2-JODY-W3_DataSheet_UBX-21000485.pdf] * [https://content.u-blox.com/sites/default/files/documents/JODY-W3_DataSheet_UBX-19010615.pdf JODY-W3 Series DataSheet_UBX-19010615.pdf] * [https://content.u-blox.com/sites/default/files/JODY-W2_JODY-W3-Linux_Bluetooth-Audio_AppNote_UBX-20029333.pdf JODY-W2_JODY-W3-Linux_Bluetooth-Audio_AppNote_UBX-20029333.pdf] 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 [https://content.u-blox.com/sites/default/files/documents/M2-JODY-W3_DataSheet_UBX-21000485.pdf 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) {{{#!bash # 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: {{{#!bash # 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: {{{#!bash /* 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: - https://www.azurewave.com/img/nxp/AW-CM276MA-SUR_DS_B4_C_STD.pdf !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 {{{#!bash [   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: {{{#!bash /* 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: * https://www.qualcomm.com/products/technology/wi-fi/qca206x * Silex recommends using Qualcomm's LEA driver with their patches (requires license agreement with Silex) 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: {{{#!bash # 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: {{{#!bash 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_RST^^^3^^^ || 30 || || 31 || USB_RXP || SIM1_CLK^^^3^^^ || 32 || || 33 || GND || SIM1_DAT^^^3^^^ || 34 || || 35 || USB_TXN || SIM1_PWR^^^3^^^ || 36 || || 37 || USB_TXP || NC || 38 || || 39 || GND || SIM2_DET^^^3^^^ || 40 || || 41 || PCIE_RXN || SIM2_DAT^^^3^^^ || 42 || || 43 || PCIE_RXP || SIM2_CLK^^^3^^^ || 44 || || 45 || GND || SIM2_RST^^^3^^^ || 46 || || 47 || PCIE_TXN || SIM2_PWR^^^3^^^ || 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 || COEX3^^^1^^^ || 60 || || 61 || NC || COEX2^^^1^^^ || 62 || || 63 || NC || COEX1^^^1^^^ || 64 || || 65 || NC || SIM1_DET^^^3^^^ || 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 - OD: DIP[1]=on DIP[2]=don't-care - @1.8V: DIP[1]=off DIP[2]=on - @3.3V: DIP[1]=off DIP[2]=off * CRDPWROFF#: output level is fsa_crdpwroff# gpio - OD: DIP[3]=on DIP[4]=don't-care - @1.8V: DIP[3]=off DIP[4]=on - @3.3V: DIP[3]=off DIP[4]=off * RESET#: output level is fsa_reset# gpio - OD: DIP[5]=on DIP[6]=don't-care - @1.8V: DIP[5]=off DIP[6]=on - @3.3V: DIP[5]=off DIP[6]=off * W_DISABLE2#: output level is fsa_wdisable1# gpio - OD: DIP[7]=on DIP[8]=don't-care - @1.8V: DIP[7]=off DIP[8]=on - @3.3V: DIP[7]=off DIP[8]=off * 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@compex.com.sg) * driver: {{{#!bash 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 {{{#!bash 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 {{{#!bash 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: {{{#!bash 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 {{{#!bash 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: {{{#!bash root@noble-venice:~# mmcli --version mmcli 1.23.4 Copyright (2011 - 2023) Aleksander Morgado License GPLv2+: GNU GPL version 2 or later 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) {{{#!bash 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 {{{#!bash [ 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: {{{#!bash 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: {{{#!bash 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 {{{#!bash 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: {{{#!bash root@noble-venice:~# mmcli --version mmcli 1.23.4 Copyright (2011 - 2023) Aleksander Morgado License GPLv2+: GNU GPL version 2 or later 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.