Hi Francesco, This is the second patch. Sorry, it still sent to stable@xxxxxxxxxxxxxxx. I will correct it next time. Thanks, David > -----Original Message----- > From: David Lin <yu-hao.lin@xxxxxxx> > Sent: Thursday, December 7, 2023 4:39 PM > To: francesco@xxxxxxxxxx > Cc: Pete Hsieh <tsung-hsien.hsieh@xxxxxxx>; David Lin > <yu-hao.lin@xxxxxxx>; stable@xxxxxxxxxxxxxxx > Subject: [PATCH] wifi: mwifiex: fix STA cannot connect to 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. > > Signed-off-by: David Lin <yu-hao.lin@xxxxxxx> > Fixes: 277b024e5e3d ("mwifiex: move under marvell vendor directory") > Cc: stable@xxxxxxxxxxxxxxx > --- > 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 7a15ea8072e6..3604abcbcff9 100644 > --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c > +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c > @@ -2047,6 +2047,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 8e6db904e5b2..62f3c9a52a1d 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..8be3a2714bf7 100644 > --- a/drivers/net/wireless/marvell/mwifiex/ioctl.h > +++ b/drivers/net/wireless/marvell/mwifiex/ioctl.h > @@ -83,6 +83,7 @@ struct wep_key { > #define MWIFIEX_OPERATING_CLASSES 16 > > struct mwifiex_uap_bss_param { > + u8 mac_addr[ETH_ALEN]; > u8 channel; > u8 band_cfg; > u16 rts_threshold; > 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); > > base-commit: 783004b6dbda2cfe9a552a4cc9c1d168a2068f6c > -- > 2.25.1