mwifiex material for next
Subsystems (4)
cover mwifiex material for next
Amend mwifiex with a missing compatible string, add support for SD8978 chips (aka IW416) and silence a gratuitous message on probe.
The firmware for SD8978 is available at the following URL, I've reached out to NXP to get it into the linux-firmware repository:
Thanks!
Lukas Wunner (3):
wifi: mwifiex: Add missing compatible string for SD8787
wifi: mwifiex: Support SD8978 chipset
wifi: mwifiex: Support firmware hotfix version in GET_HW_SPEC
responses
.../bindings/net/wireless/marvell-8xxx.txt | 4 ++- drivers/net/wireless/marvell/mwifiex/Kconfig | 5 ++-- drivers/net/wireless/marvell/mwifiex/cmdevt.c | 5 ++++ drivers/net/wireless/marvell/mwifiex/fw.h | 1 + drivers/net/wireless/marvell/mwifiex/sdio.c | 26 +++++++++++++++++-- drivers/net/wireless/marvell/mwifiex/sdio.h | 1 + include/linux/mmc/sdio_ids.h | 1 + 7 files changed, 38 insertions(+), 5 deletions(-)
Signature · 1 line
2.39.1
PATCH 1/3 wifi: mwifiex: Add missing compatible string for SD8787
Commit e3fffc1f0b47 ("devicetree: document new marvell-8xxx and pwrseq-sd8787 options") documented a compatible string for SD8787 in the devicetree bindings, but neglected to add it to the mwifiex driver.
--- drivers/net/wireless/marvell/mwifiex/sdio.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/marvell/mwifiex/sdio.c +1 -0
@@ -480,6 +480,7 @@ static struct memory_type_mapping mem_type_mapping_tbl[] = { };static const struct of_device_id mwifiex_sdio_of_match_table[] = { + { .compatible ="marvell,sd8787" }, { .compatible ="marvell,sd8897" }, { .compatible ="marvell,sd8997" }, { }
Signature · 1 line
2.39.1
Re: [PATCH 1/3] wifi: mwifiex: Add missing compatible string for SD8787
Quoted 8 lines · Lukas Wunner
Commit
e3fffc1f0b47("devicetree: document new marvell-8xxx and pwrseq-sd8787 options") documented a compatible string for SD8787 in the devicetree bindings, but neglected to add it to the mwifiex driver.Fixes e3fffc1f0b47 ("devicetree: document new marvell-8xxx and pwrseq-sd8787 options")Signed-off-by Lukas Wunner <[email protected]>Cc [email protected] # v4.11+Cc Matt Ranostay <[email protected]>
3 patches applied to wireless-next.git, thanks.
36dd7a4c6226 wifi: mwifiex: Add missing compatible string for SD8787 bba047f15851 wifi: mwifiex: Support SD8978 chipset7715d79553de wifi: mwifiex: Support firmware hotfix version in GET_HW_SPEC responses
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/320de5005ff3b8fd76be2d2b859fd021689c3681.1674827105.git.lukas@wunner.de/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
PATCH 2/3 wifi: mwifiex: Support SD8978 chipset
In reply to Lukas WunnerThe Marvell SD8978 (aka NXP IW416) uses identical registers as SD8987, so reuse the existing mwifiex_reg_sd8987 definition.
Note that mwifiex_reg_sd8977 and mwifiex_reg_sd8997 are likewise identical, save for the fw_dump_ctrl register: They define it as 0xf0 whereas mwifiex_reg_sd8987 defines it as 0xf9. I've verified that 0xf9 is the correct value on SD8978. NXP's out-of-tree driver uses 0xf9 for all of them, so there's a chance that 0xf0 is not correct in the mwifiex_reg_sd8977 and mwifiex_reg_sd8997 definitions. I cannot test that for lack of hardware, hence am leaving it as is.
NXP has only released a firmware which runs Bluetooth over UART. Perhaps Bluetooth over SDIO is unsupported by this chipset. Consequently, only an "sdiouart" firmware image is referenced, not an alternative "sdsd" image.
--- .../bindings/net/wireless/marvell-8xxx.txt | 4 ++- drivers/net/wireless/marvell/mwifiex/Kconfig | 5 ++-- drivers/net/wireless/marvell/mwifiex/sdio.c | 25 +++++++++++++++++-- drivers/net/wireless/marvell/mwifiex/sdio.h | 1 + include/linux/mmc/sdio_ids.h | 1 + 5 files changed, 31 insertions(+), 5 deletions(-)
Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt +3 -1
@@ -1,4 +1,4 @@ -Marvell 8787/8897/8997 (sd8787/sd8897/sd8997/pcie8997) SDIO/PCIE devices +Marvell 8787/8897/8978/8997 (sd8787/sd8897/sd8978/sd8997/pcie8997) SDIO/PCIE devices ------ This node provides properties for controlling the Marvell SDIO/PCIE wireless device.
@@ -10,7 +10,9 @@ Required properties: - compatible : should be one of the following: * "marvell,sd8787" * "marvell,sd8897" + * "marvell,sd8978" * "marvell,sd8997" + * "nxp,iw416" * "pci11ab,2b42" * "pci1b4b,2b42"
drivers/net/wireless/marvell/mwifiex/Kconfig +3 -2
@@ -10,13 +10,14 @@ config MWIFIEX mwifiex. config MWIFIEX_SDIO - tristate "Marvell WiFi-Ex Driver for SD8786/SD8787/SD8797/SD8887/SD8897/SD8977/SD8987/SD8997" + tristate "Marvell WiFi-Ex Driver for SD8786/SD8787/SD8797/SD8887/SD8897/SD8977/SD8978/SD8987/SD8997" depends on MWIFIEX && MMC select FW_LOADER select WANT_DEV_COREDUMP help This adds support for wireless adapters based on Marvell - 8786/8787/8797/8887/8897/8977/8987/8997 chipsets with SDIO interface. + 8786/8787/8797/8887/8897/8977/8978/8987/8997 chipsets with + SDIO interface. SD8978 is also known as NXP IW416. If you choose to build it as a module, it will be called mwifiex_sdio.
drivers/net/wireless/marvell/mwifiex/sdio.c +23 -2
@@ -263,7 +263,7 @@ static const struct mwifiex_sdio_card_reg mwifiex_reg_sd8887 = { 0x68, 0x69, 0x6a}, }; -static const struct mwifiex_sdio_card_reg mwifiex_reg_sd8987 = { +static const struct mwifiex_sdio_card_reg mwifiex_reg_sd89xx = { .start_rd_port =0 , .start_wr_port =0 , .base_0_reg =0xF8 ,
@@ -394,6 +394,22 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8977 = { .can_ext_scan = true, }; +static const struct mwifiex_sdio_device mwifiex_sdio_sd8978 = { + .firmware_sdiouart =SD8978_SDIOUART_FW_NAME , + .reg = &mwifiex_reg_sd89xx, + .max_ports =32 , + .mp_agg_pkt_limit =16 , + .tx_buf_size =MWIFIEX_TX_DATA_BUF_SIZE_4K , + .mp_tx_agg_buf_size =MWIFIEX_MP_AGGR_BUF_SIZE_MAX , + .mp_rx_agg_buf_size =MWIFIEX_MP_AGGR_BUF_SIZE_MAX , + .supports_sdio_new_mode = true, + .has_control_mask = false, + .can_dump_fw = true, + .fw_dump_enh = true, + .can_auto_tdls = false, + .can_ext_scan = true, +}; +static const struct mwifiex_sdio_device mwifiex_sdio_sd8997 = { .firmware =SD8997_DEFAULT_FW_NAME , .firmware_sdiouart =SD8997_SDIOUART_FW_NAME ,
@@ -428,7 +444,7 @@ static const struct mwifiex_sdio_device mwifiex_sdio_sd8887 = {static const struct mwifiex_sdio_device mwifiex_sdio_sd8987 = { .firmware =SD8987_DEFAULT_FW_NAME , - .reg = &mwifiex_reg_sd8987, + .reg = &mwifiex_reg_sd89xx, .max_ports =32 , .mp_agg_pkt_limit =16 , .tx_buf_size =MWIFIEX_TX_DATA_BUF_SIZE_2K ,
@@ -482,7 +498,9 @@ static struct memory_type_mapping mem_type_mapping_tbl[] = {static const struct of_device_id mwifiex_sdio_of_match_table[] = { { .compatible ="marvell,sd8787" }, { .compatible ="marvell,sd8897" }, + { .compatible ="marvell,sd8978" }, { .compatible ="marvell,sd8997" }, + { .compatible ="nxp,iw416" }, { } };
@@ -920,6 +938,8 @@ static const struct sdio_device_id mwifiex_ids[] = { .driver_data = (unsigned long)&mwifiex_sdio_sd8801}, {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8977_WLAN), .driver_data = (unsigned long)&mwifiex_sdio_sd8977}, + {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8978_WLAN), + .driver_data = (unsigned long)&mwifiex_sdio_sd8978}, {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8987_WLAN), .driver_data = (unsigned long)&mwifiex_sdio_sd8987}, {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_8997_WLAN),
@@ -3164,6 +3184,7 @@ MODULE_FIRMWARE(SD8797_DEFAULT_FW_NAME);MODULE_FIRMWARE (SD8897_DEFAULT_FW_NAME );MODULE_FIRMWARE (SD8887_DEFAULT_FW_NAME );MODULE_FIRMWARE (SD8977_DEFAULT_FW_NAME ); +MODULE_FIRMWARE (SD8978_SDIOUART_FW_NAME );MODULE_FIRMWARE (SD8987_DEFAULT_FW_NAME );MODULE_FIRMWARE (SD8997_DEFAULT_FW_NAME );MODULE_FIRMWARE (SD8997_SDIOUART_FW_NAME );
drivers/net/wireless/marvell/mwifiex/sdio.h +1 -0
@@ -25,6 +25,7 @@#define SD8887_DEFAULT_FW_NAME "mrvl/sd8887_uapsta.bin"#define SD8801_DEFAULT_FW_NAME "mrvl/sd8801_uapsta.bin"#define SD8977_DEFAULT_FW_NAME "mrvl/sdsd8977_combo_v2.bin" +#define SD8978_SDIOUART_FW_NAME "mrvl/sdiouartiw416_combo_v0.bin"#define SD8987_DEFAULT_FW_NAME "mrvl/sd8987_uapsta.bin"#define SD8997_DEFAULT_FW_NAME "mrvl/sdsd8997_combo_v4.bin"#define SD8997_SDIOUART_FW_NAME "mrvl/sdiouart8997_combo_v4.bin"
include/linux/mmc/sdio_ids.h +1 -0
@@ -102,6 +102,7 @@#define SDIO_DEVICE_ID_MARVELL_8977_BT 0x9146#define SDIO_DEVICE_ID_MARVELL_8987_WLAN 0x9149#define SDIO_DEVICE_ID_MARVELL_8987_BT 0x914a +#define SDIO_DEVICE_ID_MARVELL_8978_WLAN 0x9159#define SDIO_VENDOR_ID_MEDIATEK 0x037a#define SDIO_DEVICE_ID_MEDIATEK_MT7663 0x7663
Signature · 1 line
2.39.1
PATCH 3/3 wifi: mwifiex: Support firmware hotfix version in GET_HW_SPEC responses
In reply to Lukas WunnerSupport the firmware hotfix version in GET_HW_SPEC responses to avoid an irritating "Unknown api_id: 5" message on probe.
Based on this commit in NXP's GPLv2-licensed out-of-tree driver:
https://github.com/nxp-imx/mwifiex/commit/27fd8ecca504
--- drivers/net/wireless/marvell/mwifiex/cmdevt.c | 5 +++++ drivers/net/wireless/marvell/mwifiex/fw.h | 1 + 2 files changed, 6 insertions(+)
drivers/net/wireless/marvell/mwifiex/cmdevt.c +5 -0
@@ -1607,6 +1607,11 @@ int mwifiex_ret_get_hw_spec(struct mwifiex_private *priv, api_rev->major_ver, api_rev->minor_ver);break ; +case FW_HOTFIX_VER_ID : +mwifiex_dbg (adapter,INFO , +"Firmware hotfix version %d\n" , + api_rev->major_ver); +break ;default : mwifiex_dbg(adapter, FATAL, "Unknown api_id: %d\n",
drivers/net/wireless/marvell/mwifiex/fw.h +1 -0
@@ -1048,6 +1048,7 @@ enum API_VER_ID {FW_API_VER_ID =2 ,UAP_FW_API_VER_ID =3 ,CHANRPT_API_VER_ID =4 , + FW_HOTFIX_VER_ID = 5, }; struct hw_spec_api_rev {
Signature · 1 line
2.39.1