]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mt76: mt76_eeprom_override to int
authorRosen Penev <rosenp@gmail.com>
Thu, 11 Sep 2025 22:16:19 +0000 (15:16 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:22 +0000 (15:37 -0500)
[ Upstream commit c7c682100cec97b699fe24b26d89278fd459cc84 ]

mt76_eeprom_override has of_get_mac_address, which can return
-EPROBE_DEFER if the nvmem driver gets loaded after mt76 for some
reason.

Make sure this gets passed to probe so that nvmem mac overrides always
work.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20250911221619.16035-1-rosenp@gmail.com
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Sasha Levin <sashal@kernel.org>
13 files changed:
drivers/net/wireless/mediatek/mt76/eeprom.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7603/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/init.c
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c
drivers/net/wireless/mediatek/mt76/mt76x2/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7915/init.c
drivers/net/wireless/mediatek/mt76/mt7921/init.c
drivers/net/wireless/mediatek/mt76/mt7925/init.c
drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7996/init.c

index 443517d06c9fa99935def44bfe0794b6a666fb17..a987c5e4eff6c6b0a014b4b069dc1259ffa82d31 100644 (file)
@@ -163,13 +163,16 @@ static int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int len)
        return mt76_get_of_data_from_nvmem(dev, eep, "eeprom", len);
 }
 
-void
+int
 mt76_eeprom_override(struct mt76_phy *phy)
 {
        struct mt76_dev *dev = phy->dev;
        struct device_node *np = dev->dev->of_node;
+       int err;
 
-       of_get_mac_address(np, phy->macaddr);
+       err = of_get_mac_address(np, phy->macaddr);
+       if (err == -EPROBE_DEFER)
+               return err;
 
        if (!is_valid_ether_addr(phy->macaddr)) {
                eth_random_addr(phy->macaddr);
@@ -177,6 +180,8 @@ mt76_eeprom_override(struct mt76_phy *phy)
                         "Invalid MAC address, using random address %pM\n",
                         phy->macaddr);
        }
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(mt76_eeprom_override);
 
index 127637454c827e4f4690a948010c99ee02da2401..47c143e6a79afca568a19dc4abd50a3ce97782cc 100644 (file)
@@ -1268,7 +1268,7 @@ void mt76_seq_puts_array(struct seq_file *file, const char *str,
                         s8 *val, int len);
 
 int mt76_eeprom_init(struct mt76_dev *dev, int len);
-void mt76_eeprom_override(struct mt76_phy *phy);
+int mt76_eeprom_override(struct mt76_phy *phy);
 int mt76_get_of_data_from_mtd(struct mt76_dev *dev, void *eep, int offset, int len);
 int mt76_get_of_data_from_nvmem(struct mt76_dev *dev, void *eep,
                                const char *cell_name, int len);
index f5a6b03bc61d0112f0f0ed7bdadb7e61f2dba724..88382b537a33b1f96d7764d6672017022440a2fe 100644 (file)
@@ -182,7 +182,6 @@ int mt7603_eeprom_init(struct mt7603_dev *dev)
                dev->mphy.antenna_mask = 1;
 
        dev->mphy.chainmask = dev->mphy.antenna_mask;
-       mt76_eeprom_override(&dev->mphy);
 
-       return 0;
+       return mt76_eeprom_override(&dev->mphy);
 }
index ccedea7e8a50d68dc602baa8e563ff5b717cfd86..d4bc7e11e772b1a293b61a91628208bcf50254a4 100644 (file)
@@ -351,8 +351,6 @@ int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr)
        memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
               ETH_ALEN);
 
-       mt76_eeprom_override(&dev->mphy);
-
-       return 0;
+       return mt76_eeprom_override(&dev->mphy);
 }
 EXPORT_SYMBOL_GPL(mt7615_eeprom_init);
index aae80005a3c175b3cc92f02d9b8673b836df9075..3e7af3e58736cbdc19c9885783698d0bd8276d3d 100644 (file)
@@ -570,7 +570,10 @@ int mt7615_register_ext_phy(struct mt7615_dev *dev)
               ETH_ALEN);
        mphy->macaddr[0] |= 2;
        mphy->macaddr[0] ^= BIT(7);
-       mt76_eeprom_override(mphy);
+
+       ret = mt76_eeprom_override(mphy);
+       if (ret)
+               return ret;
 
        /* second phy can only handle 5 GHz */
        mphy->cap.has_5ghz = true;
index 4de45a56812d67ae675f065252853c08c7291186..d4506b8b46fa5c9e5f99355932191bad25929690 100644 (file)
@@ -332,7 +332,11 @@ int mt76x0_eeprom_init(struct mt76x02_dev *dev)
 
        memcpy(dev->mphy.macaddr, (u8 *)dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
               ETH_ALEN);
-       mt76_eeprom_override(&dev->mphy);
+
+       err = mt76_eeprom_override(&dev->mphy);
+       if (err)
+               return err;
+
        mt76x02_mac_setaddr(dev, dev->mphy.macaddr);
 
        mt76x0_set_chip_cap(dev);
index 156b16c17b2b44e3d20714fb78c5bc089765b0d7..221805deb42fa0231c56a07b6afa69fc731196fa 100644 (file)
@@ -499,7 +499,9 @@ int mt76x2_eeprom_init(struct mt76x02_dev *dev)
 
        mt76x02_eeprom_parse_hw_cap(dev);
        mt76x2_eeprom_get_macaddr(dev);
-       mt76_eeprom_override(&dev->mphy);
+       ret = mt76_eeprom_override(&dev->mphy);
+       if (ret)
+               return ret;
        dev->mphy.macaddr[0] &= ~BIT(1);
 
        return 0;
index c0f3402d30bb75f122d81aed8b19bc492166a2f0..38dfd5de365ca52bfb0fc5fe4c70fac8c7e73f1f 100644 (file)
@@ -284,9 +284,7 @@ int mt7915_eeprom_init(struct mt7915_dev *dev)
        memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
               ETH_ALEN);
 
-       mt76_eeprom_override(&dev->mphy);
-
-       return 0;
+       return mt76_eeprom_override(&dev->mphy);
 }
 
 int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
index 3e30ca5155d203b22441d7d601af58c4c9ba1b13..5ea8b46e092ef38bd23d0cbbd1cc579ea8089682 100644 (file)
@@ -702,7 +702,9 @@ mt7915_register_ext_phy(struct mt7915_dev *dev, struct mt7915_phy *phy)
                mphy->macaddr[0] |= 2;
                mphy->macaddr[0] ^= BIT(7);
        }
-       mt76_eeprom_override(mphy);
+       ret = mt76_eeprom_override(mphy);
+       if (ret)
+               return ret;
 
        /* init wiphy according to mphy and phy */
        mt7915_init_wiphy(phy);
index 14e17dc902566878c8ca7768607d2dd1eb3ac862..b9098a7331b1a0a7dab2a32ef5e57830a1bc7916 100644 (file)
@@ -189,7 +189,9 @@ static int __mt7921_init_hardware(struct mt792x_dev *dev)
        if (ret)
                goto out;
 
-       mt76_eeprom_override(&dev->mphy);
+       ret = mt76_eeprom_override(&dev->mphy);
+       if (ret)
+               goto out;
 
        ret = mt7921_mcu_set_eeprom(dev);
        if (ret)
index 4249bad83c930e7eeb4e0ac97c49e34595235669..d7d5afe365edd689c56219555ffabcfa37af7f10 100644 (file)
@@ -249,7 +249,9 @@ static int __mt7925_init_hardware(struct mt792x_dev *dev)
        if (ret)
                goto out;
 
-       mt76_eeprom_override(&dev->mphy);
+       ret = mt76_eeprom_override(&dev->mphy);
+       if (ret)
+               goto out;
 
        ret = mt7925_mcu_set_eeprom(dev);
        if (ret)
index 87c6192b6384480affe34a8c3524ff11134af4d6..da3231c9aa1193158cac23a88045fb0aa36f2b97 100644 (file)
@@ -334,9 +334,8 @@ int mt7996_eeprom_init(struct mt7996_dev *dev)
                return ret;
 
        memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR, ETH_ALEN);
-       mt76_eeprom_override(&dev->mphy);
 
-       return 0;
+       return mt76_eeprom_override(&dev->mphy);
 }
 
 int mt7996_eeprom_get_target_power(struct mt7996_dev *dev,
index 5a77771e3e6d6820cc3035ac9e7683da9be1edc4..a75b29bada14107d045cd4866586b8253dddec77 100644 (file)
@@ -667,7 +667,9 @@ static int mt7996_register_phy(struct mt7996_dev *dev, enum mt76_band_id band)
                if (band == MT_BAND2)
                        mphy->macaddr[0] ^= BIT(6);
        }
-       mt76_eeprom_override(mphy);
+       ret = mt76_eeprom_override(mphy);
+       if (ret)
+               goto error;
 
        /* init wiphy according to mphy and phy */
        mt7996_init_wiphy_band(mphy->hw, phy);