summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitor Soares <vitor.soares@toradex.com>2023-12-15 11:32:56 +0000
committerVitor Soares <vitor.soares@toradex.com>2023-12-19 13:13:13 +0000
commit5c3c271ced6f17ac96b471a57bebcf9d63b5cac2 (patch)
treecb45c9c708e9bfe3f8779d028dec342da80fb534
parentc4c08c8a099fb40b455701cc7364e0d905443e4f (diff)
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 <vitor.soares@toradex.com>
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline-git/0001-wifi-mwifiex-configure-BSSID-consistently-when-start.patch96
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline_git.bb1
2 files changed, 97 insertions, 0 deletions
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 <yu-hao.lin@nxp.com>
+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 <yu-hao.lin@nxp.com>
+Fixes: 12190c5d80bd ("mwifiex: add cfg80211 start_ap and stop_ap handlers")
+Cc: stable@vger.kernel.org
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Tested-by: Rafael Beims <rafael.beims@toradex.com> # Verdin iMX8MP/SD8997 SD
+Acked-by: Brian Norris <briannorris@chromium.org>
+---
+ 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"