|
@@ -1818,6 +1818,7 @@ static int __devinit smsc911x_init(struct net_device *dev)
|
|
|
SMSC_TRACE(PROBE, "PHY will be autodetected.");
|
|
|
|
|
|
spin_lock_init(&pdata->dev_lock);
|
|
|
+ spin_lock_init(&pdata->mac_lock);
|
|
|
|
|
|
if (pdata->ioaddr == 0) {
|
|
|
SMSC_WARNING(PROBE, "pdata->ioaddr: 0x00000000");
|
|
@@ -1895,8 +1896,11 @@ static int __devinit smsc911x_init(struct net_device *dev)
|
|
|
/* workaround for platforms without an eeprom, where the mac address
|
|
|
* is stored elsewhere and set by the bootloader. This saves the
|
|
|
* mac address before resetting the device */
|
|
|
- if (pdata->config.flags & SMSC911X_SAVE_MAC_ADDRESS)
|
|
|
+ if (pdata->config.flags & SMSC911X_SAVE_MAC_ADDRESS) {
|
|
|
+ spin_lock_irq(&pdata->mac_lock);
|
|
|
smsc911x_read_mac_address(dev);
|
|
|
+ spin_unlock_irq(&pdata->mac_lock);
|
|
|
+ }
|
|
|
|
|
|
/* Reset the LAN911x */
|
|
|
if (smsc911x_soft_reset(pdata))
|
|
@@ -2059,8 +2063,6 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
|
|
|
SMSC_TRACE(PROBE, "Network interface: \"%s\"", dev->name);
|
|
|
}
|
|
|
|
|
|
- spin_lock_init(&pdata->mac_lock);
|
|
|
-
|
|
|
retval = smsc911x_mii_init(pdev, dev);
|
|
|
if (retval) {
|
|
|
SMSC_WARNING(PROBE,
|