|
@@ -1745,6 +1745,12 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter)
|
|
|
struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring;
|
|
|
int err;
|
|
|
|
|
|
+ /* Ensure we have a valid MAC */
|
|
|
+ if (!is_valid_ether_addr(adapter->hw.mac.addr)) {
|
|
|
+ pr_err("Error: Invalid MAC address\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
/* hardware has been reset, we need to reload some things */
|
|
|
pch_gbe_set_multi(netdev);
|
|
|
|
|
@@ -2468,9 +2474,14 @@ static int pch_gbe_probe(struct pci_dev *pdev,
|
|
|
|
|
|
memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
|
|
|
if (!is_valid_ether_addr(netdev->dev_addr)) {
|
|
|
- dev_err(&pdev->dev, "Invalid MAC Address\n");
|
|
|
- ret = -EIO;
|
|
|
- goto err_free_adapter;
|
|
|
+ /*
|
|
|
+ * If the MAC is invalid (or just missing), display a warning
|
|
|
+ * but do not abort setting up the device. pch_gbe_up will
|
|
|
+ * prevent the interface from being brought up until a valid MAC
|
|
|
+ * is set.
|
|
|
+ */
|
|
|
+ dev_err(&pdev->dev, "Invalid MAC address, "
|
|
|
+ "interface disabled.\n");
|
|
|
}
|
|
|
setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
|
|
|
(unsigned long)adapter);
|