diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-02-02 11:22:51 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-06 19:07:44 -0500 |
commit | fae87592280039837fdd72c5ecdac2af2eb97f63 (patch) | |
tree | 742628efdd91e394d528ed202ada01bce9e75140 /drivers | |
parent | a7bed27dc69e3bc9238549a4964ea94ec318362c (diff) |
skge: handle zero address at open
Some motherboards are broken and have no address set. Failing at probe time
prevents the device from ever being used (like to download a fixed BIOS). Instead
warn on probe and check again when device is brought up. That way the address
can be set.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/skge.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 45283f3f95e4..ce25b6f505c4 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -2373,6 +2373,9 @@ static int skge_up(struct net_device *dev) | |||
2373 | size_t rx_size, tx_size; | 2373 | size_t rx_size, tx_size; |
2374 | int err; | 2374 | int err; |
2375 | 2375 | ||
2376 | if (!is_valid_ether_addr(dev->dev_addr)) | ||
2377 | return -EINVAL; | ||
2378 | |||
2376 | if (netif_msg_ifup(skge)) | 2379 | if (netif_msg_ifup(skge)) |
2377 | printk(KERN_INFO PFX "%s: enabling interface\n", dev->name); | 2380 | printk(KERN_INFO PFX "%s: enabling interface\n", dev->name); |
2378 | 2381 | ||
@@ -3567,11 +3570,10 @@ static int __devinit skge_probe(struct pci_dev *pdev, | |||
3567 | if (!dev) | 3570 | if (!dev) |
3568 | goto err_out_led_off; | 3571 | goto err_out_led_off; |
3569 | 3572 | ||
3573 | /* Some motherboards are broken and has zero in ROM. */ | ||
3570 | if (!is_valid_ether_addr(dev->dev_addr)) { | 3574 | if (!is_valid_ether_addr(dev->dev_addr)) { |
3571 | printk(KERN_ERR PFX "%s: bad (zero?) ethernet address in rom\n", | 3575 | printk(KERN_WARNING PFX "%s: bad (zero?) ethernet address in rom\n", |
3572 | pci_name(pdev)); | 3576 | pci_name(pdev)); |
3573 | err = -EIO; | ||
3574 | goto err_out_free_netdev; | ||
3575 | } | 3577 | } |
3576 | 3578 | ||
3577 | err = register_netdev(dev); | 3579 | err = register_netdev(dev); |