From 5c3c271ced6f17ac96b471a57bebcf9d63b5cac2 Mon Sep 17 00:00:00 2001 From: Vitor Soares Date: Fri, 15 Dec 2023 11:32:56 +0000 Subject: linux-toradex-mainline: patch: Fix inconsistent BSSID when starting AP When restart hostapd the AP is no longer functional. This patch addresses the issue by configuring AP BSSID before starting the AP. Related-to: ELB-5484 Signed-off-by: Vitor Soares --- ...x-configure-BSSID-consistently-when-start.patch | 96 ++++++++++++++++++++++ recipes-kernel/linux/linux-toradex-mainline_git.bb | 1 + 2 files changed, 97 insertions(+) create mode 100644 recipes-kernel/linux/linux-toradex-mainline-git/0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch diff --git a/recipes-kernel/linux/linux-toradex-mainline-git/0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch b/recipes-kernel/linux/linux-toradex-mainline-git/0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch new file mode 100644 index 0000000..7906fb8 --- /dev/null +++ b/recipes-kernel/linux/linux-toradex-mainline-git/0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch @@ -0,0 +1,96 @@ +From 090ba22a168df5c4200f31672165bbb6f5fb424e Mon Sep 17 00:00:00 2001 +From: David Lin +Date: Fri, 15 Dec 2023 08:51:18 +0800 +Subject: [PATCH] wifi: mwifiex: configure BSSID consistently when starting AP + +AP BSSID configuration is missing at AP start. +Without this fix, FW returns STA interface MAC address after first init. +When hostapd restarts, it gets MAC address from netdev before driver +sets STA MAC to netdev again. Now MAC address between hostapd and net +interface are different causes STA cannot connect to AP. +After that MAC address of uap0 mlan0 become the same. And issue +disappears after following hostapd restart (another issue is AP/STA MAC +address become the same). +This patch fixes the issue cleanly. + +Upstream-Status: Submitted [https://lore.kernel.org/all/20231215005118.17031-1-yu-hao.lin@nxp.com/] + +Signed-off-by: David Lin +Fixes: 12190c5d80bd ("mwifiex: add cfg80211 start_ap and stop_ap handlers") +Cc: stable@vger.kernel.org +Reviewed-by: Francesco Dolcini +Tested-by: Rafael Beims # Verdin iMX8MP/SD8997 SD +Acked-by: Brian Norris +--- + drivers/net/wireless/marvell/mwifiex/cfg80211.c | 2 ++ + drivers/net/wireless/marvell/mwifiex/fw.h | 1 + + drivers/net/wireless/marvell/mwifiex/ioctl.h | 1 + + drivers/net/wireless/marvell/mwifiex/uap_cmd.c | 8 ++++++++ + 4 files changed, 12 insertions(+) + +diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c +index bcd564dc3554..c907da2a4789 100644 +--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c ++++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c +@@ -2046,6 +2046,8 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy, + + mwifiex_set_sys_config_invalid_data(bss_cfg); + ++ memcpy(bss_cfg->mac_addr, priv->curr_addr, ETH_ALEN); ++ + if (params->beacon_interval) + bss_cfg->beacon_period = params->beacon_interval; + if (params->dtim_period) +diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h +index b4f945a549f7..863f5f2247a0 100644 +--- a/drivers/net/wireless/marvell/mwifiex/fw.h ++++ b/drivers/net/wireless/marvell/mwifiex/fw.h +@@ -165,6 +165,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER { + #define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32) + #define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35) + #define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42) ++#define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 43) + #define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44) + #define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45) + #define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48) +diff --git a/drivers/net/wireless/marvell/mwifiex/ioctl.h b/drivers/net/wireless/marvell/mwifiex/ioctl.h +index 091e7ca79376..e8825f302de8 100644 +--- a/drivers/net/wireless/marvell/mwifiex/ioctl.h ++++ b/drivers/net/wireless/marvell/mwifiex/ioctl.h +@@ -107,6 +107,7 @@ struct mwifiex_uap_bss_param { + u8 qos_info; + u8 power_constraint; + struct mwifiex_types_wmm_info wmm_info; ++ u8 mac_addr[ETH_ALEN]; + }; + + enum { +diff --git a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c +index e78a201cd150..491e36611909 100644 +--- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c ++++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c +@@ -468,6 +468,7 @@ void mwifiex_config_uap_11d(struct mwifiex_private *priv, + static int + mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size) + { ++ struct host_cmd_tlv_mac_addr *mac_tlv; + struct host_cmd_tlv_dtim_period *dtim_period; + struct host_cmd_tlv_beacon_period *beacon_period; + struct host_cmd_tlv_ssid *ssid; +@@ -487,6 +488,13 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size) + int i; + u16 cmd_size = *param_size; + ++ mac_tlv = (struct host_cmd_tlv_mac_addr *)tlv; ++ mac_tlv->header.type = cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS); ++ mac_tlv->header.len = cpu_to_le16(ETH_ALEN); ++ memcpy(mac_tlv->mac_addr, bss_cfg->mac_addr, ETH_ALEN); ++ cmd_size += sizeof(struct host_cmd_tlv_mac_addr); ++ tlv += sizeof(struct host_cmd_tlv_mac_addr); ++ + if (bss_cfg->ssid.ssid_len) { + ssid = (struct host_cmd_tlv_ssid *)tlv; + ssid->header.type = cpu_to_le16(TLV_TYPE_UAP_SSID); +-- +2.34.1 + diff --git a/recipes-kernel/linux/linux-toradex-mainline_git.bb b/recipes-kernel/linux/linux-toradex-mainline_git.bb index d48549e..0e7c032 100644 --- a/recipes-kernel/linux/linux-toradex-mainline_git.bb +++ b/recipes-kernel/linux/linux-toradex-mainline_git.bb @@ -51,6 +51,7 @@ SRC_URI:append = " \ file://0001-ARM-dts-imx6q-apalis-add-can-power-up-delay-on-ixora.patch \ file://0003-arm64-dts-freescale-verdin-imx8mp-add-support-to-mal.patch \ file://0003-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch \ + file://0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch \ " LINUX_VERSION ?= "6.1.65" -- cgit v1.2.3