Hi ,
I am using fgh100m (mm6108) in our openwrt board. We use the SPI interface for the connections. When integrating, we found the following issue:
root@openwrt:~# dmesg | grep morse
[ 8.004233] morse micro driver registration. Version 0-rel_1_14_1_2024_Dec_05
[ 8.023843] Modules linked in: morse(+) mac80211 libchacha20poly1305 iptable_nat ipt_REJECT ebtable_nat ebtable_filter ebtable_broute dot11ah chacha_neon cfg80211 xt_time xt_tcpudp xt_tcpmss xt_statistic xt_state xt_recent xt_quota xt_policy xt_pkttype xt_owner xt_nat xt_multiport xt_mark xt_mac xt_limit xt_length xt_hl xt_helper xt_esp xt_ecn xt_dscp xt_conntrack xt_connmark xt_connlimit xt_connlabel xt_connbytes xt_comment xt_cgroup xt_addrtype xt_TCPMSS xt_REDIRECT xt_NETMAP xt_MASQUERADE xt_LOG xt_IPMARK xt_HL xt_DSCP xt_CLASSIFY usbserial ts_kmp ts_fsm ts_bm slhc sch_cake qmi_wwan poly1305_neon nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_objref nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_counter nft_compat nft_chain_nat nf_tables nf_reject_ipv4 nf_nat nf_log_syslog nf_flow_table nf_conntrack_netlink nf_conncount libcurve25519_generic libchacha iptable_mangle
[ 8.251256] lr : morse_mac_create+0x168/0x1e0 [morse]
[ 8.338635] morse_mac_create+0x168/0x1e0 [morse]
[ 8.343357] morse_pre_assoc_peer_update_rx_info+0x2f54/0x3e10 [morse]
[ 8.388941] morse_spi_init+0x24/0xef8 [morse]
[ 8.393403] init_module+0x8c/0xb4 [morse]
[ 8.441206] morse_spi spi1.0: ieee80211_alloc_hw failed
[ 8.446511] morse_spi spi1.0: morse_mac_create failed
[ 8.451555] morse_spi: probe of spi1.0 failed with error -12
ajudge
December 23, 2025, 4:59am
2
Hi @sankarganesh
The driver is reporting that ieee80211_alloc_hw is failing. This will either be because there is not enough memory, or because the driver thinks a function op doesn’t need to be implemented - which could happen if you are using a backported mac80211.
Can you specify your kernel and mac80211 versions? If they are different, specify the mac80211 version in the build of the driver using by setting CONFIG_BACKPORT_VERSION.
Hi @ajudge ,
I am using generic Openwrt 23.05.4. Here is the details you needed,
Linux: linux-5.15.162
mac80211: 6.1.97-1
ajudge
December 23, 2025, 5:17am
4
Please specify CONFIG_BACKPORT_VERSION=6.1.97 in your driver build.
Hi @ajudge ,
It is already in a backported version.
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.97/
openwrt-23.05.4/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_filogic/backports-6.1.97-1/
Below patches i am using
999-001-morse-mac80211-disable-robust-management-frame-without-sta-check.patch
999-002-morse-mac80211_mlme_s1g_ecsa_support.patch
999-003-morse-mac80211_tx_s1g_AP_ecsa_support.patch
999-004-morse_mac80211_IBSS_bridge_support.patch
999-005-morse_mac80211_mesh_support.patch
999-006-morse-mac80211-mlme-ps-recalc-for-dynamic-ps-v5.15.patch
999-007-morse-mac80211_ndp_block_ack.patch
999-024-mlme_beacon_wait.patch
999-025-cfg-nl-ignore-chan.patch
999-026-halow_mesh_optimizations.patch
Memory Information :
root@PIAP:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 16.0M 16.0M 0 100% /rom
tmpfs 243.3M 132.0K 243.2M 0% /tmp
/dev/ubi0_2 5.7M 188.0K 5.2M 3% /overlay
overlayfs:/overlay 5.7M 188.0K 5.2M 3% /
tmpfs 512.0K 0 512.0K 0% /dev
ajudge
December 23, 2025, 7:18am
6
Can you share the command you are using to build the Morse Micro driver?
Just giving “make V=sc”
Also tried using > ./scripts/morse_setup.sh -i -b ekh_XXX before running make
target_diffconfig
CONFIG_TARGET_mediatek=y
CONFIG_TARGET_mediatek_filogic=y
CONFIG_TARGET_mediatek_filogic_DEVICE_XXX_YYY=y
CONFIG_PACKAGE_morsectrl=y
CONFIG_PACKAGE_morse-board-config-hotplug-model=y
CONFIG_PACKAGE_luci-app-ekhwizards=y
CONFIG_PACKAGE_kmod-morse=y
CONFIG_PACKAGE_netifd-morse=y
CONFIG_PACKAGE_morse-fw-6108=y
Could you please share any specific steps to integrate mm6108 and build on the generic OpenWrt 23.05.4?
Target: Mediatek Filogic (MT7981)
ajudge
December 23, 2025, 7:52am
9
Hi @sankarganesh
I’m a bit confused. Originally I thought you were using generic OpenWrt 23.05, but ./scripts/morse_setup.sh -i -b ekh_XXX suggests you’re using our OpenWrt fork. Can you confirm exactly which OpenWrt you are using.
If you have integrated our driver into generic OpenWrt, how have you done that?
I would recommend grabbing our “minimal” feed, and following the instructions in the README. Find the minimal feed here: GitHub - MorseMicro/morse-feed at mm/openwrt-23.05
I tried both.
Using your openwrt source: GitHub - MorseMicro/openwrt
and another generic one. In both, I am facing an issue.
Let me try the minimal feed version you suggested, and let you know
HI @ajudge ,
The patches were not applied properly. I used generic Openwrt 23.05 and add the morse feeds mm/openwrt-23.05. and followed the steps.
for dir in $MYDIR/patches/*
++ basename ./feeds/morse/patches/mac80211
basename=mac80211
case $basename in
‘[’ -d ./feeds/morse/patches/mac80211 ‘]’
echo === Applying mac80211 patches…
=== Applying mac80211 patches…
for patch in $dir/*.patch
patch -p1
patching file package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored – saving rejects to file package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch.rej
patching file package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored – saving rejects to file package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch.rej
patching file package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored – saving rejects to file package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch.rej
patching file package/kernel/mac80211/patches/subsys/306-04-v6.2-wifi-realtek-remove-duplicated-wake_tx_queue.patch
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored – saving rejects to file package/kernel/mac80211/patches/subsys/306-04-v6.2-wifi-realtek-remove-duplicated-wake_tx_queue.patch.rej
patching file package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch
Hunk #2 FAILED at 46.
Hunk #3 FAILED at 70.
2 out of 18 hunks FAILED – saving rejects to file package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch.rej
patching file package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch
patching file package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch
Hunk #4 FAILED at 96.
1 out of 4 hunks FAILED – saving rejects to file package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch.rej
++ failure
++ echo Failed to adapt your existing OpenWrt. The most probably cause
Failed to adapt your existing OpenWrt. The most probably cause
++ echo of this is that you have local changes that are incompatible.
of this is that you have local changes that are incompatible.
++ echo You should look at the particular patch/operation that failed,
You should look at the particular patch/operation that failed,
++ echo and adjust it appropriately.
and adjust it appropriately.
++ exit 1
Please try from your end and let me know
Hi @ajudge ,
We resolved the patching issue, and here is our output.
[ 7.956039] Morse Micro Dot11ah driver registration. Version 0-rel_1_14_1_2024_Dec_05
[ 7.991632] morse micro driver registration. Version 0-rel_1_14_1_2024_Dec_05
[ 7.999409] morse_spi spi1.0: morse_of_probe: Reading gpio pins configuration from device tree
[ 8.008254] uaccess char driver major number is 249
[ 8.013277] morse_io: Device node ‘/dev/morse_io’ created successfully
[ 8.114634] morse_spi spi1.0: Loaded firmware from morse/mm6108.bin, size 430512, crc32 0xb25c264b
[ 8.123782] morse_spi spi1.0: Loaded BCF from morse/bcf_default.bin, size 972, crc32 0x0ac58c9e
[ 8.757048] invalid GPIO -2
[ 8.759858] invalid GPIO -2
[ 8.762641] invalid GPIO -2
[ 8.765422] invalid GPIO -2
[ 8.768203] invalid GPIO -2
[ 8.789141] morse_spi spi1.0: Driver loaded with kernel module parameters
[ 8.795931] morse_spi spi1.0: enable_1mhz_probes : Y
[ 8.803068] morse_spi spi1.0: enable_hw_scan : Y
[ 8.810195] morse_spi spi1.0: enable_pv1 : N
[ 8.817315] morse_spi spi1.0: enable_page_slicing : N
[ 8.824444] morse_spi spi1.0: log_modparams_on_boot : Y
[ 8.831570] morse_spi spi1.0: enable_mcast_rate_control : N
[ 8.838690] morse_spi spi1.0: enable_mcast_whitelist : Y
[ 8.845820] morse_spi spi1.0: ocs_type : 1
[ 8.852949] morse_spi spi1.0: enable_wiphy : 0
[ 8.860074] morse_spi spi1.0: enable_auto_mpsw : Y
[ 8.867195] morse_spi spi1.0: duty_cycle_probe_retry_threshold : 2500
[ 8.874582] morse_spi spi1.0: duty_cycle_mode : 0
[ 8.881714] morse_spi spi1.0: enable_auto_duty_cycle : Y
[ 8.888835] morse_spi spi1.0: dhcpc_lease_update_script : /morse/scripts/dhcpc_update.sh
[ 8.898477] morse_spi spi1.0: enable_ibss_probe_filtering : Y
[ 8.905607] morse_spi spi1.0: enable_dhcpc_offload : N
[ 8.912736] morse_spi spi1.0: enable_arp_offload : N
[ 8.919862] morse_spi spi1.0: enable_bcn_change_seq_monitor : 0
[ 8.926983] morse_spi spi1.0: enable_cac : 0
[ 8.934109] morse_spi spi1.0: max_mc_frames : 10
[ 8.941323] morse_spi spi1.0: tx_max_power_mbm : 2200
[ 8.948702] morse_spi spi1.0: enable_twt : Y
[ 8.955832] morse_spi spi1.0: enable_mac80211_connection_monitor : N
[ 8.962958] morse_spi spi1.0: enable_airtime_fairness : N
[ 8.970086] morse_spi spi1.0: enable_raw : Y
[ 8.977206] morse_spi spi1.0: max_aggregation_count : 0
[ 8.984332] morse_spi spi1.0: max_rate_tries : 1
[ 8.991458] morse_spi spi1.0: max_rates : 4
[ 8.998578] morse_spi spi1.0: enable_watchdog_reset : N
[ 9.005704] morse_spi spi1.0: watchdog_interval_secs : 30
[ 9.012916] morse_spi spi1.0: enable_watchdog : Y
[ 9.020041] morse_spi spi1.0: country : US
[ 9.027249] morse_spi spi1.0: enable_cts_to_self : N
[ 9.034376] morse_spi spi1.0: enable_rts_8mhz : N
[ 9.041502] morse_spi spi1.0: enable_trav_pilot : Y
[ 9.048622] morse_spi spi1.0: enable_sgi_rc : Y
[ 9.055748] morse_spi spi1.0: enable_mbssid_ie : N
[ 9.062875] morse_spi spi1.0: virtual_sta_max : 0
[ 9.070000] morse_spi spi1.0: thin_lmac : 0
[ 9.077120] morse_spi spi1.0: enable_dynamic_ps_offload : Y
[ 9.084244] morse_spi spi1.0: enable_ps : 2
[ 9.091379] morse_spi spi1.0: enable_subbands : 2
[ 9.098499] morse_spi spi1.0: enable_survey : Y
[ 9.105627] morse_spi spi1.0: mcs10_mode : 0
[ 9.112753] morse_spi spi1.0: mcs_mask : 1023
[ 9.120139] morse_spi spi1.0: no_hwcrypt : 0
[ 9.127259] morse_spi spi1.0: enable_ext_xtal_init : N
[ 9.134387] morse_spi spi1.0: enable_otp_check : 1
[ 9.141512] morse_spi spi1.0: bcf :
[ 9.148546] morse_spi spi1.0: serial : default
[ 9.156195] morse_spi spi1.0: debug_mask : 8
[ 9.163322] morse_spi spi1.0: test_mode : 0
[ 9.170455] morse_spi spi1.0: tx_status_lifetime_ms : 15000
[ 9.177922] morse_spi spi1.0: tx_queued_lifetime_ms : 1000
[ 9.185308] morse_spi spi1.0: max_txq_len : 32
[ 9.192520] morse_spi spi1.0: default_cmd_timeout_ms : 600
[ 9.199819] morse_spi spi1.0: hw_reload_after_stop : 5
[ 9.206939] morse_spi spi1.0: enable_short_bcn_as_dtim_override : -1
[ 9.214155] morse_spi spi1.0: fw_bin_file :
[ 9.221195] morse_spi spi1.0: sdio_reset_time : 400
[ 9.228489] morse_spi spi1.0: macaddr_suffix : 00:00:00
[ 9.236222] morse_spi spi1.0: macaddr_octet : 255
[ 9.243522] morse_spi spi1.0: max_total_vendor_ie_bytes : 514
[ 9.250822] morse_spi spi1.0: coredump_include : 1
[ 9.257942] morse_spi spi1.0: coredump_method : 1
[ 9.265067] morse_spi spi1.0: enable_coredump : Y
[ 9.272196] morse_spi spi1.0: sdio_clk_debugfs :
[ 9.279237] morse_spi spi1.0: spi_use_edge_irq : N
[ 9.286358] morse_spi spi1.0: spi_clock_speed : 50000000
[ 9.294091] morse_spi spi1.0: enable_mm_vendor_ie : Y
[ 9.301217] morse_spi spi1.0: fixed_guard : 0
[ 9.308338] morse_spi spi1.0: fixed_ss : 1
[ 9.315464] morse_spi spi1.0: fixed_bw : 2
[ 9.322589] morse_spi spi1.0: fixed_mcs : 4
[ 9.329718] morse_spi spi1.0: enable_fixed_rate : N
[ 9.337332] usbcore: registered new interface driver morse_usb
In between the logs, there is a GPIO error. Also, we didn’t see any interfaces created for Morse, only phy we can able to see.
Could you help me with a sample UCI wireless configuration file?
Hi @sankarganesh , if you’re using the netifd-morse package it should have installed a hotplug script which creates config in /etc/config/wireless to bring up wlan0. See the README in GitHub - MorseMicro/morse-feed at mm/openwrt-23.05 for more info.
Can you share what’s in your /etc/config/wireless currently?
(note that if there’s nothing in /etc/config/wireless, it’s expected that wlan0 does not exist, as there’s a hotplug script which removes the auto-created one to avoid it interfering with bring-up)
Hi @james.haggerty ,
The driver issues are resolved, and we can have the output in iwinfo
root@OpenWrt:/# iwinfo
wlan0 ESSID: “MorseMicro”
Access Point: BC:2A:33:96:B1:43
Mode: Master Channel: 7 (866.500 MHz) HT Mode: unknown
Center Channel 1: 7 2: unknown
Tx-Power: 0 dBm Link Quality: unknown/70
Signal: unknown Noise: -110 dBm
Bit Rate: unknown
Encryption: WPA3 SAE (CCMP)
Type: dot11ah HW Mode(s): 802.11ah
Hardware: embedded [Morse Micro SPI-MM601X]
TX power offset: none
Frequency offset: none
Supports VAPs: yes PHY name: phy2
But SSID is not broadcasting. We do have another working Halow device, but while scanning, we are not able to detect the SSID.
Also, i would like to get some details about bcf file.
HI @james.haggerty ,
Do you have any user guide for morse_cli ?
Can you show your /etc/config/wireless file so we can confirm it is correctly configured?
The most likely issue is that you’re loading bcf_default.bin (which disables things) rather than the correct BCF for your module. This is available from: morse-firmware/bcf/quectel at main · MorseMicro/morse-firmware · GitHub
Re morse_cli, commands are a subset of morse-ctrl: https://www.morsemicro.com/resources/appnotes/MM_APPNOTE-13_Morsectrl_Guide.pdf
However, you should not need to use morse_cli in normal bring-up.
HI @james.haggerty ,
Please find the wireless config.
root@OpenWrt:/# cat /etc/config/wireless
config wifi-device ‘radio0’
option type ‘morse’
option path ‘platform/11009000.spi/spi_master/spi1/spi1.0’
option band ‘s1g’
option hwmode ‘11ah’
option reconf ‘0’
option channel ‘7’
option country ‘IN’
option bcf ‘bcf_default.bin’
config wifi-iface ‘default_radio0’
option mode ‘ap’
option wds ‘1’
option device ‘radio0’
option network ‘lan’
option ssid ‘MorseMicro’
option encryption ‘sae’
option key ‘12345678’
As you mentioned, I am using bcf_default,bin
Please find the issue we are facing when changing the bcf file
[ 7918.985262] morse micro driver registration. Version 0-rel_1_14_1_2024_Dec_05
[ 7918.992911] morse_spi spi1.0: morse_of_probe: Reading gpio pins configuration from device tree
[ 7919.001846] uaccess char driver major number is 249
[ 7919.006868] morse_io: Device node ‘/dev/morse_io’ created successfully
[ 7919.014294] morse_spi spi1.0: Loaded firmware from morse/mm6108.bin, size 430512, crc32 0xb25c264b
[ 7919.023625] morse_spi spi1.0: Loaded BCF from morse/bcf_fgh100maamd.bin, size 181819, crc32 0x35fe0da8
[ 7919.572479] morse_spi spi1.0: Wrong file format
[ 7920.122521] morse_spi spi1.0: Wrong file format
[ 7920.672760] morse_spi spi1.0: Wrong file format
[ 7920.677364] morse_spi spi1.0: morse_firmware_init failed: -1
[ 7920.683113] morse_spi_probe failed. The driver has not been loaded!
[ 7920.689396] morse_spi: probe of spi1.0 failed with error -1
[ 7920.695096] usbcore: registered new interface driver morse_usb
[ 7920.701358] kmodloader: done loading kernel modules from /etc/modules.d/morse*
HI @james.haggerty ,
Any update on this ?
I think you may have incorrectly copied that BCF file, as it’s 181819 bytes (whereas it should be less than 1kb). Is it possible you downloaded the github HTML or similar?