[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <fe78857f-956c-439e-a1a7-95ea19c8e932@oss.qualcomm.com>
Date: Mon, 17 Nov 2025 11:10:24 -0800
From: Jeff Johnson <jeff.johnson@....qualcomm.com>
To: Jeff Chen <jeff.chen_1@....com>, linux-wireless@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, briannorris@...omium.org,
johannes@...solutions.net, francesco@...cini.it,
tsung-hsien.hsieh@....com, s.hauer@...gutronix.de
Subject: Re: [PATCH v7 00/22] wifi: nxpwifi: create nxpwifi to support iw61x
On 11/17/2025 3:00 AM, Jeff Chen wrote:
> This series adds a new full-MAC Wi-Fi driver `nxpwifi` to support NXP IW61x
> chip family. These chips are tri-radio single-chip solutions with Wi-Fi 6
> (1x1, 2.4/5 GHz), Bluetooth 5.4, and IEEE 802.15.4. Communication with the
> external host is via SDIO interface. The driver is tested on i.MX8M Mini
> EVK in both STA and AP mode.
>
> This driver is not based on mac80211. It derives from mwifiex, but due to
> significant differences in firmware architecture, host command interface,
> and supported features, it was not feasible to extend mwifiex without risk
> of regressions. Thus, a new driver is introduced. Future NXP Wi-Fi chipsets
> will also be supported under `nxpwifi`.
>
> The driver passes checkpatch. WPA2/WPA3 personal/enterprise is currently
> handled in host via wpa_supplicant/hostapd.
>
> v4 adds support for TWT, monitor mode, WPA3 Enterprise Suite-B, and various
> fixes and improvements. See below for full changelog.
>
> Data sheet is available at:
> https://www.nxp.com/docs/en/data-sheet/IW612.pdf
>
> Change history:
>
> v7:
> - Addressed review feedback from v6
> - Removed unused variable `ext_rate_info` in `nxpwifi_rxpdinfo_to_radiotapinfo()
> - Radiotap handling fixes:
> - Converted fields to `__le16`/`__le64`
> - Applied `cpu_to_le16()`/`cpu_to_le64()` for endian correctness
> - Replaced `jiffies` with `ktime_get_ns()/1000` for timestamp
> - Validated channel frequency conversion and removed redundant code
> - General cleanup of endian conversions and Sparse warnings
> - Improved HE capability setup via `_ieee80211_set_sband_iftype_data()`
> - TWT configuration fixes:
> - Updated structs to `__le16`/`__le32`
> - Corrected debugfs write helpers for endian conversions
> - Removed redundant conversions in `nxpwifi_cmd_twt_cfg()`
> - Scan handling fixes:
> - Changed OUI variables to `__be32`
> - Used `le16_to_cpu()` for `ext_cap->header.len`
> - Moved element pointer declaration outside `switch`
> - HW spec parsing fix:
> - Added `le32_to_cpu()` before `GET_MPDU_DENSITY()`
> - Cfg80211 handling fix:
> - Moved `legacy_rates[]` definition outside `switch` block
>
> v6:
> - Removed custom locking (main_locked, main_proc_lock, more_task_flag)
> - Refactored main process to rely solely on workqueue
> - SDIO interrupt now only queues main_work; avoids direct call to nxpwifi_main_process()
> - Introduced atomic iface_changing flag to block main process during interface transitions
> - Split monolithic main process logic into helper functions for better readability
> - Improved exit logic to avoid lost-kick scenarios and ensure all pending tasks are processed
> - Replaced rcu_read_lock()/unlock() pairs with guard(rcu)() for modern kernel style
> - Code cleanups based on review feedback
>
> v5:
> - Fixed build errors introduced in v4.
>
> v4:
> - Added support for TWT (STA mode)
> - Added support for Monitor mode
> - Added support for WPA3 Enterprise Suite-B
> - Bug fix: In BGN/AN HT40 mode, throughput was 50% lower than expected
> - Bug fix: In STA 2.4G HE40 mode, throughput was 80% lower than expected
> - Use wiphy work instead of general workqueue for cfg80211 ops
> - Introduced RCU protection for ba, rx_reorder, and sta_lists
> - Used per-TID spinlock for tx_ba / rx_reorder lists to improve
> concurrency
> - Replaced mutex_lock with wiphy_lock
> - Reverted "use tasklet for Rx" (back to workqueue)
> - Refactored HE capability handling for better clarity and
> maintainability
> - Used standard kernel helpers for MAC address handling
> - Replaced proprietary nxpwifi_ieee80211 with standard ieee80211_mgmt
> structure
> - Used u32_get_bits() for VHT capability field access
> - Replaced LOW_PRIO_TID with TC_PRIO_BESTEFFORT for skb priority
> - Removed static WPA/RSN OUI table; now derived from cipher suite ID
> - Removed redundant helper functions: has_vendor_hdr and has_ieee_hdr
>
> v3:
> - Enable 802.11ax (Wi-Fi 6) for both AP and STA mode.
> - Extend driver verion string with hotfix number.
> - Remove Rx mlme work.
> - Remove all useless check of netif_carrier_ok().
> - Merge decl.h to cfg.h.
> - Remove unnecessary check for wiphy parameters setting.
> - Synchronize following commits from Mwifiex:
> wifi: mwifiex: replace open-coded module_sdio_driver()
> wifi: mwifiex: Fix interface type change
> wifi: mwifiex: Do not return unused priv in mwifiex_get_priv_by_id()
> wifi: mwifiex: increase max_num_akm_suites
> wifi: mwifiex: duplicate static structs used in driver instances
> wifi: mwifiex: keep mwifiex_cfg80211_ops constant
> wifi: mwifiex: Fix uninitialized variable in
> mwifiex_cfg80211_authenticate()
> wifi: mwifiex: remove unnecessary checks for valid priv
> wifi: mwifiex: Fix memcpy() field-spanning write warning in
> mwifiex_cmd_802_11_scan_ext()
> wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq()
>
> v2:
> - Rename ioctl.h and sta_ioctl.c to cfg.h and sta_cfg.c.
> - Remove useless header file semaphore.h.
> - Use static variable for cookie.
> - Modify nxpwifi_register to use ERR_PTR, IS_ERR and PTR_ERR.
> - Use error number for error code.
> - Remove unnecessary private ie definitions.
> - Remove mutex async_mutex and related code.
> - Remove unnecessary work queue.
> - Add the support for PSK SHA256.
> - Use tasklet for Rx.
> - Remove unused functions.
> - Remove compile warning.
>
> Jeff Chen (22):
> wifi: nxpwifi: Add 802.11n support for client and AP modes
> wifi: nxpwifi: add initial support for 802.11ac
> wifi: nxpwifi: add initial support for 802.11ax
> wifi: nxpwifi: add support for 802.11h (DFS and TPC)
> wifi: nxpwifi: add support for WMM
> wifi: nxpwifi: add scan support
> wifi: nxpwifi: add join and association support
> wifi: nxpwifi: add channel/frequency/power (cfp) support
> wifi: nxpwifi: add configuration support
> wifi: nxpwifi: implement cfg80211 ops for STA and AP modes
> wifi: nxpwifi: add firmware command and TLV definitions
> wifi: nxpwifi: introduce command and event handling infrastructure
> wifi: nxpwifi: add data path support for STA and AP modes
> wifi: nxpwifi: add debugfs support for diagnostics and testing
> wifi: nxpwifi: add ethtool support for Wake-on-LAN
> wifi: nxpwifi: add utility and IE handling support
> wifi: nxpwifi: add driver initialization and shutdown support
> wifi: nxpwifi: add core driver implementation
> wifi: nxpwifi: add initial SDIO bus driver support
> wifi: nxpwifi: add NXP vendor and IW61x device IDs to sdio_ids.h
> wifi: nxpwifi: add Kconfig and Makefile for kernel integration
> wifi: nxpwifi: add MAINTAINERS entry for nxpwifi driver
>
> MAINTAINERS | 8 +
> drivers/net/wireless/Kconfig | 1 +
> drivers/net/wireless/Makefile | 1 +
> drivers/net/wireless/nxp/Kconfig | 17 +
> drivers/net/wireless/nxp/Makefile | 3 +
> drivers/net/wireless/nxp/nxpwifi/11ac.c | 289 ++
> drivers/net/wireless/nxp/nxpwifi/11ac.h | 33 +
> drivers/net/wireless/nxp/nxpwifi/11ax.c | 596 +++
> drivers/net/wireless/nxp/nxpwifi/11ax.h | 77 +
> drivers/net/wireless/nxp/nxpwifi/11h.c | 346 ++
> drivers/net/wireless/nxp/nxpwifi/11n.c | 887 ++++
> drivers/net/wireless/nxp/nxpwifi/11n.h | 164 +
> drivers/net/wireless/nxp/nxpwifi/11n_aggr.c | 275 ++
> drivers/net/wireless/nxp/nxpwifi/11n_aggr.h | 21 +
> .../net/wireless/nxp/nxpwifi/11n_rxreorder.c | 924 ++++
> .../net/wireless/nxp/nxpwifi/11n_rxreorder.h | 71 +
> drivers/net/wireless/nxp/nxpwifi/Kconfig | 22 +
> drivers/net/wireless/nxp/nxpwifi/Makefile | 39 +
> drivers/net/wireless/nxp/nxpwifi/cfg.h | 984 ++++
> drivers/net/wireless/nxp/nxpwifi/cfg80211.c | 4049 +++++++++++++++++
> drivers/net/wireless/nxp/nxpwifi/cfg80211.h | 19 +
> drivers/net/wireless/nxp/nxpwifi/cfp.c | 475 ++
> drivers/net/wireless/nxp/nxpwifi/cmdevt.c | 1283 ++++++
> drivers/net/wireless/nxp/nxpwifi/cmdevt.h | 98 +
> drivers/net/wireless/nxp/nxpwifi/debugfs.c | 1221 +++++
> drivers/net/wireless/nxp/nxpwifi/ethtool.c | 58 +
> drivers/net/wireless/nxp/nxpwifi/fw.h | 2400 ++++++++++
> drivers/net/wireless/nxp/nxpwifi/ie.c | 500 ++
> drivers/net/wireless/nxp/nxpwifi/init.c | 680 +++
> drivers/net/wireless/nxp/nxpwifi/join.c | 910 ++++
> drivers/net/wireless/nxp/nxpwifi/main.c | 1834 ++++++++
> drivers/net/wireless/nxp/nxpwifi/main.h | 1836 ++++++++
> drivers/net/wireless/nxp/nxpwifi/scan.c | 2859 ++++++++++++
> drivers/net/wireless/nxp/nxpwifi/sdio.c | 2649 +++++++++++
> drivers/net/wireless/nxp/nxpwifi/sdio.h | 340 ++
> drivers/net/wireless/nxp/nxpwifi/sta_cfg.c | 1319 ++++++
> drivers/net/wireless/nxp/nxpwifi/sta_cmd.c | 3449 ++++++++++++++
> drivers/net/wireless/nxp/nxpwifi/sta_event.c | 868 ++++
> drivers/net/wireless/nxp/nxpwifi/sta_rx.c | 250 +
> drivers/net/wireless/nxp/nxpwifi/sta_tx.c | 208 +
> drivers/net/wireless/nxp/nxpwifi/txrx.c | 358 ++
> drivers/net/wireless/nxp/nxpwifi/uap_cmd.c | 1234 +++++
> drivers/net/wireless/nxp/nxpwifi/uap_event.c | 490 ++
> drivers/net/wireless/nxp/nxpwifi/uap_txrx.c | 506 ++
> drivers/net/wireless/nxp/nxpwifi/util.c | 1570 +++++++
> drivers/net/wireless/nxp/nxpwifi/util.h | 132 +
> drivers/net/wireless/nxp/nxpwifi/wmm.c | 1379 ++++++
> drivers/net/wireless/nxp/nxpwifi/wmm.h | 78 +
> include/linux/mmc/sdio_ids.h | 3 +
> 49 files changed, 37813 insertions(+)
> create mode 100644 drivers/net/wireless/nxp/Kconfig
> create mode 100644 drivers/net/wireless/nxp/Makefile
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ac.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ac.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ax.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ax.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11h.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_aggr.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_aggr.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_rxreorder.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_rxreorder.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/Kconfig
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/Makefile
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg80211.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg80211.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfp.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cmdevt.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/cmdevt.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/debugfs.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/ethtool.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/fw.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/ie.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/init.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/join.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/main.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/main.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/scan.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sdio.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sdio.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_cfg.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_cmd.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_event.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_rx.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_tx.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/txrx.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_cmd.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_event.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_txrx.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/util.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/util.h
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/wmm.c
> create mode 100644 drivers/net/wireless/nxp/nxpwifi/wmm.h
>
So that this series would have an additional set of eyes I ran this through
the automation I use for ath.git.
It reports multiple instances of using the now obsolete networking multi-line
comment style.
Starting from the first patch:
+/* Fills HT capability information field, AMPDU Parameters field, HT extended
+/* This function returns the pointer to an entry in BA Stream
+/* This function handles the command response of delete a block
...
Current guidance is to use the standard multi-line comment style
/*
* first line of comment
* [more lines of comment]
* last line of commnt
*/
It also flagged one incorrect use of kernel-doc comment style:
+ /** rate for LG pkt, RATE flag will be present, it shows datarate in
There are also numerous spelling issues reported by checkpatch.pl --codespell
TYPO_SPELLING: 'interation' may be misspelled - perhaps 'iteration'?
TYPO_SPELLING: 'Dimentions' may be misspelled - perhaps 'Dimensions'?
TYPO_SPELLING: 'interfacces' may be misspelled - perhaps 'interfaces'?
TYPO_SPELLING: 'formate' may be misspelled - perhaps 'format'?
TYPO_SPELLING: 'verion' may be misspelled - perhaps 'version'?
TYPO_SPELLING: 'Timstamp' may be misspelled - perhaps 'Timestamp'?
TYPO_SPELLING: 'intializes' may be misspelled - perhaps 'initializes'?
TYPO_SPELLING: 'statistc' may be misspelled - perhaps 'statistic'?
Also "wifi: nxpwifi: add initial SDIO bus driver support" reports
UNDOCUMENTED_DT_STRING: DT compatible string "nxp,iw61x" appears un-documented
-- check ./Documentation/devicetree/bindings/
Is there an associated DT patch out there?
The MAINTAINERS patch reports multiple instances of:
MAINTAINERS_STYLE: MAINTAINERS entries use one tab after TYPE:
So suggest you use all options to checkpatch.pl on your series
/jeff
Powered by blists - more mailing lists