]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
wifi: rtl8xxxu: support setting mac address register for both interfaces
authorMartin Kaistra <martin.kaistra@linutronix.de>
Fri, 22 Dec 2023 10:14:26 +0000 (11:14 +0100)
committerKalle Valo <kvalo@kernel.org>
Wed, 10 Jan 2024 14:52:55 +0000 (16:52 +0200)
To prepare for concurrent mode, enhance rtl8xxxu_set_mac() to write the
mac address of the respective interface to REG_MACID or REG_MACID1.

Remove the call to rtl8xxxu_set_mac() from the init function as we set
it in rtl8xxxu_add_interface() later anyway.

Until rtl8xxxu_add_interface() can handle both interfaces, call
rtl8xxxu_set_mac() with port_num = 0.

Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231222101442.626837-6-martin.kaistra@linutronix.de
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index f8572659e99e4362ffae3512949eb72f5e1c5c6b..02cf044554780b72fd0c9666600627c4ee5ab7ae 100644 (file)
@@ -3580,15 +3580,25 @@ void rtl8723a_phy_lc_calibrate(struct rtl8xxxu_priv *priv)
                rtl8xxxu_write8(priv, REG_TXPAUSE, 0x00);
 }
 
-static int rtl8xxxu_set_mac(struct rtl8xxxu_priv *priv)
+static int rtl8xxxu_set_mac(struct rtl8xxxu_priv *priv, int port_num)
 {
        int i;
        u16 reg;
 
-       reg = REG_MACID;
+       switch (port_num) {
+       case 0:
+               reg = REG_MACID;
+               break;
+       case 1:
+               reg = REG_MACID1;
+               break;
+       default:
+               WARN_ONCE("%s: invalid port_num\n", __func__);
+               return -EINVAL;
+       }
 
        for (i = 0; i < ETH_ALEN; i++)
-               rtl8xxxu_write8(priv, reg + i, priv->mac_addr[i]);
+               rtl8xxxu_write8(priv, reg + i, priv->vifs[port_num]->addr[i]);
 
        return 0;
 }
@@ -4243,8 +4253,6 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
                rtl8xxxu_write32(priv, REG_HIMR, 0xffffffff);
        }
 
-       rtl8xxxu_set_mac(priv);
-
        /*
         * Configure initial WMAC settings
         */
@@ -6619,7 +6627,7 @@ static int rtl8xxxu_add_interface(struct ieee80211_hw *hw,
 
        rtl8xxxu_set_linktype(priv, vif->type, 0);
        ether_addr_copy(priv->mac_addr, vif->addr);
-       rtl8xxxu_set_mac(priv);
+       rtl8xxxu_set_mac(priv, 0);
 
        return ret;
 }