Linux MultiMedia Card development
 help / color / mirror / Atom feed
* [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