* [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610
@ 2026-09-08 9:37 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID Jeff Chen
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Jeff Chen @ 2026-09-08 9:37 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, francesco, linux-mmc, Ulf Hansson, Jeff Chen
From: Jeff Chen <jeff.chen_1@nxp.com>
This series adds support for the NXP SDIO IW610 to the nxpwifi driver.
IW610 uses different SDIO device IDs and a different firmware image
from the existing IW61x devices. It shares the same SDIO register
layout, so most of the existing SDIO support can be reused.
The first two patches update the MMC subsystem. They add the SDIO IDs
needed by IW610 and apply the required
MMC_QUIRK_BLKSZ_FOR_BYTE_MODE quirk. The last two patches add SDIO
IW610 support to nxpwifi and limit channel width requests based on
firmware capabilities.
Ulf, could you please Ack patches 1 and 2?
[1/4] mmc: sdio: add NXP IW610 device ID
Add SDIO device ID 0x0215 for IW610.
[2/4] mmc: core: add IW610 base ID and block-size quirk
Add base card ID 0x0214 and apply
MMC_QUIRK_BLKSZ_FOR_BYTE_MODE.
[3/4] wifi: nxpwifi: add support for SDIO IW610
Add the IW610 device descriptor and firmware name.
[4/4] wifi: nxpwifi: restrict channel width on 20 MHz-only hardware
Do not request 40 MHz or 80 MHz operation when the firmware
does not support it.
Tested on:
- NXP i.MX93 EVK running the NXP BSP kernel
- Lenovo ThinkPad T430 running current wireless-next
Jeff Chen (4):
mmc: sdio: add NXP IW610 device ID
mmc: core: add NXP IW610 base ID and block size quirk
wifi: nxpwifi: Add support for SDIO-based IW610
wifi: nxpwifi: Limit channel width based on firmware capability
drivers/mmc/core/quirks.h | 3 +++
drivers/net/wireless/nxp/nxpwifi/11n.c | 4 +++-
drivers/net/wireless/nxp/nxpwifi/fw.h | 2 ++
drivers/net/wireless/nxp/nxpwifi/sdio.c | 16 ++++++++++++++++
drivers/net/wireless/nxp/nxpwifi/sdio.h | 1 +
include/linux/mmc/sdio_ids.h | 2 ++
6 files changed, 27 insertions(+), 1 deletion(-)
base-commit: 1b60ed34f712e9f606d80951f1586f4274ebadf1
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID
2026-09-08 9:37 [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610 Jeff Chen
@ 2026-09-08 9:37 ` Jeff Chen
2026-09-11 15:28 ` Ulf Hansson
2026-09-08 9:37 ` [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk Jeff Chen
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Jeff Chen @ 2026-09-08 9:37 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, francesco, linux-mmc, Ulf Hansson, Jeff Chen
From: Jeff Chen <jeff.chen_1@nxp.com>
Add SDIO device ID (0x0215) for NXP IW610 to sdio_ids.h. It is used
by the nxpwifi driver to probe the IW610 chip over SDIO.
Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
---
include/linux/mmc/sdio_ids.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
index afae93f6f245..5eff5e348eb0 100644
--- a/include/linux/mmc/sdio_ids.h
+++ b/include/linux/mmc/sdio_ids.h
@@ -123,6 +123,7 @@
#define SDIO_VENDOR_ID_NXP 0x0471
#define SDIO_DEVICE_ID_NXP_IW61X_BASE 0x0204
#define SDIO_DEVICE_ID_NXP_IW61X 0x0205
+#define SDIO_DEVICE_ID_NXP_IW610 0x0215
#define SDIO_VENDOR_ID_REALTEK 0x024c
#define SDIO_DEVICE_ID_REALTEK_RTW8723BS 0xb723
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk
2026-09-08 9:37 [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID Jeff Chen
@ 2026-09-08 9:37 ` Jeff Chen
2026-09-11 15:28 ` Ulf Hansson
2026-09-08 9:37 ` [PATCH wireless-next 3/4] wifi: nxpwifi: Add support for SDIO-based IW610 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 4/4] wifi: nxpwifi: Limit channel width based on firmware capability Jeff Chen
3 siblings, 1 reply; 7+ messages in thread
From: Jeff Chen @ 2026-09-08 9:37 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, francesco, linux-mmc, Ulf Hansson, Jeff Chen
From: Jeff Chen <jeff.chen_1@nxp.com>
The NXP IW610 SDIO chipset identifies itself with a base card ID
(0x0214) during the initial MMC bus scan, whereas the WLAN function
reports a different ID (0x0215).
Like the IW61x, the IW610 requires MMC_QUIRK_BLKSZ_FOR_BYTE_MODE for
correct byte-mode block size handling. Since SDIO fixups are applied
before function devices are enumerated, the quirk must be associated
with the base card ID rather than the WLAN function ID.
Add the SDIO_DEVICE_ID_NXP_IW610_BASE definition and apply the required
fixup in the SDIO quirk table.
Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
---
drivers/mmc/core/quirks.h | 3 +++
include/linux/mmc/sdio_ids.h | 1 +
2 files changed, 4 insertions(+)
diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
index ae3ece89d0aa..98cb680e3ace 100644
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
@@ -211,6 +211,9 @@ static const struct mmc_fixup __maybe_unused sdio_fixup_methods[] = {
SDIO_FIXUP(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW61X_BASE,
add_quirk, MMC_QUIRK_BLKSZ_FOR_BYTE_MODE),
+ SDIO_FIXUP(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW610_BASE,
+ add_quirk, MMC_QUIRK_BLKSZ_FOR_BYTE_MODE),
+
END_FIXUP
};
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
index 5eff5e348eb0..dfffda3d8002 100644
--- a/include/linux/mmc/sdio_ids.h
+++ b/include/linux/mmc/sdio_ids.h
@@ -123,6 +123,7 @@
#define SDIO_VENDOR_ID_NXP 0x0471
#define SDIO_DEVICE_ID_NXP_IW61X_BASE 0x0204
#define SDIO_DEVICE_ID_NXP_IW61X 0x0205
+#define SDIO_DEVICE_ID_NXP_IW610_BASE 0x0214
#define SDIO_DEVICE_ID_NXP_IW610 0x0215
#define SDIO_VENDOR_ID_REALTEK 0x024c
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH wireless-next 3/4] wifi: nxpwifi: Add support for SDIO-based IW610
2026-09-08 9:37 [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk Jeff Chen
@ 2026-09-08 9:37 ` Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 4/4] wifi: nxpwifi: Limit channel width based on firmware capability Jeff Chen
3 siblings, 0 replies; 7+ messages in thread
From: Jeff Chen @ 2026-09-08 9:37 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, francesco, linux-mmc, Ulf Hansson, Jeff Chen
From: Jeff Chen <jeff.chen_1@nxp.com>
Add the IW610 SDIO device ID to the supported device table. This
enables driver probing, interface initialization, and firmware
download for the NXP IW610 wireless chipset.
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
---
drivers/net/wireless/nxp/nxpwifi/sdio.c | 16 ++++++++++++++++
drivers/net/wireless/nxp/nxpwifi/sdio.h | 1 +
2 files changed, 17 insertions(+)
diff --git a/drivers/net/wireless/nxp/nxpwifi/sdio.c b/drivers/net/wireless/nxp/nxpwifi/sdio.c
index 8ef0f6eb49e2..f4de494bf2f2 100644
--- a/drivers/net/wireless/nxp/nxpwifi/sdio.c
+++ b/drivers/net/wireless/nxp/nxpwifi/sdio.c
@@ -96,6 +96,19 @@ static const struct nxpwifi_sdio_device nxpwifi_sdio_iw61x = {
.can_ext_scan = true,
};
+static const struct nxpwifi_sdio_device nxpwifi_sdio_iw610 = {
+ .firmware = IW610_SDIO_FW_NAME,
+ .reg = &nxpwifi_reg_iw61x,
+ .max_ports = 32,
+ .mp_agg_pkt_limit = 16,
+ .tx_buf_size = NXPWIFI_TX_DATA_BUF_SIZE_4K,
+ .mp_tx_agg_buf_size = NXPWIFI_MP_AGGR_BSIZE_MAX,
+ .mp_rx_agg_buf_size = NXPWIFI_MP_AGGR_BSIZE_MAX,
+ .can_dump_fw = true,
+ .fw_dump_enh = true,
+ .can_ext_scan = true,
+};
+
static struct memory_type_mapping generic_mem_type_map[] = {
{"DUMP", NULL, 0, 0xDD},
};
@@ -458,6 +471,8 @@ static void nxpwifi_sdio_coredump(struct device *dev)
static const struct sdio_device_id nxpwifi_ids[] = {
{SDIO_DEVICE(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW61X),
.driver_data = (unsigned long)&nxpwifi_sdio_iw61x},
+ {SDIO_DEVICE(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW610),
+ .driver_data = (unsigned long)&nxpwifi_sdio_iw610},
{},
};
@@ -2326,3 +2341,4 @@ MODULE_DESCRIPTION("NXP WiFi SDIO Driver version " SDIO_VERSION);
MODULE_VERSION(SDIO_VERSION);
MODULE_LICENSE("GPL");
MODULE_FIRMWARE(IW61X_SDIO_FW_NAME);
+MODULE_FIRMWARE(IW610_SDIO_FW_NAME);
diff --git a/drivers/net/wireless/nxp/nxpwifi/sdio.h b/drivers/net/wireless/nxp/nxpwifi/sdio.h
index de5c884a5b14..e9881448fe2f 100644
--- a/drivers/net/wireless/nxp/nxpwifi/sdio.h
+++ b/drivers/net/wireless/nxp/nxpwifi/sdio.h
@@ -11,6 +11,7 @@
#include "main.h"
#define IW61X_SDIO_FW_NAME "nxp/sd_w61x_v1.bin.se"
+#define IW610_SDIO_FW_NAME "nxp/sd_iw610.bin.se"
#define BLOCK_MODE 1
#define BYTE_MODE 0
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH wireless-next 4/4] wifi: nxpwifi: Limit channel width based on firmware capability
2026-09-08 9:37 [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610 Jeff Chen
` (2 preceding siblings ...)
2026-09-08 9:37 ` [PATCH wireless-next 3/4] wifi: nxpwifi: Add support for SDIO-based IW610 Jeff Chen
@ 2026-09-08 9:37 ` Jeff Chen
3 siblings, 0 replies; 7+ messages in thread
From: Jeff Chen @ 2026-09-08 9:37 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, francesco, linux-mmc, Ulf Hansson, Jeff Chen
From: Jeff Chen <jeff.chen_1@nxp.com>
nxpwifi_cmd_append_11n_tlv() derived the channel width solely from
the AP's advertised operating bandwidth and could request 40/80 MHz
operation even when the firmware did not support it.
On 20 MHz-only devices such as IW610, this may cause the firmware to
be configured with an unsupported channel width.
Check firmware bandwidth capabilities before selecting the channel
width:
- Allow 80 MHz only when ISSUPP_NO_80MHZ() is false.
- Allow 40 MHz only when ISSUPP_40MHZ_ENABLED() is true.
- Otherwise fall back to 20 MHz operation.
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
---
drivers/net/wireless/nxp/nxpwifi/11n.c | 4 +++-
drivers/net/wireless/nxp/nxpwifi/fw.h | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/nxp/nxpwifi/11n.c b/drivers/net/wireless/nxp/nxpwifi/11n.c
index c2a54d781b42..a83e29ecc466 100644
--- a/drivers/net/wireless/nxp/nxpwifi/11n.c
+++ b/drivers/net/wireless/nxp/nxpwifi/11n.c
@@ -349,6 +349,7 @@ nxpwifi_cmd_append_11n_tlv(struct nxpwifi_private *priv,
nxpwifi_band_to_radio_type((u8)bss_desc->bss_band);
if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) &&
+ !ISSUPP_NO_80MHZ(priv->adapter->fw_cap_ext) &&
bss_desc->bcn_vht_oper &&
bss_desc->bcn_vht_oper->chan_width ==
IEEE80211_VHT_CHANWIDTH_80MHZ) {
@@ -359,7 +360,8 @@ nxpwifi_cmd_append_11n_tlv(struct nxpwifi_private *priv,
((CHAN_BW_80MHZ <<
BAND_CFG_CHAN_WIDTH_SHIFT_BIT) &
BAND_CFG_CHAN_WIDTH_MASK);
- } else if (sband->ht_cap.cap &
+ } else if (ISSUPP_40MHZ_ENABLED(priv->adapter->fw_cap_ext) &&
+ sband->ht_cap.cap &
IEEE80211_HT_CAP_SUP_WIDTH_20_40 &&
bss_desc->bcn_ht_oper->ht_param &
IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
diff --git a/drivers/net/wireless/nxp/nxpwifi/fw.h b/drivers/net/wireless/nxp/nxpwifi/fw.h
index 188110b020cf..124728a72442 100644
--- a/drivers/net/wireless/nxp/nxpwifi/fw.h
+++ b/drivers/net/wireless/nxp/nxpwifi/fw.h
@@ -334,6 +334,8 @@ enum NXPWIFI_802_11_PRIVACY_FILTER {
#define DFS_CHAN_MOVE_TIME 10000
#define ISSUPP_11AXENABLED(fw_cap_ext) ((fw_cap_ext) & BIT(7))
+#define ISSUPP_NO_80MHZ(fw_cap_ext) ((fw_cap_ext) & BIT(8))
+#define ISSUPP_40MHZ_ENABLED(fw_cap_ext) ((fw_cap_ext) & BIT(15))
#define HOST_CMD_GET_HW_SPEC 0x0003
#define HOST_CMD_802_11_SCAN 0x0006
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID
2026-09-08 9:37 ` [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID Jeff Chen
@ 2026-09-11 15:28 ` Ulf Hansson
0 siblings, 0 replies; 7+ messages in thread
From: Ulf Hansson @ 2026-09-11 15:28 UTC (permalink / raw)
To: Jeff Chen
Cc: linux-wireless, johannes, francesco, linux-mmc, Ulf Hansson,
Jeff Chen
On Tue, Sep 8, 2026 at 11:38 AM Jeff Chen <chunfan.chen@gmail.com> wrote:
>
> From: Jeff Chen <jeff.chen_1@nxp.com>
>
> Add SDIO device ID (0x0215) for NXP IW610 to sdio_ids.h. It is used
> by the nxpwifi driver to probe the IW610 chip over SDIO.
>
> Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
Acked-by: Ulf Hansson <ulfh@kernel.org>
Kind regards
Uffe
> ---
> include/linux/mmc/sdio_ids.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
> index afae93f6f245..5eff5e348eb0 100644
> --- a/include/linux/mmc/sdio_ids.h
> +++ b/include/linux/mmc/sdio_ids.h
> @@ -123,6 +123,7 @@
> #define SDIO_VENDOR_ID_NXP 0x0471
> #define SDIO_DEVICE_ID_NXP_IW61X_BASE 0x0204
> #define SDIO_DEVICE_ID_NXP_IW61X 0x0205
> +#define SDIO_DEVICE_ID_NXP_IW610 0x0215
>
> #define SDIO_VENDOR_ID_REALTEK 0x024c
> #define SDIO_DEVICE_ID_REALTEK_RTW8723BS 0xb723
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk
2026-09-08 9:37 ` [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk Jeff Chen
@ 2026-09-11 15:28 ` Ulf Hansson
0 siblings, 0 replies; 7+ messages in thread
From: Ulf Hansson @ 2026-09-11 15:28 UTC (permalink / raw)
To: Jeff Chen
Cc: linux-wireless, johannes, francesco, linux-mmc, Ulf Hansson,
Jeff Chen
On Tue, Sep 8, 2026 at 11:39 AM Jeff Chen <chunfan.chen@gmail.com> wrote:
>
> From: Jeff Chen <jeff.chen_1@nxp.com>
>
> The NXP IW610 SDIO chipset identifies itself with a base card ID
> (0x0214) during the initial MMC bus scan, whereas the WLAN function
> reports a different ID (0x0215).
>
> Like the IW61x, the IW610 requires MMC_QUIRK_BLKSZ_FOR_BYTE_MODE for
> correct byte-mode block size handling. Since SDIO fixups are applied
> before function devices are enumerated, the quirk must be associated
> with the base card ID rather than the WLAN function ID.
>
> Add the SDIO_DEVICE_ID_NXP_IW610_BASE definition and apply the required
> fixup in the SDIO quirk table.
>
> Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com>
Acked-by: Ulf Hansson <ulfh@kernel.org>
Kind regards
Uffe
> ---
> drivers/mmc/core/quirks.h | 3 +++
> include/linux/mmc/sdio_ids.h | 1 +
> 2 files changed, 4 insertions(+)
>
> diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
> index ae3ece89d0aa..98cb680e3ace 100644
> --- a/drivers/mmc/core/quirks.h
> +++ b/drivers/mmc/core/quirks.h
> @@ -211,6 +211,9 @@ static const struct mmc_fixup __maybe_unused sdio_fixup_methods[] = {
> SDIO_FIXUP(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW61X_BASE,
> add_quirk, MMC_QUIRK_BLKSZ_FOR_BYTE_MODE),
>
> + SDIO_FIXUP(SDIO_VENDOR_ID_NXP, SDIO_DEVICE_ID_NXP_IW610_BASE,
> + add_quirk, MMC_QUIRK_BLKSZ_FOR_BYTE_MODE),
> +
> END_FIXUP
> };
>
> diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
> index 5eff5e348eb0..dfffda3d8002 100644
> --- a/include/linux/mmc/sdio_ids.h
> +++ b/include/linux/mmc/sdio_ids.h
> @@ -123,6 +123,7 @@
> #define SDIO_VENDOR_ID_NXP 0x0471
> #define SDIO_DEVICE_ID_NXP_IW61X_BASE 0x0204
> #define SDIO_DEVICE_ID_NXP_IW61X 0x0205
> +#define SDIO_DEVICE_ID_NXP_IW610_BASE 0x0214
> #define SDIO_DEVICE_ID_NXP_IW610 0x0215
>
> #define SDIO_VENDOR_ID_REALTEK 0x024c
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-11 15:28 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-08 9:37 [PATCH wireless-next 0/4] wifi: nxpwifi: add support for SDIO IW610 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 1/4] mmc: sdio: add NXP IW610 device ID Jeff Chen
2026-09-11 15:28 ` Ulf Hansson
2026-09-08 9:37 ` [PATCH wireless-next 2/4] mmc: core: add NXP IW610 base ID and block size quirk Jeff Chen
2026-09-11 15:28 ` Ulf Hansson
2026-09-08 9:37 ` [PATCH wireless-next 3/4] wifi: nxpwifi: Add support for SDIO-based IW610 Jeff Chen
2026-09-08 9:37 ` [PATCH wireless-next 4/4] wifi: nxpwifi: Limit channel width based on firmware capability Jeff Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox