|
@@ -1898,10 +1898,11 @@ fec_set_mac_address(struct net_device *ndev, void *p)
|
|
|
struct fec_enet_private *fep = netdev_priv(ndev);
|
|
|
struct sockaddr *addr = p;
|
|
|
|
|
|
- if (!is_valid_ether_addr(addr->sa_data))
|
|
|
- return -EADDRNOTAVAIL;
|
|
|
-
|
|
|
- memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len);
|
|
|
+ if (addr) {
|
|
|
+ if (!is_valid_ether_addr(addr->sa_data))
|
|
|
+ return -EADDRNOTAVAIL;
|
|
|
+ memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len);
|
|
|
+ }
|
|
|
|
|
|
writel(ndev->dev_addr[3] | (ndev->dev_addr[2] << 8) |
|
|
|
(ndev->dev_addr[1] << 16) | (ndev->dev_addr[0] << 24),
|
|
@@ -2000,6 +2001,8 @@ static int fec_enet_init(struct net_device *ndev)
|
|
|
|
|
|
/* Get the Ethernet address */
|
|
|
fec_get_mac(ndev);
|
|
|
+ /* make sure MAC we just acquired is programmed into the hw */
|
|
|
+ fec_set_mac_address(ndev, NULL);
|
|
|
|
|
|
/* init the tx & rx ring size */
|
|
|
fep->tx_ring_size = TX_RING_SIZE;
|