Message ID | 20240926195308.2823595-1-marex@denx.de |
---|---|
State | Superseded |
Headers | show |
Series | wifi: wilc1000: Set MAC after operation mode | expand |
Hello Marek, On 9/26/24 21:52, Marek Vasut wrote: > It seems it is necessary to set WILC MAC address after operation mode, > otherwise the MAC address of the WILC MAC is reset back to what is in > nvmem. This causes a failure to associate with AP after the WILC MAC > address was overridden by userspace. > > Test case: > " > ap$ cat << EOF > hostap.conf > interface=wlan0 > ssid=ssid > hw_mode=g > channel=6 > wpa=2 > wpa_passphrase=pass > wpa_key_mgmt=WPA-PSK > EOF > ap$ hostapd -d hostap.conf > ap$ ifconfig wlan0 10.0.0.1 > " > > " > sta$ ifconfig wlan0 hw ether 00:11:22:33:44:55 > sta$ wpa_supplicant -i wlan0 -c <(wpa_passphrase ssid pass) > sta$ ifconfig wlan0 10.0.0.2 > sta$ ping 10.0.0.1 # fails without this patch > " > > AP still indicates SA with original MAC address from nvmem without this patch: > " > nl80211: RX frame da=ff:ff:ff:ff:ff:ff sa=60:01:23:45:67:89 bssid=ff:ff:ff:ff:ff:ff ... > ^^^^^^^^^^^^^^^^^ > " Good catch, thanks for the fix. I tracked a bit the issue history and it seems to have been introduced by my recent change about reading the mac address early from the chip nvmem (to set correctly mac address reported to userspace once net device has been registered). I indeed reproduce the issue, and reverting the commit below makes it disappear, so the following can be added: Fixes: 83d9b54ee5d4 ("wifi: wilc1000: read MAC address from fuse at probe") > Signed-off-by: Marek Vasut <marex@denx.de> Tested-by: Alexis Lothoré <alexis.lothore@bootlin.com> Thanks, Alexis
On 10/3/24 2:32 PM, Alexis Lothoré wrote: > Hello Marek, Hi, > On 9/26/24 21:52, Marek Vasut wrote: >> It seems it is necessary to set WILC MAC address after operation mode, >> otherwise the MAC address of the WILC MAC is reset back to what is in >> nvmem. This causes a failure to associate with AP after the WILC MAC >> address was overridden by userspace. >> >> Test case: >> " >> ap$ cat << EOF > hostap.conf >> interface=wlan0 >> ssid=ssid >> hw_mode=g >> channel=6 >> wpa=2 >> wpa_passphrase=pass >> wpa_key_mgmt=WPA-PSK >> EOF >> ap$ hostapd -d hostap.conf >> ap$ ifconfig wlan0 10.0.0.1 >> " >> >> " >> sta$ ifconfig wlan0 hw ether 00:11:22:33:44:55 >> sta$ wpa_supplicant -i wlan0 -c <(wpa_passphrase ssid pass) >> sta$ ifconfig wlan0 10.0.0.2 >> sta$ ping 10.0.0.1 # fails without this patch >> " >> >> AP still indicates SA with original MAC address from nvmem without this patch: >> " >> nl80211: RX frame da=ff:ff:ff:ff:ff:ff sa=60:01:23:45:67:89 bssid=ff:ff:ff:ff:ff:ff ... >> ^^^^^^^^^^^^^^^^^ >> " > > Good catch, thanks for the fix. I tracked a bit the issue history and it seems > to have been introduced by my recent change about reading the mac address early > from the chip nvmem (to set correctly mac address reported to userspace once net > device has been registered). I indeed reproduce the issue, and reverting the > commit below makes it disappear, so the following can be added: > > Fixes: 83d9b54ee5d4 ("wifi: wilc1000: read MAC address from fuse at probe") > >> Signed-off-by: Marek Vasut <marex@denx.de> > > Tested-by: Alexis Lothoré <alexis.lothore@bootlin.com> Nice, thanks !
diff --git a/drivers/net/wireless/microchip/wilc1000/netdev.c b/drivers/net/wireless/microchip/wilc1000/netdev.c index 9ecf3fb29b558..8bc127c5a538c 100644 --- a/drivers/net/wireless/microchip/wilc1000/netdev.c +++ b/drivers/net/wireless/microchip/wilc1000/netdev.c @@ -608,6 +608,9 @@ static int wilc_mac_open(struct net_device *ndev) return ret; } + wilc_set_operation_mode(vif, wilc_get_vif_idx(vif), vif->iftype, + vif->idx); + netdev_dbg(ndev, "Mac address: %pM\n", ndev->dev_addr); ret = wilc_set_mac_address(vif, ndev->dev_addr); if (ret) { @@ -618,9 +621,6 @@ static int wilc_mac_open(struct net_device *ndev) return ret; } - wilc_set_operation_mode(vif, wilc_get_vif_idx(vif), vif->iftype, - vif->idx); - mgmt_regs.interface_stypes = vif->mgmt_reg_stypes; /* so we detect a change */ vif->mgmt_reg_stypes = 0;
It seems it is necessary to set WILC MAC address after operation mode, otherwise the MAC address of the WILC MAC is reset back to what is in nvmem. This causes a failure to associate with AP after the WILC MAC address was overridden by userspace. Test case: " ap$ cat << EOF > hostap.conf interface=wlan0 ssid=ssid hw_mode=g channel=6 wpa=2 wpa_passphrase=pass wpa_key_mgmt=WPA-PSK EOF ap$ hostapd -d hostap.conf ap$ ifconfig wlan0 10.0.0.1 " " sta$ ifconfig wlan0 hw ether 00:11:22:33:44:55 sta$ wpa_supplicant -i wlan0 -c <(wpa_passphrase ssid pass) sta$ ifconfig wlan0 10.0.0.2 sta$ ping 10.0.0.1 # fails without this patch " AP still indicates SA with original MAC address from nvmem without this patch: " nl80211: RX frame da=ff:ff:ff:ff:ff:ff sa=60:01:23:45:67:89 bssid=ff:ff:ff:ff:ff:ff ... ^^^^^^^^^^^^^^^^^ " Signed-off-by: Marek Vasut <marex@denx.de> --- Cc: Ajay Singh <ajay.kathat@microchip.com> Cc: Alexis Lothoré <alexis.lothore@bootlin.com> Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev> Cc: Kalle Valo <kvalo@kernel.org> Cc: Marek Vasut <marex@denx.de> Cc: linux-wireless@vger.kernel.org --- drivers/net/wireless/microchip/wilc1000/netdev.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)