From: Lachlan Hodges <lachlan.hodges@morsemicro.com>
To: johannes@sipsolutions.net
Cc: arien.judge@morsemicro.com, dan.callaghan@morsemicro.com,
ayman.grais@morsemicro.com, linux-wireless@vger.kernel.org,
Lachlan Hodges <lachlan.hodges@morsemicro.com>,
Andrew Pope <andrew.pope@morsemicro.com>,
Bassem Dawood <bassem@morsemicro.com>,
Chetan Mistry <chetan.mistry@morsemicro.com>,
James Herbert <james.herbert@morsemicro.com>,
Sahand Maleki <sahand.maleki@morsemicro.com>,
Simon Wadsworth <simon@morsemicro.com>
Subject: [PATCH wireless-next v3 00/33] wifi: mm81x: add mm81x driver
Date: Fri, 26 Jun 2026 16:28:56 +1000 [thread overview]
Message-ID: <20260626063014.1275235-1-lachlan.hodges@morsemicro.com> (raw)
This series adds the first Wi-Fi HaLow driver to support the Morse
Micro mm81x chip family via USB and SDIO.
S1G support in the kernel is only new, and as a result this driver has
been scoped to be simple and only support station and AP interface.
The Wi-Fi specific features only cover the minimum required for basic
use such as powersave, aggregation, rate control and so on. The driver
will be extended into the future as S1G support for operations such as
ACS, channel switching and so on are added into the wireless stack.
The driver contains two checkpatch CHECKs for a static rate array
and a line length of 81 using the same ignore list as the wireless
checkpatch NIPA bot with the exception of OPEN_ENDED_LINE which has
been excluded.
The driver has been build tested on a long list of architectures and
compilers via Intels LKP.
The driver currently supports IEEE80211-2024 US channels only, with
AU 2020 also available. In order for this to be expanded additional
non-trivial kernel work is required which will begin once the
driver is upstream.
Changes since v2:
- In INIT_CMD_HDR don't init members to 0
- Remove the if (!cmd_q) and subsequent comment as this will never be
false with YAPS
- Clamp firmware retcode if outside errno range to prevent erroneous
ERR_PTR usage when passing ret code up the stack
- Remove some LE force wrappers
- convert beacon work from tasklet (deprecated) to work item running
on system_bh_wq
- mm81x_yaps_hw_status_registers -> mm81x_yaps_status_regs
- Introduce mm81x_yaps_hw_status_regs which is the fw representation
of the status registers for DMA target (i.e in little endian)
- Remove macro typedefs over default Elf types
- Introduce mm81x_elf32_ehdr and friends as implementation-specific
types to parse fw and bcf
- Use read_poll_timeout for waiting for host table pointer rather then
open coding
- Use put_unaligned_le16 for reading the mac address from OTP
- Use tabs for the CHANS1G macro, also enclose chan_flags in braces to
prevent checkpatch error
- remove some basic sta member variable wrappers and just call directly
- Remove sta_rc_update entirely, this cannot be reached in S1G
- Free mcast_filter to fix memory leak
- Rename mac2leuint32 to mac2le32 also add a comment
- use block_len and byte_len respectively for unaligned reads in sdio
- Propagate error in sdio_reg32_read
- Fix leaks and cleanups in usb probe
- Fix off by one in pkt->tc_queue check
- Remove some rc.{c/h} code that is unused
- Removed use_1mhz_probes scan param since we unconditionally set it
to true, as a result unconditionally set HOST_CMD_HW_SCAN_FLAGS_1MHZ_PROBES
- Implement flush with drop == false
- Move some macros / helper functions into stack that are generic
v1: https://lore.kernel.org/linux-wireless/20260227041108.66508-1-lachlan.hodges@morsemicro.com/
v2: https://lore.kernel.org/linux-wireless/20260430045615.334669-1-lachlan.hodges@morsemicro.com/
The driver has had many authors who are listed below in
alphabetical order:
Co-developed-by: Andrew Pope <andrew.pope@morsemicro.com>
Signed-off-by: Andrew Pope <andrew.pope@morsemicro.com>
Co-developed-by: Arien Judge <arien.judge@morsemicro.com>
Signed-off-by: Arien Judge <arien.judge@morsemicro.com>
Co-developed-by: Ayman Grais <ayman.grais@morsemicro.com>
Signed-off-by: Ayman Grais <ayman.grais@morsemicro.com>
Co-developed-by: Bassem Dawood <bassem@morsemicro.com>
Signed-off-by: Bassem Dawood <bassem@morsemicro.com>
Co-developed-by: Chetan Mistry <chetan.mistry@morsemicro.com>
Signed-off-by: Chetan Mistry <chetan.mistry@morsemicro.com>
Co-developed-by: Dan Callaghan <dan.callaghan@morsemicro.com>
Signed-off-by: Dan Callaghan <dan.callaghan@morsemicro.com>
Co-developed-by: James Herbert <james.herbert@morsemicro.com>
Signed-off-by: James Herbert <james.herbert@morsemicro.com>
Co-developed-by: Sahand Maleki <sahand.maleki@morsemicro.com>
Signed-off-by: Sahand Maleki <sahand.maleki@morsemicro.com>
Co-developed-by: Simon Wadsworth <simon@morsemicro.com>
Signed-off-by: Simon Wadsworth <simon@morsemicro.com>
Signed-off-by: Lachlan Hodges <lachlan.hodges@morsemicro.com>
Lachlan Hodges (33):
wifi: cfg80211: introduce helper to get S1G primary width
wifi: ieee80211: introduce generic KHZ_TO_HZ helper
wifi: mm81x: add bus.h
wifi: mm81x: add command.c
wifi: mm81x: add command_defs.h
wifi: mm81x: add command.h
wifi: mm81x: add core.c
wifi: mm81x: add core.h
wifi: mm81x: add fw.c
wifi: mm81x: add fw.h
wifi: mm81x: add hif.h
wifi: mm81x: add hw.c
wifi: mm81x: add hw.h
wifi: mm81x: add mac.c
wifi: mm81x: add mac.h
wifi: mm81x: add mmrc.c
wifi: mm81x: add mmrc.h
wifi: mm81x: add ps.c
wifi: mm81x: add ps.h
wifi: mm81x: add rate_code.h
wifi: mm81x: add rc.c
wifi: mm81x: add rc.h
mmc: sdio: add Morse Micro vendor ids
wifi: mm81x: add sdio.c
wifi: mm81x: add skbq.c
wifi: mm81x: add skbq.h
wifi: mm81x: add usb.c
wifi: mm81x: add yaps.c
wifi: mm81x: add yaps.h
wifi: mm81x: add yaps_hw.c
wifi: mm81x: add yaps_hw.h
wifi: mm81x: add Kconfig and Makefile
wifi: mm81x: add MAINTAINERS entry
MAINTAINERS | 8 +
drivers/net/wireless/Kconfig | 1 +
drivers/net/wireless/Makefile | 1 +
drivers/net/wireless/morsemicro/Kconfig | 15 +
drivers/net/wireless/morsemicro/Makefile | 2 +
drivers/net/wireless/morsemicro/mm81x/Kconfig | 24 +
.../net/wireless/morsemicro/mm81x/Makefile | 21 +
drivers/net/wireless/morsemicro/mm81x/bus.h | 99 +
.../net/wireless/morsemicro/mm81x/command.c | 563 ++++
.../net/wireless/morsemicro/mm81x/command.h | 85 +
.../wireless/morsemicro/mm81x/command_defs.h | 1658 +++++++++++
drivers/net/wireless/morsemicro/mm81x/core.c | 142 +
drivers/net/wireless/morsemicro/mm81x/core.h | 464 ++++
drivers/net/wireless/morsemicro/mm81x/fw.c | 732 +++++
drivers/net/wireless/morsemicro/mm81x/fw.h | 141 +
drivers/net/wireless/morsemicro/mm81x/hif.h | 117 +
drivers/net/wireless/morsemicro/mm81x/hw.c | 367 +++
drivers/net/wireless/morsemicro/mm81x/hw.h | 176 ++
drivers/net/wireless/morsemicro/mm81x/mac.c | 2443 +++++++++++++++++
drivers/net/wireless/morsemicro/mm81x/mac.h | 63 +
drivers/net/wireless/morsemicro/mm81x/mmrc.c | 1354 +++++++++
drivers/net/wireless/morsemicro/mm81x/mmrc.h | 193 ++
drivers/net/wireless/morsemicro/mm81x/ps.c | 120 +
drivers/net/wireless/morsemicro/mm81x/ps.h | 22 +
.../net/wireless/morsemicro/mm81x/rate_code.h | 177 ++
drivers/net/wireless/morsemicro/mm81x/rc.c | 494 ++++
drivers/net/wireless/morsemicro/mm81x/rc.h | 51 +
drivers/net/wireless/morsemicro/mm81x/sdio.c | 613 +++++
drivers/net/wireless/morsemicro/mm81x/skbq.c | 1065 +++++++
drivers/net/wireless/morsemicro/mm81x/skbq.h | 218 ++
drivers/net/wireless/morsemicro/mm81x/usb.c | 943 +++++++
drivers/net/wireless/morsemicro/mm81x/yaps.c | 704 +++++
drivers/net/wireless/morsemicro/mm81x/yaps.h | 77 +
.../net/wireless/morsemicro/mm81x/yaps_hw.c | 702 +++++
.../net/wireless/morsemicro/mm81x/yaps_hw.h | 52 +
include/linux/ieee80211.h | 1 +
include/linux/mmc/sdio_ids.h | 3 +
include/net/cfg80211.h | 20 +
38 files changed, 13931 insertions(+)
create mode 100644 drivers/net/wireless/morsemicro/Kconfig
create mode 100644 drivers/net/wireless/morsemicro/Makefile
create mode 100644 drivers/net/wireless/morsemicro/mm81x/Kconfig
create mode 100644 drivers/net/wireless/morsemicro/mm81x/Makefile
create mode 100644 drivers/net/wireless/morsemicro/mm81x/bus.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/command.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/command.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/command_defs.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/core.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/core.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/fw.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/fw.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/hif.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/hw.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/hw.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/mac.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/mac.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/mmrc.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/mmrc.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/ps.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/ps.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/rate_code.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/rc.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/rc.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/sdio.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/skbq.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/skbq.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/usb.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/yaps.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/yaps.h
create mode 100644 drivers/net/wireless/morsemicro/mm81x/yaps_hw.c
create mode 100644 drivers/net/wireless/morsemicro/mm81x/yaps_hw.h
--
2.43.0
next reply other threads:[~2026-06-26 6:30 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 6:28 Lachlan Hodges [this message]
2026-06-26 6:28 ` [PATCH wireless-next v3 01/33] wifi: cfg80211: introduce helper to get S1G primary width Lachlan Hodges
2026-06-26 6:28 ` [PATCH wireless-next v3 02/33] wifi: ieee80211: introduce generic KHZ_TO_HZ helper Lachlan Hodges
2026-06-26 6:28 ` [PATCH wireless-next v3 03/33] wifi: mm81x: add bus.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 04/33] wifi: mm81x: add command.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 05/33] wifi: mm81x: add command_defs.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 06/33] wifi: mm81x: add command.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 07/33] wifi: mm81x: add core.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 08/33] wifi: mm81x: add core.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 09/33] wifi: mm81x: add fw.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 10/33] wifi: mm81x: add fw.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 11/33] wifi: mm81x: add hif.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 12/33] wifi: mm81x: add hw.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 13/33] wifi: mm81x: add hw.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 14/33] wifi: mm81x: add mac.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 15/33] wifi: mm81x: add mac.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 16/33] wifi: mm81x: add mmrc.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 17/33] wifi: mm81x: add mmrc.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 18/33] wifi: mm81x: add ps.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 19/33] wifi: mm81x: add ps.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 20/33] wifi: mm81x: add rate_code.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 21/33] wifi: mm81x: add rc.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 22/33] wifi: mm81x: add rc.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 23/33] mmc: sdio: add Morse Micro vendor ids Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 24/33] wifi: mm81x: add sdio.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 25/33] wifi: mm81x: add skbq.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 26/33] wifi: mm81x: add skbq.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 27/33] wifi: mm81x: add usb.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 28/33] wifi: mm81x: add yaps.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 29/33] wifi: mm81x: add yaps.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 30/33] wifi: mm81x: add yaps_hw.c Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 31/33] wifi: mm81x: add yaps_hw.h Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 32/33] wifi: mm81x: add Kconfig and Makefile Lachlan Hodges
2026-06-26 6:29 ` [PATCH wireless-next v3 33/33] wifi: mm81x: add MAINTAINERS entry Lachlan Hodges
2026-06-29 0:13 ` [PATCH wireless-next v3 00/33] wifi: mm81x: add mm81x driver Lachlan Hodges
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260626063014.1275235-1-lachlan.hodges@morsemicro.com \
--to=lachlan.hodges@morsemicro.com \
--cc=andrew.pope@morsemicro.com \
--cc=arien.judge@morsemicro.com \
--cc=ayman.grais@morsemicro.com \
--cc=bassem@morsemicro.com \
--cc=chetan.mistry@morsemicro.com \
--cc=dan.callaghan@morsemicro.com \
--cc=james.herbert@morsemicro.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=sahand.maleki@morsemicro.com \
--cc=simon@morsemicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox