On Thu, Aug 25, 2016 at 10:19:22AM +0200, Mathias Kresin wrote: > The EEPROM used on some CPEs has for every device the same generic > ralink mac in EEPROM and needs to be overridden. I don't know what is CPE, but even if I would know that, I most likely sill will not understand that description. > +++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c > @@ -1459,10 +1459,7 @@ static int rt2400pci_validate_eeprom(struct rt2x00_dev *rt2x00dev) > * Start validation of the data that has been read. > */ > mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); > - if (!is_valid_ether_addr(mac)) { > - eth_random_addr(mac); > - rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac); > - } > + rt2x00lib_set_mac_address(rt2x00dev, mac); <snip> > +#include <linux/of.h> > +#include <linux/of_net.h> > > #include "rt2x00.h" > #include "rt2x00lib.h" > @@ -931,6 +933,21 @@ 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) > +{ > + const char *mac_addr; > + > + mac_addr = of_get_mac_address(rt2x00dev->dev->of_node); Shouldn't use dev_of_node(&rt2x00dev->dev) and check against NULL ? > + if (mac_addr) > + ether_addr_copy(eeprom_mac_addr, mac_addr); Why we do not read MAC from EEPROM if fail to get it from of_node? Thanks Stanislaw