via-rhine: Assign random MAC address if necessary

Roger Luethi has had several reports of Rhine NICs providing
an invalid MAC address.  If so, assign a random MAC address so
the hardware can still be used.

Tested as a standalone interface, as carrier for ppp, and as a
bonding slave.

Original-patch-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Joe Perches 2011-04-16 14:15:26 +00:00 committed by David S. Miller
parent df4511feb7
commit 482e3febc2
1 changed files with 7 additions and 5 deletions

View File

@ -838,13 +838,15 @@ static int __devinit rhine_init_one(struct pci_dev *pdev,
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = ioread8(ioaddr + StationAddr + i); dev->dev_addr[i] = ioread8(ioaddr + StationAddr + i);
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
if (!is_valid_ether_addr(dev->perm_addr)) { if (!is_valid_ether_addr(dev->dev_addr)) {
rc = -EIO; /* Report it and use a random ethernet address instead */
dev_err(&pdev->dev, "Invalid MAC address\n"); netdev_err(dev, "Invalid MAC address: %pM\n", dev->dev_addr);
goto err_out_unmap; random_ether_addr(dev->dev_addr);
netdev_info(dev, "Using random MAC address: %pM\n",
dev->dev_addr);
} }
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
/* For Rhine-I/II, phy_id is loaded from EEPROM */ /* For Rhine-I/II, phy_id is loaded from EEPROM */
if (!phy_id) if (!phy_id)