]> 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:34:24 +0000 (15:34 -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 a6ac8e5512eba41afc9a4a7f4e837876214b9476..e7ebae0584f55363b39c1596f364764d005a0603 100644 (file)
@@ -1185,7 +1185,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 66ba3be2734344a41b6fc697dc79422673e3e8c2..d0d880f8c0aa4cc7dd9a4cb5a227047c933cd558 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 928e0b07a9bf18b22dd2b107d391d28930865c30..b038568e0be91c6f19fd6bcf431784cc928f4e56 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 bc983ab10b0c7abf324e95808e324bdef78d1335..83f062fb95d5a13389c98412441e546ff963af51 100644 (file)
@@ -689,7 +689,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 d1d64fa7d35d02ca74c7ed207312009e41f80734..4bd533c4ba9a1c7c84dde7f902e20b9669e180a4 100644 (file)
@@ -182,7 +182,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 02899320da5c1b80369621aa9f70e38bcd8d3b99..5123a720413ffd78c15952a072ad33c5115b7a4f 100644 (file)
@@ -132,7 +132,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 4a8237118287354f535e04cc633486bf1f06f5ef..4c4ab0d4065d2a5cb847da4149262a06a52d703d 100644 (file)
@@ -235,9 +235,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 65bd9c32d42c1688f43dc1b227a70c261d5c8c12..5cd2fb7d9835cfe2c2253b5106e5e496f7da06c5 100644 (file)
@@ -601,7 +601,9 @@ static int mt7996_register_phy(struct mt7996_dev *dev, struct mt7996_phy *phy,
                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(mphy->hw, wed);