Changes between Initial Version and Version 1 of FSA


Ignore:
Timestamp:
12/12/2024 12:03:29 AM (10 days ago)
Author:
Tim Harvey
Comment:

initial page

Legend:

Unmodified
Added
Removed
Modified
  • FSA

    v1 v1  
     1[[PageOutline]]
     2
     3= Flexible Socket Architecture (FSA)
     4
     5Flexible Socket Architecture is a custom connector form-factor present on the Gateworks 'Venice-Flex' product line currently consisting of the following boards:
     6 * GW82xx
     7
     8The goal of the FSA socket is to bridge the gap between the various socket formats:
     9 * MiniPCIe
     10 * M.2 E-Key
     11 * M.2 B-Key
     12 * M.2 M-Key
     13
     14== GW82xx Baseboard
     15The GW82xx has two FSA sockets:
     16 * FSA1 (J29): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), SPI, Power Enable
     17 * FSA2 (J30): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), PCM, UART (4-wire), SPI, SDIO (1.8V), GPIO (3x), Power Enable
     18
     19
     20== GW16FE0 FSA M.2 E-Key Adapter
     21The GW16FE0 E-Key Adapter provides an M.2 E-Key socket with the following:
     22 * I2C (1.8V CLK/SDA/ALERT#)
     23 * USB2.0
     24 * PCIE3.0 (with PERST# 3.3V)
     25 * PCM (1.8V)
     26 * UART (1.8V 4-wire)
     27 * SPI (1.8V 1 chip-select)
     28 * GPIO1 (W_DISALBE1# 3.3V)
     29 * GPIO2 (W_DISABLE2# 3.3V)
     30 * GPIO4 (ALERT# 1.8V)
     31 * LED1# (OD Yellow)
     32 * LED2# (OD Yellow)
     33 * Power Enable (baseboard GPIO)
     34
     35Pinout (from baseboard perspective):
     36||= pin =||= signal           =||= signal    =||= pin =||
     37||  1    || GND                || 3.3V        || 2     ||
     38||  3    || USB_DP             || 3.3V        || 4     ||
     39||  5    || USB_DN             || LED1#(OD)   || 6     ||
     40||  7    || GND                || PCM_CLK(I/O)(1.8V)   || 8     ||
     41||  9    || SDIO_CLK(O)(1.8V)  || PCM_SYNC(I/O)(1.8V)  || 10    ||
     42||  11   || SDIO_CMD(O)(1.8V)  || PCM_IN(I)(1.8V)      || 12    ||
     43||  13   || SDIO_D0(O)(1.8V)   || PCM_OUT(O)(1.8V)     || 14    ||
     44||  15   || SDIO_D1(O)(1.8V)   || LED2#(OD)          || 16    ||
     45||  17   || SDIO_D2(O)(1.8V)   || GND                || 18    ||
     46||  19   || SDIO_D3(O)(1.8V)   || NC                 || 20    ||
     47||  21   || NC                 || UART_RXD(I)(1.8V)  || 22    ||
     48||  23   || SDIO_RST#(O)(1.8V) || KEY                || 24    ||
     49||  25   || KEY                || KEY                || 26    ||
     50||  27   || KEY                || KEY                || 28    ||
     51||  29   || KEY                || KEY                || 30    ||
     52||  31   || KEY                || UART_TXD(O)(1.8V)  || 32    ||
     53||  33   || GND                || UART_CTS(I)(1.8V)  || 34    ||
     54||  35   || PCIE_TXP           || UART_RTS(O)(1.8V)  || 36    ||
     55||  37   || PCIE_TXN           || SPI_MOSI(O)(1.8V)^^^2^^^ || 38    ||
     56||  39   || GND                || SPI_MISO(I)(1.8V)^^^2^^^ || 40    ||
     57||  41   || PCIE_RXP           || SPI_CLK(O)(1.8V)^^^2^^^  || 42    ||
     58||  43   || PCIE_RXN           || COEX1^^^1^^^       || 44    ||
     59||  45   || GND                || COEX2^^^1^^^       || 46    ||
     60||  47   || PCIE_CKP           || COEX3^^^1^^^^      || 48    ||
     61||  49   || PCIE_CKN           || NC                 || 50    ||
     62||  51   || GND                || PERST#(O)(3.3V)    || 52    ||
     63||  53   || NC                 || W_DISABLE2(O)(3.3V)|| 54    ||
     64||  55   || NC                 || W_DISABLE1(O)(3.3V)|| 56    ||
     65||  57   || GND                || I2C_SDA(I/O)(1.8V) || 58    ||
     66||  59   || NC                 || I2C_CLK(O)(1.8V)   || 60    ||
     67||  61   || NC                 || ALERT#(I)(1.8V)    || 62    ||
     68||  63   || GND                || SPI_SS0(O)(1.8V)^^^2^^^ || 64    ||
     69||  65   || NC                 || NC                 || 66    ||
     70||  67   || NC                 || NC                 || 68    ||
     71||  69   || GND                || NC                 || 70    ||
     72||  71   || NC                 || 3.3V               || 72    ||
     73||  73   || NC                 || 3.3V               || 74    ||
     74||  75   || GND                ||                    ||     ||
     75 1. The COEX[1..3] signals are ganged to each FSA socket on the baseboard
     76 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.
     77
     78
     79=== Card: Intel 9260 M.2 E-Key WiFi5 (802.11ac) / BT5.1
     80The Intel 9260 M.2 E-Key combo card uses PCI for !WiFi and USB2.0 for Bluetooth
     81
     82Pin Details:
     83 * W_DISABLE1# WLAN_EN (drive high to enable !WiFi RF; low to disable)
     84 * W_DISABLE2# BT_EN (drive high to enable USB/BT)
     85
     86!WiFi details:
     87 * WiFi5 802.11ac
     88 * PCIe 0x8086:0x2526
     89 * supported by iwlwifi; drivers/net/wireless/intel/iwlwifi CONFIG_IWLWIFI
     90 * registers 6 MSI interrupts
     91 * Example usage:
     92  - driver
     93{{{#!bash
     94[    8.222036] iwlwifi 0000:07:00.0: enabling device (0000 -> 0002)
     95[    8.287908] iwlwifi 0000:07:00.0: Detected crf-id 0x2816, cnv-id 0x1000200 wfpm id 0x80000000
     96[    8.287937] iwlwifi 0000:07:00.0: PCI dev 2526/0014, rev=0x321, rfid=0x105110
     97[    8.288081] iwlwifi 0000:07:00.0: _request_firmware iwlwifi-9260-th-b0-jf-b0-46.ucode
     98[    8.308533] iwlwifi 0000:07:00.0: Loaded FW: iwlwifi-9260-th-b0-jf-b0-46.ucode, sha256: 05f4c12514fddfd56fea660b3d2eb6b6e6f
     994a87a324d5d40464050312ddca911
     100[    8.308682] iwlwifi 0000:07:00.0: WRT: Overriding region id 0
     101[    8.308693] iwlwifi 0000:07:00.0: WRT: Overriding region id 1
     102[    8.308701] iwlwifi 0000:07:00.0: WRT: Overriding region id 2
     103[    8.308706] iwlwifi 0000:07:00.0: WRT: Overriding region id 3
     104[    8.308711] iwlwifi 0000:07:00.0: WRT: Overriding region id 4
     105[    8.308717] iwlwifi 0000:07:00.0: WRT: Overriding region id 6
     106[    8.308722] iwlwifi 0000:07:00.0: WRT: Overriding region id 8
     107[    8.308728] iwlwifi 0000:07:00.0: WRT: Overriding region id 9
     108[    8.308733] iwlwifi 0000:07:00.0: WRT: Overriding region id 10
     109[    8.308738] iwlwifi 0000:07:00.0: WRT: Overriding region id 11
     110[    8.308744] iwlwifi 0000:07:00.0: WRT: Overriding region id 15
     111[    8.308750] iwlwifi 0000:07:00.0: WRT: Overriding region id 16
     112[    8.308755] iwlwifi 0000:07:00.0: WRT: Overriding region id 18
     113[    8.308761] iwlwifi 0000:07:00.0: WRT: Overriding region id 19
     114[    8.308766] iwlwifi 0000:07:00.0: WRT: Overriding region id 20
     115[    8.308772] iwlwifi 0000:07:00.0: WRT: Overriding region id 21
     116[    8.308778] iwlwifi 0000:07:00.0: WRT: Overriding region id 28
     117[    8.309979] iwlwifi 0000:07:00.0: _request_firmware iwl-debug-yoyo.bin
     118[    8.310663] iwlwifi 0000:07:00.0: loaded firmware version 46.7e3e4b69.0 9260-th-b0-jf-b0-46.ucode op_mode iwlmvm
     119[    8.732849] iwlwifi 0000:07:00.0: Detected Intel(R) Wireless-AC 9260 160MHz, REV=0x321
     120[    8.890083] iwlwifi 0000:07:00.0: reporting RF_KILL (radio disabled)
     121[    8.945928] iwlwifi 0000:07:00.0: base HW address: d8:3b:bf:ba:5e:a5, OTP minor version: 0x4
     122root@noble-venice:~# ls -l /sys/class/net/wlan0
     123lrwxrwxrwx 1 root root 0 Oct 28 19:49 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
     124.0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0
     125}}}
     126
     127Bluetooth details:
     128 * Bluetooth 5.1
     129 * USB2.0: 0x8087:0x0025 (needs W_DISABLE2# BT_EN asserted high)
     130 * supported by btusb; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB
     131
     132
     133=== Card: LAIRD 453-00048 LWB5+ M.2 E-Key (SDIO/UART) WiFi5 (802.11ac) / BT5.2
     134The 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.
     135
     136See:
     137 * [https://www.ezurio.com/documentation/product-brief-sterling-lwb5 Product-Brief-Sterling-LWB5-M2]
     138 * [https://www.ezurio.com/documentation/datasheet-sterling-lwb5-m2 Datasheet-Sterling-LWB5-M2]
     139
     140Pin Considerations:
     141 * W_DISABLE1# WLAN_EN (needs to be asserted high for !WiFi)
     142 * W_DISABLE2# BT_EN (needs to be asserted high for Bluetooth)
     143
     144A device-tree overlay is required to bind the proper wifi and bluetooth drivers:
     145{{{#!bash
     146&usdhc1 {
     147        wifi@0 {
     148                compatible = "cypress,cyw4373-fmac", "brcm,bcm4329-fmac";
     149                reg = <0>;
     150        };
     151};
     152
     153&uart3 {
     154        bluetooth {
     155                compatible = "brcm,bcm4330-bt";
     156        };
     157};
     158}}}
     159
     160!WiFi Details:
     161 * WiFi5 802.11ac
     162 * SDIO 0x02d0:0x4373 SDR104
     163{{{#!bash
     164# cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device}
     1650x02d0
     1660x4373
     167# dmesg | grep mmc0
     168[    1.012822] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
     169[    1.041288] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1)
     170[    1.048092] mmc_sdio_init_card mmc0 setting voltage to 1.8V
     171[    1.208613] mmc0: new ultra high speed SDR104 SDIO card at address 0001
     172# cat /sys/kernel/debug/mmc0/ios
     173clock: 25000000 Hz
     174actual clock: 25000000 Hz
     175vdd: 21 (3.3 ~ 3.4 V)
     176bus mode: 2 (push-pull)
     177chip select: 0 (don't care)
     178power mode: 2 (on)
     179bus width: 2 (4 bits)
     180timing spec: 6 (sd uhs SDR104)
     181signal voltage: 1 (1.80 V)
     182driver type: 0 (driver type B)
     183}}}
     184 * firmware: https://www.ezurio.com/support/faqs/what-are-all-these-firmware-files-sterling-lwb5
     185  - have to symlink the generic brcmfmac4373-sdio.bin firmware to your board specific firmware? (brcmfmac4373-sdio.gateworks,imx8mp-gw82xx-2x.bin)
     186 * supported by brcmfmac driver; ./drivers/net/wireless/broadcom/brcm80211/brcmfmac CONFIG_BRCMFMAC
     187
     188Bluetooth Details:
     189 * Bluetooth 5.2
     190 * supported by hci_bcm driver; drivers/bluetooth/hci_bcm.c CONFIG_BT_BCM
     191
     192
     193
     194=== Card: Silex SDMAX M.2 E-Key SDIO/UART WiFi6 / BT5.3
     195The 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:
     196 * https://www.silextechnology.com/connectivity-solutions/embedded-wireless/sx-sdmax
     197 * https://www.silextechnology.com/productspecs/sx-sdmax-product-specification
     198
     199Pin Details:
     200 * W_DISABLE1# PDn (drive low to power down)
     201 * W_DISABLE2# BT_RESET (drive low to reset BT)
     202
     203!Wifi details:
     204 * Wifi6 802.11ax
     205 * SDIO 0x0471:0x0204 SDR104
     206{{{#!bash
     207# dmesg | grep mmc0
     208[    1.007858] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
     209[    1.119413] mmc0: new ultra high speed SDR104 SDIO card at address 0001
     210# cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device}
     2110x0471
     2120x0204
     213# cat /sys/kernel/debug/mmc0/ios
     214clock: 25000000 Hz
     215actual clock: 25000000 Hz
     216vdd: 21 (3.3 ~ 3.4 V)
     217bus mode: 2 (push-pull)
     218chip select: 0 (don't care)
     219power mode: 2 (on)
     220bus width: 2 (4 bits)
     221timing spec: 6 (sd uhs SDR104)
     222signal voltage: 1 (1.80 V)
     223driver type: 0 (driver type B)
     224}}}
     225 * supported by the mwifiex driver
     226  - 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)
     227{{{#!bash
     228# get firmware (out-of-tree mwifiex requires a conf file)
     229git clone https://github.com/nxp-imx/imx-firmware.git
     230cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/
     231# build driver
     232git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
     233make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
     234# load driver
     235insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
     236insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
     237[   86.896141] wlan: Loading MWLAN driver
     238[   86.900322] wlan: Register to Bus Driver...
     239[   86.904773] vendor=0x0471 device=0x0205 class=0 function=1
     240[   86.910432] Attach moal handle ops, card interface type: 0x109
     241[   86.916324] rps set to 0 from module param
     242[   86.920471] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf
     243[   86.931066] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: 8ab3a368b9a8b8003de96c94b27847d9cfc6a428248af35b2a9d4e3f53460993
     244[   86.943911] SDIW612: init module param from usr cfg
     245[   86.948864] card_type: SDIW612, config block: 0
     246[   86.953430] cfg80211_wext=0xf
     247[   86.956408] max_vir_bss=1
     248[   86.959099] cal_data_cfg=none
     249[   86.962116] ps_mode = 1
     250[   86.964589] auto_ds = 1
     251[   86.967051] host_mlme=enable
     252[   86.969946] fw_name=nxp/sduart_nw61x_v1.bin.se
     253[   86.974434] SDIO: max_segs=128 max_seg_size=65535
     254[   86.979160] rx_work=1 cpu_num=4
     255[   86.982319] Enable moal_recv_amsdu_packet
     256[   86.986376] Attach mlan adapter operations.card_type is 0x109.
     257[   86.992806] wlan: Enable TX SG mode
     258[   86.996337] wlan: Enable RX SG mode
     259[   87.003840] Request firmware: nxp/sduart_nw61x_v1.bin.se
     260[   87.009193] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se
     261[   87.027218] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b2289e85c24fd
     262[   87.326643] Wlan: FW download over, firmwarelen=1004248 downloaded 916048
     263[   87.731821] WLAN FW is active
     264[   87.734802] on_time is 87519080591
     265[   87.757772] VDLL image: len=88200
     266[   87.761457] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff
     267[   87.767086] uuid: af55156e818b5e64a916b21032b7c73b
     268[   87.771916] max_p2p_conn = 8, max_sta_conn = 16
     269[   87.797069] Register NXP 802.11 Adapter mlan0
     270[   87.801642] wlan: uap%d set max_mtu 2000
     271[   87.807759] Register NXP 802.11 Adapter uap0
     272[   87.823977] Register NXP 802.11 Adapter wfd0
     273[   87.829691] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92)
     274[   87.844678] wlan: Register to Bus Driver Done
     275[   87.849116] wlan: Driver loaded successfully
     276root@noble-venice:~# ls /sys/class/net/
     277can0  can1  eth0  eth1  lo  mlan0  uap0  wfd0
     278}}}
     279
     280Bluetooth details:
     281 * Bluetooth 5.3 BR/EDR/LE
     282 * the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/uartspi_n61x_v1.bin.se) for bluetooth operation
     283 * supported by hciuart driver; drivers/bluetooth/hci_* CONFIG_BT_HCIUART* (must start at 115200bd then can switch to 3000000bd using hci vendor command)
     284{{{#!bash
     285# start out at 115200 bd
     286root@noble-venice:~# hciattach /dev/ttymxc2 any 115200 flow
     287[  319.957921] Bluetooth: Core ver 2.22
     288[  319.961601] NET: Registered PF_BLUETOOTH protocol family
     289[  319.966938] Bluetooth: HCI device and connection manager initialized
     290[  319.973321] Bluetooth: HCI socket layer initialized
     291[  319.978216] Bluetooth: L2CAP socket layer initialized
     292[  319.983296] Bluetooth: SCO socket layer initialized
     293[  320.034524] Bluetooth: HCI UART driver ver 2.3
     294[  320.039019] Bluetooth: HCI UART protocol H4 registered
     295[  320.044176] Bluetooth: HCI UART protocol BCSP registered
     296[  320.049592] Bluetooth: HCI UART protocol LL registered
     297[  320.054756] Bluetooth: HCI UART protocol ATH3K registered
     298[  320.060276] Bluetooth: HCI UART protocol Three-wire (H5) registered
     299[  320.066807] Bluetooth: HCI UART protocol Intel registered
     300[  320.072441] Bluetooth: HCI UART protocol Broadcom registered
     301[  320.078188] Bluetooth: HCI UART protocol QCA registered
     302[  320.083442] Bluetooth: HCI UART protocol AG6XX registered
     303[  320.088905] Bluetooth: HCI UART protocol Marvell registered
     304Device setup complete
     305[  320.310779] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
     306[  320.316127] Bluetooth: BNEP filters: protocol multicast
     307[  320.321436] Bluetooth: BNEP socket layer initialized
     308[  320.332546] Bluetooth: MGMT ver 1.22
     309root@noble-venice:~# hciconfig
     310hci0:   Type: Primary  Bus: UART
     311        BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
     312        UP RUNNING
     313        RX bytes:860 acl:0 sco:0 events:60 errors:0
     314        TX bytes:2780 acl:0 sco:0 commands:60 errors:0
     315
     316root@noble-venice:~# hciconfig hci0 up
     317root@noble-venice:~# hciconfig hci0
     318hci0:   Type: Primary  Bus: UART
     319        BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
     320        UP RUNNING
     321        RX bytes:860 acl:0 sco:0 events:60 errors:0
     322        TX bytes:2780 acl:0 sco:0 commands:60 errors:0
     323
     324root@noble-venice:~# hcitool -i hci0 scan
     325Scanning ...
     326Scanning ...
     327        0C:C4:13:19:C4:64       Pixel 6
     328
     329# now lets switch to 3mbd
     330root@noble-venice:~# hcitool -i hci0 cmd 0x3f 0x0009 0xc0 0xc6 0x2d 0x00
     331< HCI Command: ogf 0x3f, ocf 0x0009, plen 4
     332  C0 C6 2D 00
     333> HCI Event: 0x0e plen 4
     334  01 09 FC 00
     335root@noble-venice:~# killall hciattach
     336[  392.862476] Bluetooth: hci0: sending frame failed (-49)
     337[  392.867770] Bluetooth: hci0: Opcode 0x0c03 failed: -49
     338
     339root@noble-venice:~# hciattach /dev/ttymxc2 any -s 3000000 3000000 flow
     340Device setup complete
     341[  399.083288] Bluetooth: MGMT ver 1.22
     342hciconfig hci0 up
     343root@noble-venice:~# hciconfig hci0
     344hci0:   Type: Primary  Bus: UART
     345        BD Address: 1C:BC:EC:13:D0:25  ACL MTU: 1021:7  SCO MTU: 120:6
     346        UP RUNNING
     347        RX bytes:825 acl:0 sco:0 events:55 errors:0
     348        TX bytes:1795 acl:0 sco:0 commands:55 errors:0
     349
     350root@noble-venice:~# hcitool -i hci0 scan
     351Scanning ...
     352        0C:C4:13:19:C4:64       Pixel 6
     353}}}
     354 * 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)
     355{{{#!bash
     356# modprobe btnxpuart
     357[  137.086491] Bluetooth: Core ver 2.22
     358[  137.090174] NET: Registered PF_BLUETOOTH protocol family
     359[  137.095519] Bluetooth: HCI device and connection manager initialized
     360[  137.101909] Bluetooth: HCI socket layer initialized
     361[  137.106805] Bluetooth: L2CAP socket layer initialized
     362[  137.111891] Bluetooth: SCO socket layer initialized
     363[  137.337842] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
     364[  137.343186] Bluetooth: BNEP filters: protocol multicast
     365[  137.348445] Bluetooth: BNEP socket layer initialized
     366[  137.348448] Bluetooth: MGMT ver 1.22^^^ works
     367# hciconfig hci0 up && hcitool -i hci0 scan
     368}}}
     369  - 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
     370  - btnxpuart initial baudrate must be 115200bd until firmware is loaded at which point it will automatically switch to 3000000bd
     371  - btnxpuart requires a device-tree node (see below)
     372
     373device-tree for GW8201-A+GW7020+GW16FE0-A revision:
     374{{{#!bash
     375/* FSA1 */
     376&uart3 {
     377        pinctrl-names = "default";
     378        pinctrl-0 = <&pinctrl_uart3>;
     379        /* reparent clock for up to 4mbd support */
     380        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
     381        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
     382        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
     383        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
     384        status = "okay";
     385
     386        /* if using btnxpuart this is needed; if hci_uart do not define this */
     387        bluetooth {
     388                compatible = "nxp,88w8987-bt";
     389                fw-init-baudrate = <115200>; /* Note this is the default if the prop is omitted */
     390        };
     391};
     392
     393&iomuxc {
     394        pinctrl_uart3: uart3grp {
     395                fsl,pins = <
     396                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
     397                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
     398                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
     399                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
     400                >;
     401        };
     402};
     403}}}
     404
     405
     406=== Card: ublox MAYA-W2 M.2 E-Key SDIO/UART/PCM/SPI tri-radio WiFi6 / BT5.4 / 802.15.4 combo
     407The 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.
     408
     409See also:
     410 * MAYA-W2_SIM_UBX-22011459.pdf
     411
     412Pin details:
     413 * W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
     414 * W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
     415 * LED1/LED2 unused
     416
     417!WiFi details:
     418 * WiFi6 802.11ax dual-band
     419 * SDIO 0x471:0x0204
     420{{{#!bash
     421# dmesg | grep mmc0
     422[    1.007660] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA
     423[    1.034751] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1)
     424[    1.044515] mmc_sdio_init_card mmc0 setting voltage to 1.8V
     425[    1.193261] mmc0: new ultra high speed SDR104 SDIO card at address 0001
     426# cat /sys/bus/mmc/devices/mmc0:0001/{vendor,device}
     4270x0471
     4280x0204
     429# cat /sys/kernel/debug/mmc0/ios
     430clock:          208000000 Hz
     431vdd:            21 (3.3 ~ 3.4 V)[   55.900039] mlan: module verification failed: signature and/or required key missing - tai
     432nting kernel
     433
     434bus mode:       2 (push-pull)
     435chip select:    0 (don't care)
     436power mode:     2 (on)
     437bus width:      2 (4 bits)
     438timing spec:    6 (sd uhs SDR104)
     439signal voltage: 1 (1.80 V)
     440driver type:    0 (driver type B)
     441}}}
     442 * supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
     443{{{#!bash
     444# get firmware (out-of-tree mwifiex requires a conf file)
     445git clone https://github.com/nxp-imx/imx-firmware.git
     446cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/
     447# build driver
     448git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
     449make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
     450# load driver
     451insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
     452insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
     453[  146.092851] wlan: Loading MWLAN driver
     454[  146.096939] wlan: Register to Bus Driver...
     455[  146.101327] vendor=0x0471 device=0x0205 class=0 function=1
     456[  146.107030] Attach moal handle ops, card interface type: 0x109
     457[  146.112890] rps set to 0 from module param
     458[  146.117032] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf
     459[  146.124214] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: f846d679de6e3c32db51cb28df05fac588018d34073e19a255ab45901c9
     4604f6e7
     461[  146.137040] SDIW612: init module param from usr cfg
     462[  146.141937] card_type: SDIW612, config block: 0
     463[  146.146486] cfg80211_wext=0xf
     464[  146.149462] max_vir_bss=1
     465[  146.152100] cal_data_cfg=none
     466[  146.155097] ps_mode = 1
     467[  146.157552] auto_ds = 1
     468[  146.160025] host_mlme=enable
     469[  146.162928] fw_name=nxp/sduart_nw61x_v1.bin.se
     470[  146.167415] SDIO: max_segs=128 max_seg_size=65535
     471[  146.172144] rx_work=1 cpu_num=4
     472[  146.175307] Enable moal_recv_amsdu_packet
     473[  146.179358] Attach mlan adapter operations.card_type is 0x109.
     474[  146.185634] wlan: Enable TX SG mode
     475[  146.189150] wlan: Enable RX SG mode
     476[  146.194044] Request firmware: nxp/sduart_nw61x_v1.bin.se
     477[  146.199379] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se
     478[  146.218147] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b228
     4799e85c24fd
     480[  146.522473] Wlan: FW download over, firmwarelen=1004248 downloaded 916048
     481[  146.926002] WLAN FW is active
     482[  146.928984] on_time is 146755067377
     483[  146.953100] VDLL image: len=88200
     484[  146.956808] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff
     485[  146.962416] uuid: a559bd0eabc155d9a2ebd1624c432f5c
     486[  146.967245] max_p2p_conn = 8, max_sta_conn = 16
     487[  146.993650] Register NXP 802.11 Adapter mlan0
     488[  146.998191] wlan: uap%d set max_mtu 2000
     489[  147.004930] Register NXP 802.11 Adapter uap0
     490[  147.017128] Register NXP 802.11 Adapter wfd0
     491[  147.024401] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92)
     492[  147.037465] wlan: Register to Bus Driver Done
     493[  147.041938] wlan: Driver loaded successfully
     494}}}
     495  * see MAYA-W2_SIM_UBX-22011459.pdf for details
     496  * uartspi_n61x_v1.bin.se is the wifi standalone firmware for download via wifi driver
     497  * sduart_nw61x_v1.bin.se is the combo firmware for wifi/bt downloaded via wifi driver
     498
     499Bluetooth details:
     500 * Bluetooth 5.4 BLE/LE
     501 * 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)
     502 * supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
     503{{{#!bash
     504# modprobe btnxpuart
     505[  147.136762] Bluetooth: Core ver 2.22
     506[  147.140455] NET: Registered PF_BLUETOOTH protocol family
     507[  147.145863] Bluetooth: HCI device and connection manager initialized
     508[  147.152449] Bluetooth: HCI socket layer initialized
     509[  147.157415] Bluetooth: L2CAP socket layer initialized
     510[  147.162537] Bluetooth: SCO socket layer initialized
     511[  147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
     512[  147.353949] Bluetooth: BNEP filters: protocol multicast
     513[  147.359207] Bluetooth: BNEP socket layer initialized
     514[  148.324754] Bluetooth: MGMT ver 1.22
     515# hciconfig hci0 up && hcitool -i hci0 scan
     516hci0:   Type: Primary  Bus: UART
     517        BD Address: 6C:1D:EB:9B:D6:0C  ACL MTU: 1021:7  SCO MTU: 120:6
     518        UP RUNNING
     519        RX bytes:860 acl:0 sco:0 events:60 errors:0
     520        TX bytes:2295 acl:0 sco:0 commands:60 errors:0
     521
     522Scanning ...
     523        28:39:5E:5B:0B:BF       n/a
     524}}}
     525
     526Thread details:
     527 * spidev using Open Thread Border Router which is part of the NXP Matter implementation
     528 * 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):
     529 * openthread:
     530{{{#!bash
     531# install build tools
     532apt update
     533apt install -y build-essential git
     534# clone repo
     535git clone https://github.com/openthread/openthread
     536cd openthread
     537# build the spi-hdlc-adapter tool
     538gcc tools/spi-hdlc-adapter/spi-hdlc-adapter.c -o spi-hdlc-adapter
     539./spi-hdlc-adapter -v /dev/spidev1.2
     540# FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST
     541# FSA1_ALERT (GPIO4_4) is SPI_INT
     542echo 120 > /sys/class/gpio/export
     543echo 100 > /sys/class/gpio/export
     544./spi-hdlc-adapter --gpio-res=/sys/class/gpio/gpio120 --gpio-int=/sys/class/gpio/gpio100 --spi-align-allowance=16 -v /dev/spidev1.2
     545Cntl-C
     546echo 120 > /sys/class/gpio/unexport
     547echo 100 > /sys/class/gpio/unexport
     548# build oc-cli
     549apt-get --no-install-recommends install -y g++ lsb-release cmake ninja-build shellcheck
     550# build POSIX CLI
     551./script/cmake-build posix -DOT_POSIX_RCP_SPI_BUS=ON
     552# FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST
     553# FSA1_ALERT (GPIO4_4) is SPI_INT
     554./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'
     555}}}
     556
     557device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
     558{{{#!bash
     559/* Bluetooth */
     560&uart3 {
     561        pinctrl-names = "default";
     562        pinctrl-0 = <&pinctrl_uart3>;
     563        /* reparent clock for up to 4mbd support */
     564        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
     565        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
     566        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
     567        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
     568        status = "okay";
     569        bluetooth {
     570                compatible = "nxp,88w8987-bt";
     571                fw-init-baudrate = <3000000>;
     572        };
     573};
     574
     575/* Thread */
     576&ecspi2 {
     577        /* ublox MAYA in FSA1 (CS2) */
     578        spidev@2 {
     579                reg = <2>;
     580                compatible = "lwn,bk4";
     581                spi-max-frequency = <1000000>;
     582        };
     583}
     584
     585/* I2C port expander */
     586&fsa1_i2c {
     587        gpio@21 {
     588                compatible = "nxp,pcal9554b";
     589                reg = <0x21>;
     590                gpio-controller;
     591                #gpio-cells = <2>;
     592                gpio-line-names =
     593                        "spien", "thread_rst#", "wake_wlan", "wake_btthread",
     594                        "btthread_reset_in", "", "", "", "";
     595
     596                spien_hog {
     597                        gpio-hog;
     598                        output-high;
     599                        gpios = <0 GPIO_ACTIVE_HIGH>;
     600                        line-name = "spien";
     601                };
     602
     603                threadrst_hog {
     604                        gpio-hog;
     605                        output-high;
     606                        gpios = <1 GPIO_ACTIVE_HIGH>;
     607                        line-name = "thread_rst#";
     608                };
     609
     610                wlanwake_hog {
     611                        gpio-hog;
     612                        output-low;
     613                        gpios = <2 GPIO_ACTIVE_HIGH>;
     614                        line-name = "wlan_wake#";
     615                };
     616
     617                threadwake_hog {
     618                        gpio-hog;
     619                        output-low;
     620                        gpios = <3 GPIO_ACTIVE_HIGH>;
     621                        line-name = "thread_wake#";
     622                };
     623
     624                threadrstin_hog {
     625                        gpio-hog;
     626                        input;
     627                        gpios = <4 GPIO_ACTIVE_HIGH>;
     628                        line-name = "threadrstin";
     629                };
     630        };
     631};
     632
     633&iomuxc {
     634        pinctrl_uart3: uart3grp {
     635                fsl,pins = <
     636                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
     637                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
     638                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
     639                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
     640                >;
     641        };
     642};
     643}}}
     644  * note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
     645  * note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer
     646
     647
     648=== Card: ublox JODY M.2 E-Key PCIe/UART/PCM dual-radio WiFi6 / BT 5.3 combo
     649The 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.
     650
     651See also:
     652 * [https://content.u-blox.com/sites/default/files/documents/M2-JODY-W3_DataSheet_UBX-21000485.pdf M2-JODY-W3_DataSheet_UBX-21000485.pdf]
     653 * [https://content.u-blox.com/sites/default/files/documents/JODY-W3_DataSheet_UBX-19010615.pdf JODY-W3 Series DataSheet_UBX-19010615.pdf]
     654 * [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]
     655
     656By 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.
     657
     658Pin details:
     659 * W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
     660 * W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
     661 * LED1/LED2 unused
     662
     663!WiFi details:
     664 * WiFi6 802.11ax dual-band
     665 * PCIe 0x1b4b:0x2b43 (function 1) and 0x1b4b:0x2b44 (function 2)
     666 * supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
     667{{{#!bash
     668# get firmware (out-of-tree mwifiex requires a conf file)
     669git clone https://github.com/nxp-imx/imx-firmware.git
     670cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_9098_PCIE/* /lib/firmware/nxp/
     671# build driver
     672git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0
     673make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src
     674# load driver
     675insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko
     676insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf
     677[   88.049771] wlan: Loading MWLAN driver
     678[   88.053927] wlan: Register to Bus Driver...
     679[   88.058461] PCI memory map Virt0: 00000000a73ddc41 PCI memory map Virt2: 00000000e0878cd5
     680[   88.066707] Attach moal handle ops, card interface type: 0x206
     681[   88.072575] rps set to 0 from module param
     682[   88.078267] PCIE9098: init module param from usr cfg
     683[   88.083316] card_type: PCIE9098, config block: 0
     684[   88.087975] cfg80211_wext=0xf
     685[   88.090980] max_vir_bss=1
     686[   88.093614] cal_data_cfg=none
     687[   88.096610] ps_mode = 1
     688[   88.099084] auto_ds = 1
     689[   88.101543] host_mlme=enable
     690[   88.104450] fw_name=nxp/pcieuart9098_combo_v1.bin
     691[   88.109204] rx_work=1 cpu_num=4
     692[   88.115019] Request firmware: nxp/pcieuart9098_combo_v1.bin
     693[   88.674795] WLAN FW is active
     694[   88.677775] on_time is 88463011256
     695[   88.713355] Register NXP 802.11 Adapter mlan0
     696[   88.718062] wlan: uap%d set max_mtu 2000
     697[   88.726907] Register NXP 802.11 Adapter uap0
     698[   88.750747] Register NXP 802.11 Adapter wfd0
     699[   88.756708] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92)
     700[   88.765023] PCI memory map Virt0: 00000000ea6851b2 PCI memory map Virt2: 00000000e8001719
     701[   88.775806] Attach moal handle ops, card interface type: 0x206
     702[   88.781820] rps set to 0 from module param
     703[   88.791183] PCIE9098: init module param from usr cfg
     704[   88.796258] card_type: PCIE9098, config block: 1
     705[   88.800994] cfg80211_wext=0xf
     706[   88.804003] max_vir_bss=1
     707[   88.808088] cal_data_cfg=none
     708[   88.811100] ps_mode = 1
     709[   88.813553] auto_ds = 1
     710[   88.816070] host_mlme=enable
     711[   88.822850] fw_name=nxp/pcieuart9098_combo_v1.bin
     712[   88.830099] rx_work=1 cpu_num=4
     713[   88.848531] Request firmware: nxp/pcieuart9098_combo_v1.bin
     714[   88.856748] WLAN FW is active
     715[   88.859755] on_time is 88644991126
     716[   88.884288] Register NXP 802.11 Adapter mmlan0
     717[   88.889110] wlan: muap%d set max_mtu 2000
     718[   88.894440] Register NXP 802.11 Adapter muap0
     719[   88.916583] Register NXP 802.11 Adapter mwfd0
     720[   88.921118] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92)
     721[   88.929262] wlan: Register to Bus Driver Done
     722[   88.933703] wlan: Driver loaded successfully
     723root@noble-venice:~# ls /sys/class/net
     724can0  can1  eth0  eth1  lo  mlan0  mmlan0  muap0  mwfd0  uap0  wfd0
     725}}}
     726
     727Bluetooth details:
     728 * Bluetooth 5.3 BR/EDR/LE
     729 * 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)
     730 * supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
     731{{{#!bash
     732# modprobe btnxpuart
     733[  147.136762] Bluetooth: Core ver 2.22
     734[  147.140455] NET: Registered PF_BLUETOOTH protocol family
     735[  147.145863] Bluetooth: HCI device and connection manager initialized
     736[  147.152449] Bluetooth: HCI socket layer initialized
     737[  147.157415] Bluetooth: L2CAP socket layer initialized
     738[  147.162537] Bluetooth: SCO socket layer initialized
     739[  147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
     740[  147.353949] Bluetooth: BNEP filters: protocol multicast
     741[  147.359207] Bluetooth: BNEP socket layer initialized
     742[  148.324754] Bluetooth: MGMT ver 1.22
     743# hciconfig hci0 up && hcitool -i hci0 scan
     744hci0:   Type: Primary  Bus: UART
     745        BD Address: 6C:1D:EB:9B:D6:0C  ACL MTU: 1021:7  SCO MTU: 120:6
     746        UP RUNNING
     747        RX bytes:860 acl:0 sco:0 events:60 errors:0
     748        TX bytes:2295 acl:0 sco:0 commands:60 errors:0
     749
     750Scanning ...
     751        28:39:5E:5B:0B:BF       n/a
     752}}}
     753
     754device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
     755{{{#!bash
     756/* Bluetooth */
     757&uart3 {
     758        pinctrl-names = "default";
     759        pinctrl-0 = <&pinctrl_uart3>;
     760        /* reparent clock for up to 4mbd support */
     761        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
     762        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
     763        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
     764        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
     765        status = "okay";
     766        bluetooth {
     767                compatible = "nxp,88w8987-bt";
     768                fw-init-baudrate = <3000000>;
     769        };
     770};
     771
     772&iomuxc {
     773        pinctrl_uart3: uart3grp {
     774                fsl,pins = <
     775                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
     776                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
     777                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
     778                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
     779                >;
     780        };
     781};
     782}}}
     783  * note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
     784  * note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer
     785
     786
     787=== Card: !AzureWave AW-CM276MA M.2 E-Key PCIE-UART WiFi5 / BT 5.3 combo
     788The AzureWave AW-CM276MA Wifi5+BT5.3 M.2 E-Key combo radio based on the NXP 88W8997 chipset uses PCIe and UART for BT:
     789 - https://www.azurewave.com/img/nxp/AW-CM276MA-SUR_DS_B4_C_STD.pdf
     790
     791!WiFi details:
     792 * WiFi5 802.11ac
     793 * PCIe: 0x1b4b:0x2b42
     794 * supported by in-kernel 6.6 mwifiex driver (loads mrvl/pcieuart8997_combo_v4.bin combo firmware reuqired for pcie/bluetooth)
     795 * supported by out-of-tree mwifiex driver as well with firmware nxp/pcieuart8997_combo_v4.bin from imx-firmware
     796{{{#!bash
     797[   32.919130] wlan: Loading MWLAN driver
     798[   32.923299] wlan: Register to Bus Driver...
     799[   32.927735] wlan_pcie 0000:03:00.0: enabling device (0000 -> 0002)[   32.934062] PCI memory map Virt0: 0000000078035496 PCI memory map Virt2: 00000000dc1c2bc9
     800[   32.942283] Attach moal handle ops, card interface type: 0x204
     801[   32.948144] rps set to 0 from module param
     802[   32.952266] wlan_pcie 0000:03:00.0: _request_firmware nxp/wifi_mod_awcm276ma.conf
     803[   32.963086] wlan_pcie 0000:03:00.0: Loaded FW: nxp/wifi_mod_awcm276ma.conf, sha256: b6e2dbc1bdfdc60ceda5674c7a95425ce9056328af3ab9ec6b1f0
     804c02d916a71d
     805[   32.976426] PCIE8997: init module param from usr cfg
     806[   32.981414] card_type: PCIE8997, config block: 0
     807[   32.986057] cfg80211_wext=0xf
     808[   32.989046] max_vir_bss=1
     809[   32.991696] cal_data_cfg=none
     810[   32.994691] ps_mode = 1
     811[   32.997144] auto_ds = 1
     812[   32.999613] host_mlme=enable
     813[   33.002515] fw_name=nxp/pcieuart8997_combo_v4.bin
     814[   33.007263] rx_work=1 cpu_num=4
     815[   33.010430] Enable moal_recv_amsdu_packet
     816[   33.014487] Attach mlan adapter operations.card_type is 0x204.
     817[   33.022569] Request firmware: nxp/pcieuart8997_combo_v4.bin
     818[   33.028166] wlan_pcie 0000:03:00.0: _request_firmware nxp/pcieuart8997_combo_v4.bin
     819[   33.043994] wlan_pcie 0000:03:00.0: Loaded FW: nxp/pcieuart8997_combo_v4.bin, sha256: 5d08062fe8dd7d2b7f3e26646cfb42288f0de111fc70c86a03f
     820bafbc37050b9f
     821[   33.661253] FW download over, size 621276 bytes
     822[   34.382556] WLAN FW is active
     823[   34.385539] on_time is 34479014993
     824[   34.431874] VDLL image: len=8652
     825[   34.435158] FW country code WW does not match with US
     826[   34.440399] fw_cap_info=0x587c6fa3, dev_cap_mask=0xffffffff
     827[   34.446025] max_p2p_conn = 8, max_sta_conn = 8
     828[   34.474292] Register NXP 802.11 Adapter mlan0
     829[   34.478819] wlan: uap%d set max_mtu 2000
     830[   34.484964] Register NXP 802.11 Adapter uap0
     831[   34.496213] Register NXP 802.11 Adapter wfd0
     832[   34.500799] wlan: version = PCIE8997--16.92.21.p119.2-MM6X16437.p3-GPL-(FP92)
     833[   34.508656] wlan: Register to Bus Driver Done
     834[   34.513081] wlan: Driver loaded successfully
     835}}}
     836
     837Bluetooth details:
     838 * Bluetooth 5.3
     839 * 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)
     840 * supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART
     841
     842device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
     843{{{#!bash
     844/* Bluetooth */
     845&uart3 {
     846        pinctrl-names = "default";
     847        pinctrl-0 = <&pinctrl_uart3>;
     848        /* reparent clock for up to 4mbd support */
     849        assigned-clocks = <&clk IMX8MP_CLK_UART3>;
     850        assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
     851        cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
     852        rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
     853        status = "okay";
     854        bluetooth {
     855                compatible = "nxp,88w8987-bt";
     856        };
     857};
     858
     859&iomuxc {
     860        pinctrl_uart3: uart3grp {
     861                fsl,pins = <
     862                        MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x140
     863                        MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x140
     864                        MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08    0x140 /* cts */
     865                        MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09     0x140 /* rts */
     866                >;
     867        };
     868};
     869}}}
     870  * no fw-init-baudrate = <300000> (not sure why I had to drop this low)
     871
     872
     873=== Card: Silex SX-PCEAX PCI/USB WiFi6E / BT 5.2 combo card
     874The Silex SX-PCEAX combo card uses the QCA2066 chipset with PCI for wifi and USB for bluetooth:
     875 * https://www.qualcomm.com/products/technology/wi-fi/qca206x
     876 * Silex recommends using Qualcomm's LEA driver with their patches (requires license agreement with Silex)
     877
     878Pin Details:
     879 * M2.54 W_DISABLE2# input; BT_EN active high to enable USB/bluetooth
     880 * M2.56 W_DISABLE1# N/C (datasheet rev AX Sept 2022 shows this as not used)
     881 * M2.6 LED1# N/C (datasheet rev AX Sept 2022 shows this as not used)
     882 * M2.16 LED2# N/C (datasheet rev AX Sept 2022 shows this as not used)
     883
     884!WiFi details:
     885 * Wifi6E 802.11ax
     886 * PCIe 3.0 0x17cb:0x1103
     887 * supported by the ath11k driver but needs a board-2.bin and regdb from Silex:
     888{{{#!bash
     889# firmware
     890unzip ath11k_board-data_regdb_GF_SEC.zip (documentation says it was tested with 5.17.0)
     891cp ath11k_board-data_regdb_GF_SEC/board-2_US_EU_JP.bin /lib/firmware/ath11k/WCN6855/hw2.1/board-2.bin
     892cp ath11k_board-data_regdb_GF_SEC/regdb.bin /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin
     893rm /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin.zst
     894# reboot
     895[    8.346705] ath11k_pci 0000:03:00.0: BAR 0: assigned [mem 0x18200000-0x183fffff 64bit]
     896[    8.346761] ath11k_pci 0000:03:00.0: enabling device (0000 -> 0002)
     897[    8.352980] ath11k_pci 0000:03:00.0: MSI vectors: 1
     898[    8.353012] ath11k_pci 0000:03:00.0: wcn6855 hw2.1
     899[    8.605970] mhi mhi0: _request_firmware ath11k/WCN6855/hw2.1/amss.bin
     900[    8.703674] mhi mhi0: Loaded FW: ath11k/WCN6855/hw2.1/amss.bin, sha256: 8f10357b53b40238333f0b055b4829fc8dd87994aa2476ae3fa
     90192234d8f31065
     902[    9.423579] ath11k_pci 0000:03:00.0: chip_id 0x12 chip_family 0xb board_id 0xff soc_id 0x400c1211
     903[    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
     90425-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37
     905[    9.423620] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
     906[    9.438310] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
     9073c92c730241139779d55b9b2f25cce3
     908[    9.438452] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
     909[    9.442371] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
     9103c92c730241139779d55b9b2f25cce3
     911[    9.442532] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/regdb.bin
     912[    9.445073] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/regdb.bin, sha256: 0c8ae0f1224c240ba41df6407492d6f7b61
     9132d761c01391e969fbdec4c443d889
     914[    9.453593] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin
     915[    9.457116] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2
     9163c92c730241139779d55b9b2f25cce3
     917[    9.483549] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/m3.bin
     918[    9.488994] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/m3.bin, sha256: 9b9b226abf8ce0e005209e53c0c9a4443abaf7
     919b3def7fefe7e5c5676255c7bdc
     920[    9.533962] ath11k_pci 0000:03:00.0: leaving PCI ASPM disabled to avoid MHI M2 problems
     921# interface
     922root@noble-venice:~# ls -l /sys/class/net/wlan0
     923lrwxrwxrwx 1 root root 0 Oct 28 19:02 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
     924.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/net/wlan0
     925}}}
     926
     927Bluetooth Details:
     928 * Bluetooth 5.2 BR/EDR/LE
     929 * USB2.0 0x0cf3:0xe600
     930 * supported by the btusb driver; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB:
     931{{{#!bash
     932root@noble-venice:~# dmesg | grep Bluetooth
     933[    8.188778] Bluetooth: Core ver 2.22
     934[    8.188899] Bluetooth: HCI device and connection manager initialized
     935[    8.189878] Bluetooth: HCI socket layer initialized
     936[    8.189901] Bluetooth: L2CAP socket layer initialized
     937[    8.189932] Bluetooth: SCO socket layer initialized
     938[    8.340707] Bluetooth: hci0: using rampatch file: qca/rampatch_usb_00130201.bin
     939[    8.340712] Bluetooth: hci0: QCA: patch rome 0x130201 build 0x65e2, firmware rome 0x130201 build 0x38e6
     940[    8.910493] Bluetooth: hci0: using NVM file: qca/nvm_usb_00130201_gf.bin
     941[    9.047564] Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
     942[    9.316899] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
     943[    9.316916] Bluetooth: BNEP filters: protocol multicast
     944[    9.316929] Bluetooth: BNEP socket layer initialized
     945[    9.323882] Bluetooth: MGMT ver 1.22
     946root@noble-venice:~# hciconfig hci0
     947hci0:   Type: Primary  Bus: USB
     948        BD Address: 1C:BC:EC:01:43:B5  ACL MTU: 1024:7  SCO MTU: 240:8
     949        UP RUNNING
     950        RX bytes:954 acl:0 sco:0 events:75 errors:0
     951        TX bytes:2870 acl:0 sco:0 commands:75 errors:0
     952
     953root@noble-venice:~# hcitool -i hci0 scan
     954Scanning ...
     955}}}
     956
     957 
     958== GW16FB0 FSA M.2 B-Key Adapter
     959The GW16FB0 B-Key Adapter provides an M.2 B-Key socket with the following:
     960 * GPIO5 (drive-high; drive-low; high-Z 1.8V)
     961 * GPIO6 (drive-high; drive-low; high-Z 1.8V) 
     962 * DPR (drive-high or drive-low 1.8V)
     963 * WP# (OD; high-Z or drive-low)
     964 * W_DISALBE1# (OD|drive-high|drive-low @1.8V or 3.3V)
     965 * W_DISABLE2# (OD|drive-high|drive-low @1.8V or 3.3V)
     966 * RESET# (OD|drive-high|drive-low @1.8V or 3.3V)
     967 * CRDPWROFF# (OD|drive-high|drive-low @1.8V or 3.3V)
     968 * CONFIG[0-3]
     969 * COEX[0-2]
     970 * SIM1
     971 * SIM2
     972 * USB2.0
     973 * PCIE3.0 (with PERST# 3.3V)
     974 * LED1# (OD Yellow)
     975
     976Pinout (from baseboard perspective):
     977||= pin =||= signal           =||= signal           =||= pin =||
     978||  1    || CONFIG3(I)(3.3V pu)|| 3.3V               || 2     ||
     979||  3    || GND                || 3.3V               || 4     ||
     980||  5    || GND                || CRDPWROFF#(O/OD)   || 6     ||
     981||  7    || USB_DP             || W_DISABLE1#(O/OD)  || 8     ||
     982||  9    || USB_DM             || LED1#(OD)          || 10    ||
     983||  11   || GND                || KEY                || 12    ||
     984||  13   || KEY                || KEY                || 14    ||
     985||  15   || KEY                || KEY                || 16    ||
     986||  17   || KEY                || KEY                || 18    ||
     987||  19   || KEY                || GPIO5(O/OD)        || 20    ||
     988||  21   || CONFIG0(I)(3.3V pu)|| GPIO6(O/OD)        || 22    ||
     989||  23   || NC                 || NC                 || 24    ||
     990||  25   || DPR                || W_DISABLE2#(O/OD)  || 26    ||
     991||  27   || GND                || NC                 || 28    ||
     992||  29   || USB_RXN            || SIM1_RST^^^3^^^    || 30    ||
     993||  31   || USB_RXP            || SIM1_CLK^^^3^^^    || 32    ||
     994||  33   || GND                || SIM1_DAT^^^3^^^    || 34    ||
     995||  35   || USB_TXN            || SIM1_PWR^^^3^^^    || 36    ||
     996||  37   || USB_TXP            || NC                 || 38    ||
     997||  39   || GND                || SIM2_DET^^^3^^^    || 40    ||
     998||  41   || PCIE_RXN           || SIM2_DAT^^^3^^^    || 42    ||
     999||  43   || PCIE_RXP           || SIM2_CLK^^^3^^^    || 44    ||
     1000||  45   || GND                || SIM2_RST^^^3^^^    || 46    ||
     1001||  47   || PCIE_TXN           || SIM2_PWR^^^3^^^    || 48    ||
     1002||  49   || PCIE_TXP           || PERST#(O)(3.3V)    || 50    ||
     1003||  51   || GND                || NC                 || 52    ||
     1004||  53   || PCIE_CKN           || NC                 || 54    ||
     1005||  55   || PCIE_CKP           || NC                 || 56    ||
     1006||  57   || GND                || NC                 || 58    ||
     1007||  59   || NC                 || COEX3^^^1^^^       || 60    ||
     1008||  61   || NC                 || COEX2^^^1^^^       || 62    ||
     1009||  63   || NC                 || COEX1^^^1^^^       || 64    ||
     1010||  65   || NC                 || SIM1_DET^^^3^^^    || 66    ||
     1011||  67   || RESET#(O/OD)       || WP#(O/OD)          || 68    ||
     1012||  69   || CONFIG1(I)(3.3V pu)|| 3.3V               || 70    ||
     1013||  71   || GND                || 3.3V               || 72    ||
     1014||  73   || GND                || 3.3V               || 74    ||
     1015||  75   || CONFIG2(I)(3.3V pu)||                    ||       ||
     1016 1. The COEX[1..3] signals are ganged to each FSA socket on the baseboard
     1017 2. CONFIG[0..3] are inputs to the port expander with onboard pullups
     1018 3. The SIM signals do not connect to the baseboard SoC and go directly to the on-board SIM connector
     1019
     1020The following GPIO's are highly customizable via a dip-switch and I/O port expander:
     1021 * W_DISALBLE1#: output level is fsa_wdisable1# gpio
     1022  - OD: DIP[1]=on DIP[2]=don't-care
     1023  - @1.8V: DIP[1]=off DIP[2]=on
     1024  - @3.3V: DIP[1]=off DIP[2]=off
     1025 * CRDPWROFF#: output level is fsa_crdpwroff# gpio
     1026  - OD: DIP[3]=on DIP[4]=don't-care
     1027  - @1.8V: DIP[3]=off DIP[4]=on
     1028  - @3.3V: DIP[3]=off DIP[4]=off
     1029 * RESET#: output level is fsa_reset# gpio
     1030  - OD: DIP[5]=on DIP[6]=don't-care
     1031  - @1.8V: DIP[5]=off DIP[6]=on
     1032  - @3.3V: DIP[5]=off DIP[6]=off
     1033 * W_DISABLE2#: output level is fsa_wdisable1# gpio
     1034  - OD: DIP[7]=on DIP[8]=don't-care
     1035  - @1.8V: DIP[7]=off DIP[8]=on
     1036  - @3.3V: DIP[7]=off DIP[8]=off
     1037 * GPIO5:
     1038  - high-Z: gpio5_oe#=high
     1039  - 1.8V: gpio5_oe#=low, DIP[9]=off
     1040  - 0V: gpio5_oe=low, DIP[9]=on
     1041 * GPIO6:
     1042  - high-Z: gpio6_oe#=high
     1043  - 1.8V: gpio6_oe#=low, DIP[10]=off
     1044  - 0V: gpio6_oe=low, DIP[10]=on
     1045
     1046
     1047=== Card: Compex WLTB7002E25 M.2 B-Key/M-Key WiFi7 radio
     1048The 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).
     1049
     1050Pin Details:
     1051 * PERST# has a pu to 3.3V on card
     1052 * CONFIG[0..3]=1111
     1053 * DIP[1..10]=1101011111 (W_DISABLE1# OD)
     1054 * M2.8 W_DISABLE1# OD
     1055
     1056!WiFi details:
     1057 * WiFi7 802.11be
     1058 * PCIe 0x17cb 0x1109
     1059 * ath12:
     1060  * firmware: ath12k/QCN9274/hw2.0
     1061   - 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)
     1062   - regdb.bin and board.bin (not publicly available and are provided by Compex :sales@compex.com.sg)
     1063  * driver:
     1064{{{#!bash
     1065root@noble-venice:~# cat /proc/cmdline                                                                                       
     1066console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait net.ifnames=0 cma=196M
     1067root@noble-venice:~# dmesg | grep ath12
     1068[    9.439459] ath12k_pci 0000:07:00.0: BAR 0 [mem 0x18200000-0x183fffff 64bit]: assigned
     1069[    9.439514] ath12k_pci 0000:07:00.0: enabling device (0000 -> 0002)
     1070[    9.440236] ath12k_pci 0000:07:00.0: MSI vectors: 16
     1071[    9.440262] ath12k_pci 0000:07:00.0: Hardware name: qcn9274 hw2.0
     1072[    9.651582] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/firmware-2.bin, sha256: 6d2330c27a55b5a64a303bfcf6a05b
     1073dfe8a8e32f61fccff0b7ac980eee71a019
     1074[   10.430023] ath12k_pci 0000:07:00.0: memory type 10 not supported
     1075[   10.435234] ath12k_pci 0000:07:00.0: chip_id 0x0 chip_family 0xb board_id 0x101a soc_id 0x401a2200
     1076[   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
     1077_STRING=WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1
     1078[   10.439493] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
     10798f5e5c5a4235bb2a061d6138233e2e5
     1080[   10.440555] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
     10818f5e5c5a4235bb2a061d6138233e2e5
     1082[   10.441504] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/regdb.bin, sha256: a36fbe1cdaa83c8ae6792614bfa0e3b9fa2
     1083f1a0d01b07fdafad3ace46d34bc9a
     1084[   10.449868] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
     10858f5e5c5a4235bb2a061d6138233e2e5
     1086[   10.450680] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629
     10878f5e5c5a4235bb2a061d6138233e2e5
     1088[   10.452542] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board.bin, sha256: cc31d22d444fe3e574891ad0470bf64092b
     108975ece32dd229c27fbd60835ef61a3
     1090[   13.055026] ath12k_pci 0000:07:00.0: Invalid module id 2
     1091[   13.055062] ath12k_pci 0000:07:00.0: failed to parse tlv -22
     1092root@noble-venice:~# ls -l /sys/class/net/wlan*
     1093lrwxrwxrwx 1 root root 0 Apr 19  2024 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
     1094.0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0
     1095lrwxrwxrwx 1 root root 0 Apr 19  2024 /sys/class/net/wlan1 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00
     1096.0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan1
     1097}}}
     1098 * 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/)
     1099 * Note that additional cma is needed (cma=196M) for this card
     1100 * 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)
     1101 * iperf3 showed TX/RX rate of 503/499 mbps
     1102
     1103
     1104=== Card: Quectel EM06 M.2 B-Key Modem
     1105The Quectel EM06 B-Key Modem is a USB2.0 Category 6 LTE modem with dual-sim and GNSS support.
     1106
     1107Pin Details:
     1108 * DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
     1109 * CONFIG[0..3]=0011
     1110 * GPIO5 and GPIO6 are used for PCM CLK and DAT input
     1111 * W_DISABLE1# Disable Modem
     1112 * W_DISABLE2# Disable GPS
     1113 * WWAN_LED# RF Status
     1114 * dual-sim
     1115
     1116Modem Details:
     1117 * 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)
     1118 * CONFIG[0..3]=1111
     1119 * USB2.0 2c7c:0306
     1120 * drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
     1121{{{#!bash
     1122root@noble-venice:~# mmcli -m 0
     1123  -----------------------------------
     1124  General  |                    path: /org/freedesktop/ModemManager1/Modem/0
     1125           |               device id: 3a44c51e195b25f52092cb3bf35d5c7102a7b6fc
     1126  -----------------------------------
     1127  Hardware |            manufacturer: Quectel
     1128           |                   model: EM06-A
     1129           |       firmware revision: EM06ALAR03A05M4G
     1130           |          carrier config: ROW_Generic_3GPP
     1131           | carrier config revision: 06010821
     1132           |            h/w revision: EM06-A
     1133           |               supported: gsm-umts, lte
     1134           |                 current: gsm-umts, lte
     1135           |            equipment id: 861364040064220
     1136  -----------------------------------
     1137  System   |                  device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2
     1138           |                 physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2
     1139           |                 drivers: option, cdc_mbim
     1140           |                  plugin: quectel
     1141           |            primary port: cdc-wdm0
     1142           |                   ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps),
     1143           |                          ttyUSB2 (at), ttyUSB3 (at), wwan0 (net)
     1144  -----------------------------------
     1145  Status   |                    lock: sim-pin2
     1146           |          unlock retries: sim-pin2 (3)
     1147           |                   state: disabled
     1148           |             power state: on
     1149  -----------------------------------
     1150  Modes    |               supported: allowed: 3g; preferred: none
     1151           |                          allowed: 4g; preferred: none
     1152           |                          allowed: 3g, 4g; preferred: 4g
     1153           |                          allowed: 3g, 4g; preferred: 3g
     1154           |                 current: allowed: 3g, 4g; preferred: 4g
     1155  -----------------------------------
     1156  Bands    |               supported: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5,
     1157           |                          eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29,
     1158           |                          eutran-30, eutran-41, eutran-66
     1159           |                 current: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5,
     1160           |                          eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29,
     1161           |                          eutran-30, eutran-41, eutran-66
     1162  -----------------------------------
     1163  IP       |               supported: ipv4, ipv6, ipv4v6
     1164  -----------------------------------
     1165  3GPP     |                    imei: 861364040064220
     1166           |           enabled locks: fixed-dialing
     1167  -----------------------------------
     1168  3GPP EPS |    ue mode of operation: csps-2
     1169  -----------------------------------
     1170  SIM      |        primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1171root@noble-venice:~# mmcli -m 0 --sim 0
     1172  -------------------------------
     1173  General    |              path: /org/freedesktop/ModemManager1/SIM/0
     1174  -------------------------------
     1175  Properties |            active: yes
     1176             |              imsi: 234500007828248
     1177             |             iccid: 8944501109208282487
     1178             |       operator id: 23450
     1179             |     operator name: Hologram
     1180             |              gid1: FFFFFFFF
     1181             |              gid2: FFFFFFFF
     1182}}}
     1183
     1184
     1185=== Card: Sierra Wireless EM9191 B-Key Modem
     1186
     1187Pin Details:
     1188 * Full_Card_Power_Off# —Active-low input from the host—Low turns the module off, high turns the module on.
     1189 * 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.
     1190 * W_DISABLE2# pu GPS_DISABLE#—Active low input from the host—Low disables the GNSS radio receiver.
     1191 * RESET#—Active low input from the host—Low resets the module.
     1192 * Dynamic power control (DPR)—Signal used to adjust Tx power to meet FCC SAR requirements. For details, see
     1193 * GPIO5/GPIO6 drive high for USB3.0 or drive low for PCIe
     1194 * LED# blinks on 0.5s every 5 seconds or so
     1195
     1196Modem Details:
     1197 * 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)
     1198  * CONFIG[0..3]=0011
     1199  * USB3.0 1199:90d3
     1200  * drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
     1201{{{#!bash
     1202root@noble-venice:~# dmesg | egrep option\|mbim
     1203[    0.000000] earlycon: ec_imx6q0 at MMIO 0x0000000030890000 (options '115200')
     1204[    7.866598] usbcore: registered new interface driver option
     1205[    7.871271] option 2-1:1.3: GSM modem (1-port) converter detected
     1206[    7.873704] option 2-1:1.4: GSM modem (1-port) converter detected
     1207[    7.988211] cdc_mbim 2-1:1.0: setting rx_max = 16384
     1208[    8.046418] cdc_mbim 2-1:1.0: cdc-wdm0: USB WDM device
     1209[    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
     1210[    8.123962] usbcore: registered new interface driver cdc_mbim
     1211}}}
     1212  * modemmanager:
     1213{{{#!bash
     1214root@noble-venice:~# mmcli -m 0
     1215  ----------------------------------
     1216  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
     1217           |              device id: 54d8f189055cd3252fc067e8f4e7e41fe9f4831f
     1218  ----------------------------------
     1219  Hardware |           manufacturer: Sierra Wireless, Incorporated
     1220           |                  model: Sierra Wireless EM9191
     1221           |      firmware revision: 01.07.19.00_GENERI_016.010_000
     1222           |         carrier config: default
     1223           |           h/w revision: EM9191
     1224           |              supported: gsm-umts, lte, 5gnr
     1225           |                current: gsm-umts, lte, 5gnr
     1226           |           equipment id: 355890340103204
     1227  ----------------------------------
     1228  System   |                 device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1229           |                physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1230           |                drivers: option, cdc_mbim
     1231           |                 plugin: sierra
     1232           |           primary port: cdc-wdm0
     1233           |                  ports: cdc-wdm0 (mbim), ttyUSB0 (at), wwan0 (net)
     1234  ----------------------------------
     1235  Status   |                   lock: sim-pin2
     1236           |         unlock retries: sim-pin2 (3)
     1237           |                  state: disabled
     1238           |            power state: on
     1239  ----------------------------------
     1240  Modes    |              supported: allowed: 3g; preferred: none
     1241           |                         allowed: 4g; preferred: none
     1242           |                         allowed: 3g, 4g; preferred: 4g
     1243           |                         allowed: 3g, 4g; preferred: 3g
     1244           |                         allowed: 5g; preferred: none
     1245           |                         allowed: 4g, 5g; preferred: 5g
     1246           |                         allowed: 4g, 5g; preferred: 4g
     1247           |                         allowed: 3g, 5g; preferred: 5g
     1248           |                         allowed: 3g, 5g; preferred: 3g
     1249           |                         allowed: 3g, 4g, 5g; preferred: 5g
     1250           |                         allowed: 3g, 4g, 5g; preferred: 4g
     1251           |                         allowed: 3g, 4g, 5g; preferred: 3g
     1252           |                current: allowed: 3g, 4g, 5g; preferred: 4g
     1253  ----------------------------------
     1254  Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1255           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1256           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1257           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1258           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1259           |                         eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66,
     1260           |                         eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28,
     1261           |                         ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79
     1262           |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1263           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1264           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1265           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1266           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1267           |                         eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66,
     1268           |                         eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28,
     1269           |                         ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79
     1270  ----------------------------------
     1271  IP       |              supported: ipv4, ipv6, ipv4v6
     1272  ----------------------------------
     1273  3GPP     |                   imei: 355890340103204
     1274           |          enabled locks: fixed-dialing
     1275  ----------------------------------
     1276  3GPP EPS |   ue mode of operation: csps-2
     1277           |     initial bearer apn: psntneofin
     1278           | initial bearer ip type: ipv4v6
     1279  ----------------------------------
     1280  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1281           |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
     1282}}}
     1283
     1284
     1285=== Card: Sierra Wireless EM7455 B-Key Modem
     1286The Sierra Wireless EM7455 B-Key Modem is a USB3.0 Category 6 LTE modem with dual-sim and GNSS support.
     1287
     1288Pin Details:
     1289 * DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
     1290 * CONFIG[0..3]=0011
     1291 * W_DISABLE1# Disable Modem
     1292 * W_DISABLE2# Disable GPS
     1293 * LED# WWAN Radio On indicator
     1294 * GPIO5 and GPIO6 are N/C
     1295 * dual-sim
     1296
     1297Modem Details:
     1298 * USB3.0 1199:9079
     1299  - drivers: cdc_mbim/USB_NET_CDC_MBIM
     1300{{{#!bash
     1301root@noble-venice:~# dmesg | egrep mbim
     1302[   15.407976] cdc_mbim 2-1:1.12: cdc-wdm0: USB WDM device
     1303[   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
     1304[   15.408712] usbcore: registered new interface driver cdc_mbim
     1305}}}
     1306  - modemmanager:
     1307{{{#!bash
     1308root@noble-venice:~# mmcli --version
     1309mmcli 1.23.4
     1310Copyright (2011 - 2023) Aleksander Morgado
     1311License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
     1312This is free software: you are free to change and redistribute it.
     1313There is NO WARRANTY, to the extent permitted by law.
     1314root@noble-venice:~# mmcli -m 0
     1315  --------------------------------
     1316  General  |                 path: /org/freedesktop/ModemManager1/Modem/0
     1317           |            device id: ec2f88be52b588f89e0f12a21c4c5bb5cf5387a2
     1318  --------------------------------
     1319  Hardware |         manufacturer: Sierra Wireless, Incorporated
     1320           |                model: Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A
     1321           |    firmware revision: SWI9X30C_02.08.02.00
     1322           |       carrier config: default
     1323           |         h/w revision: EM7455
     1324           |            supported: gsm-umts, lte
     1325           |              current: gsm-umts, lte
     1326           |         equipment id: 014582002248145
     1327  --------------------------------
     1328  System   |               device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1329           |              physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1330           |              drivers: cdc_mbim, qcserial
     1331           |               plugin: sierra
     1332           |         primary port: cdc-wdm0
     1333           |                ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps),
     1334           |                       ttyUSB2 (at), wwan0 (net)
     1335  --------------------------------
     1336  Status   |                 lock: sim-pin2
     1337           |       unlock retries: sim-pin2 (3)
     1338           |                state: disabled
     1339           |          power state: low
     1340  --------------------------------
     1341  Modes    |            supported: allowed: 3g; preferred: none
     1342           |                       allowed: 4g; preferred: none
     1343           |                       allowed: 3g, 4g; preferred: 4g
     1344           |                       allowed: 3g, 4g; preferred: 3g
     1345           |              current: allowed: 3g, 4g; preferred: 4g
     1346  --------------------------------
     1347  Bands    |            supported: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
     1348           |                       eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
     1349           |                       eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
     1350           |              current: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
     1351           |                       eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
     1352           |                       eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41
     1353  --------------------------------
     1354  IP       |            supported: ipv4, ipv6, ipv4v6
     1355  --------------------------------
     1356  3GPP     |                 imei: 014582002248145
     1357           |        enabled locks: fixed-dialing
     1358  --------------------------------
     1359  3GPP EPS | ue mode of operation: csps-2
     1360  --------------------------------
     1361  SIM      |     primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1362           |       sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
     1363           |                       slot 2: /org/freedesktop/ModemManager1/SIM/1
     1364}}}
     1365
     1366
     1367=== Card: Telit FN980 B-Key Modem
     1368The 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.
     1369
     1370Modem Details:
     1371 * bus selection
     1372  - v1.2 hw pin20 GPIO5 low enables PCIe mode
     1373  - 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)
     1374{{{#!bash
     1375DEVICE=/dev/ttyUSB3
     1376stty -F $DEVICE ignbrk -brkint -icrnl -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke # config tty
     1377cat $DEVICE & # background process to read TTY responses
     1378at() { echo -n -e "$1\r" > $DEVICE; } # script for at cmds
     1379at "ATI" # identify modem
     1380at "AT#USBPCISWITCH?" # read switch
     1381at "AT#USBPCISWITCH=0" # set USB
     1382at "AT#USBPCISWITCH=1,5,0" # set PCI
     1383at "AT#REBOOT" # reboot modem
     1384}}}
     1385 * PCIe mode:
     1386  - 0x17cb:0x0306
     1387  - drivers: mhi_net, mhi-pci-generic
     1388{{{#!bash
     1389[    8.764392] mhi-pci-generic 0000:03:00.0: MHI PCI device found: telit-fn980-hwv1
     1390[    8.764420] mhi-pci-generic 0000:03:00.0: BAR 0: assigned [mem 0x18100000-0x18100fff 64bit]
     1391[    8.764465] mhi-pci-generic 0000:03:00.0: enabling device (0000 -> 0002)
     1392[    8.778878] mhi mhi0: Requested to power ON
     1393[    8.778922] mhi mhi0: Power on setup success
     1394}}}
     1395  - modemmanager:
     1396{{{#!bash
     1397root@noble-venice:~# mmcli -m 0
     1398  ----------------------------------
     1399  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
     1400           |              device id: b9bb1ca601e8da746a588c18447cb5390535b85b
     1401  ----------------------------------
     1402  Hardware |           manufacturer: Telit
     1403           |                  model: FN980m
     1404           |      firmware revision: M0H.020002-B009
     1405           |         carrier config: default
     1406           |           h/w revision: 1.00
     1407           |              supported: gsm-umts, lte, 5gnr, tds
     1408           |                         cdma-evdo, lte, 5gnr, tds
     1409           |                         lte, 5gnr, tds
     1410           |                         cdma-evdo, gsm-umts, lte, 5gnr, tds
     1411           |                current: gsm-umts, lte, 5gnr, tds
     1412           |           equipment id: 350313452002366
     1413  ----------------------------------
     1414  System   |                 device: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01
     1415.0/0000:03:00.0
     1416           |                physdev: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01
     1417.0/0000:03:00.0
     1418           |                drivers: mhi_net, mhi-pci-generic
     1419           |                 plugin: telit
     1420           |           primary port: wwan0qmi0
     1421           |                  ports: mhi_hwip0 (net), wwan0qmi0 (qmi)
     1422  ----------------------------------
     1423  Status   |                   lock: sim-pin2
     1424           |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
     1425           |                  state: disabled
     1426           |            power state: on
     1427  ----------------------------------
     1428  Modes    |              supported: allowed: 2g; preferred: none
     1429           |                         allowed: 3g; preferred: none
     1430           |                         allowed: 2g, 3g; preferred: 3g
     1431           |                         allowed: 2g, 3g; preferred: 2g
     1432           |                         allowed: 2g, 4g; preferred: 4g
     1433           |                         allowed: 2g, 4g; preferred: 2g
     1434           |                         allowed: 3g, 4g; preferred: 4g
     1435           |                         allowed: 3g, 4g; preferred: 3g
     1436           |                         allowed: 2g, 3g, 4g; preferred: 4g
     1437           |                         allowed: 2g, 3g, 4g; preferred: 3g
     1438           |                         allowed: 2g, 3g, 4g; preferred: 2g
     1439           |                         allowed: 2g, 5g; preferred: 5g
     1440           |                         allowed: 2g, 5g; preferred: 2g
     1441           |                         allowed: 3g, 5g; preferred: 5g
     1442           |                         allowed: 3g, 5g; preferred: 3g
     1443           |                         allowed: 2g, 3g, 5g; preferred: 5g
     1444           |                         allowed: 2g, 3g, 5g; preferred: 3g
     1445           |                         allowed: 2g, 3g, 5g; preferred: 2g
     1446           |                         allowed: 2g, 4g, 5g; preferred: 5g
     1447           |                         allowed: 2g, 4g, 5g; preferred: 4g
     1448           |                         allowed: 2g, 4g, 5g; preferred: 2g
     1449           |                         allowed: 3g, 4g, 5g; preferred: 5g
     1450           |                         allowed: 3g, 4g, 5g; preferred: 4g
     1451           |                         allowed: 3g, 4g, 5g; preferred: 3g
     1452           |                         allowed: 2g, 3g, 4g, 5g; preferred: 5g
     1453           |                         allowed: 2g, 3g, 4g, 5g; preferred: 4g
     1454           |                         allowed: 2g, 3g, 4g, 5g; preferred: 3g
     1455           |                         allowed: 2g, 3g, 4g, 5g; preferred: 2g
     1456           |                current: allowed: 3g; preferred: none
     1457  ----------------------------------
     1458  Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1459           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1460           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1461           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1462           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1463           |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48,
     1464           |                         eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5,
     1465           |                         ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38,
     1466           |                         ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78,
     1467           |                         ngran-79
     1468           |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1469           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1470           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1471           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1472           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1473           |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48,
     1474           |                         eutran-66, eutran-71, utran-19
     1475  ----------------------------------
     1476  IP       |              supported: ipv4, ipv6, ipv4v6
     1477  ----------------------------------
     1478  3GPP     |                   imei: 350313452002366
     1479           |          enabled locks: fixed-dialing
     1480  ----------------------------------
     1481  3GPP EPS | initial bearer ip type: ipv4v6
     1482  ----------------------------------
     1483  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1484           |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
     1485           |                         slot 2: none
     1486}}}
     1487 * USB3.0 mode:
     1488  - USB3.0 1bc7:1050
     1489  - drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
     1490  - modemmanager:
     1491{{{#!bash
     1492root@noble-venice:~# mmcli -m 0
     1493  ----------------------------------
     1494  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
     1495           |              device id: c04a4fdf1b3d082ea319157f172714fef001f97f
     1496  ----------------------------------
     1497  Hardware |           manufacturer: Telit
     1498           |                  model: FN980m
     1499           |      firmware revision: M0H.020002-B009
     1500           |         carrier config: default
     1501           |           h/w revision: 1.00
     1502           |              supported: gsm-umts, lte, 5gnr, tds
     1503           |                         cdma-evdo, lte, 5gnr, tds
     1504           |                         lte, 5gnr, tds
     1505           |                         cdma-evdo, gsm-umts, lte, 5gnr, tds
     1506           |                current: gsm-umts, lte, 5gnr, tds
     1507           |           equipment id: 350313452002366
     1508  ----------------------------------
     1509  System   |                 device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2
     1510           |                physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2
     1511           |                drivers: option, qmi_wwan
     1512           |                 plugin: telit
     1513           |           primary port: cdc-wdm0
     1514           |                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (ignored),
     1515           |                         ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net)
     1516  ----------------------------------
     1517  Status   |                   lock: sim-pin2
     1518           |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
     1519           |                  state: disabled
     1520           |            power state: on
     1521  ----------------------------------
     1522  Modes    |              supported: allowed: 2g; preferred: none
     1523           |                         allowed: 3g; preferred: none
     1524           |                         allowed: 2g, 3g; preferred: 3g
     1525           |                         allowed: 2g, 3g; preferred: 2g
     1526           |                         allowed: 2g, 4g; preferred: 4g
     1527           |                         allowed: 2g, 4g; preferred: 2g
     1528           |                         allowed: 3g, 4g; preferred: 4g
     1529           |                         allowed: 3g, 4g; preferred: 3g
     1530           |                         allowed: 2g, 3g, 4g; preferred: 4g
     1531           |                         allowed: 2g, 3g, 4g; preferred: 3g
     1532           |                         allowed: 2g, 3g, 4g; preferred: 2g
     1533           |                         allowed: 2g, 5g; preferred: 5g
     1534           |                         allowed: 2g, 5g; preferred: 2g
     1535           |                         allowed: 3g, 5g; preferred: 5g
     1536           |                         allowed: 3g, 5g; preferred: 3g
     1537           |                         allowed: 2g, 3g, 5g; preferred: 5g
     1538           |                         allowed: 2g, 3g, 5g; preferred: 3g
     1539           |                         allowed: 2g, 3g, 5g; preferred: 2g
     1540           |                         allowed: 2g, 4g, 5g; preferred: 5g
     1541           |                         allowed: 2g, 4g, 5g; preferred: 4g
     1542           |                         allowed: 2g, 4g, 5g; preferred: 2g
     1543           |                         allowed: 3g, 4g, 5g; preferred: 5g
     1544           |                         allowed: 3g, 4g, 5g; preferred: 4g
     1545           |                         allowed: 3g, 4g, 5g; preferred: 3g
     1546           |                         allowed: 2g, 3g, 4g, 5g; preferred: 5g
     1547           |                         allowed: 2g, 3g, 4g, 5g; preferred: 4g
     1548           |                         allowed: 2g, 3g, 4g, 5g; preferred: 3g
     1549           |                         allowed: 2g, 3g, 4g, 5g; preferred: 2g
     1550           |                current: allowed: 3g; preferred: none
     1551  ----------------------------------
     1552  Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1553           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1554           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1555           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1556           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1557           |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48,
     1558           |                         eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5,
     1559           |                         ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38,
     1560           |                         ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78,
     1561           |                         ngran-79
     1562           |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1563           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1564           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1565           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1566           |                         eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39,
     1567           |                         eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48,
     1568           |                         eutran-66, eutran-71, utran-19
     1569  ----------------------------------
     1570  IP       |              supported: ipv4, ipv6, ipv4v6
     1571  ----------------------------------
     1572  3GPP     |                   imei: 350313452002366
     1573           |          enabled locks: fixed-dialing
     1574  ----------------------------------
     1575  3GPP EPS |   ue mode of operation: csps-2
     1576           | initial bearer ip type: ipv4v6
     1577  ----------------------------------
     1578  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1579           |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
     1580           |                         slot 2: none
     1581}}}
     1582
     1583=== Card: Telit LN920 B-Key Modem
     1584The [[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.
     1585
     1586Pin Details:
     1587 * W_DISABLE1# Disable Modem
     1588 * W_DISABLE2# Disable GPS
     1589 * GPIO5 and GPIO6 are used for 1.8V I2S_CLK and I2S_DAT inputs
     1590 * LED illuminates when the modem is enumerated in Linux
     1591 * DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
     1592 * CONFIG[0..3]=0011
     1593 * dual-sim support
     1594
     1595Modem Details:
     1596 * USB3.0 1bc7:1060
     1597  - drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
     1598{{{#!bash
     1599root@noble-venice:~# dmesg | egrep GSM\|wdm
     1600[   19.499182] usbcore: registered new interface driver cdc_wdm
     1601[   19.507831] usbserial: USB Serial support registered for GSM modem (1-port)
     1602[   19.508079] option 2-1:1.0: GSM modem (1-port) converter detected
     1603[   19.508409] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
     1604[   19.508719] option 2-1:1.3: GSM modem (1-port) converter detected
     1605[   19.509063] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
     1606[   19.509255] option 2-1:1.4: GSM modem (1-port) converter detected
     1607[   19.509574] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2
     1608[   19.509774] option 2-1:1.5: GSM modem (1-port) converter detected
     1609[   19.510059] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3
     1610[   19.510208] option 2-1:1.6: GSM modem (1-port) converter detected
     1611[   19.510417] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB4
     1612[   19.528989] qmi_wwan 2-1:1.2: cdc-wdm0: USB WDM device
     1613}}}
     1614  - modemmanager:
     1615{{{#!bash
     1616root@noble-venice:~# mmcli --version
     1617mmcli 1.23.4
     1618Copyright (2011 - 2023) Aleksander Morgado
     1619License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
     1620This is free software: you are free to change and redistribute it.
     1621There is NO WARRANTY, to the extent permitted by law.
     1622root@noble-venice:~# mmcli -m 0
     1623  ----------------------------------
     1624  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
     1625           |              device id: e58cc432de177ace69c862b52587b449f1954cbc
     1626  ----------------------------------
     1627  Hardware |           manufacturer: Telit
     1628           |                  model: LN920A12-WW
     1629           |      firmware revision: M0L.000002
     1630           |         carrier config: default
     1631           |           h/w revision: 1.10
     1632           |              supported: gsm-umts, lte
     1633           |                current: gsm-umts, lte
     1634           |           equipment id: 354175753093121
     1635  ----------------------------------
     1636  System   |                 device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1637           |                physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1
     1638           |                drivers: option, qmi_wwan
     1639           |                 plugin: telit
     1640           |           primary port: cdc-wdm0
     1641           |                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (gps),
     1642           |                         ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net)
     1643  ----------------------------------
     1644  Status   |                   lock: sim-pin2
     1645           |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
     1646           |                  state: disabled
     1647           |            power state: on
     1648  ----------------------------------
     1649  Modes    |              supported: allowed: 3g; preferred: none
     1650           |                         allowed: 4g; preferred: none
     1651           |                         allowed: 3g, 4g; preferred: 4g
     1652           |                         allowed: 3g, 4g; preferred: 3g
     1653           |                current: allowed: 3g, 4g; preferred: 4g
     1654  ----------------------------------
     1655  Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8,
     1656           |                         utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5,
     1657           |                         eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17,
     1658           |                         eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28,
     1659           |                         eutran-29, eutran-30, eutran-38, eutran-39, eutran-40, eutran-41,
     1660           |                         eutran-42, eutran-43, eutran-48, eutran-66, eutran-71, utran-19
     1661           |                current: utran-1, utran-4, utran-5, utran-8, utran-9, utran-2,
     1662           |                         eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
     1663           |                         eutran-12, eutran-13, eutran-14, eutran-17, eutran-18, eutran-19,
     1664           |                         eutran-20, eutran-25, eutran-26, eutran-28, eutran-29, eutran-30,
     1665           |                         eutran-38, eutran-39, eutran-40, eutran-41, eutran-42, eutran-43,
     1666           |                         eutran-48, eutran-66, eutran-71, utran-19
     1667  ----------------------------------
     1668  IP       |              supported: ipv4, ipv6, ipv4v6
     1669  ----------------------------------
     1670  3GPP     |                   imei: 354175753093121
     1671           |          enabled locks: fixed-dialing
     1672  ----------------------------------
     1673  3GPP EPS |   ue mode of operation: csps-2
     1674           | initial bearer ip type: ipv4v6
     1675  ----------------------------------
     1676  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
     1677           |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
     1678           |                         slot 2: /org/freedesktop/ModemManager1/SIM/1
     1679}}}