]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rt2x00: check retval for of_get_mac_address
authorRosen Penev <rosenp@gmail.com>
Tue, 14 Oct 2025 05:08:33 +0000 (22:08 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 27 Oct 2025 08:16:12 +0000 (09:16 +0100)
of_get_mac_address can return -EPROBE_DEFER when nvmem is not probed yet
for whatever reason. In this case, nvmem mac assignments will not work.

Based on the function path, this change only has effect for rt2800soc.c
and rt2800pci.c. The former tends to use nvmem for assignments.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
Link: https://patch.msgid.link/20251014050833.46377-1-rosenp@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/ralink/rt2x00/rt2800lib.c
drivers/net/wireless/ralink/rt2x00/rt2x00.h
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c

index b264ed0af9234a8abbf6f7036af836f3b80f8e75..f07152fa37255e38d531c26f25bd689082b6e73d 100644 (file)
@@ -11011,7 +11011,9 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
         * Start validation of the data that has been read.
         */
        mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
-       rt2x00lib_set_mac_address(rt2x00dev, mac);
+       retval = rt2x00lib_set_mac_address(rt2x00dev, mac);
+       if (retval)
+               return retval;
 
        word = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0);
        if (word == 0xffff) {
index 09b9d1f9f793f654be80295aa974100592d55675..665887e9b118bf4c33db6804a0a750d52efc7e6d 100644 (file)
@@ -1427,7 +1427,7 @@ static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
  */
 u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
                         struct ieee80211_vif *vif);
-void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
+int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
 
 /*
  * Interrupt context handlers.
index f8a6f9c968a1e8502c512c65737f7d3ebe24aff9..778a478ab53a9dd5614de33846df7a395fdf2187 100644 (file)
@@ -988,14 +988,20 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
                entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
 }
 
-void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
+int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
 {
-       of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+       int ret;
+
+       ret = of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+       if (ret == -EPROBE_DEFER)
+               return ret;
 
        if (!is_valid_ether_addr(eeprom_mac_addr)) {
                eth_random_addr(eeprom_mac_addr);
                rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
        }
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);