|
42 | 42 | #include <linux/slab.h>
|
43 | 43 | #include <net/checksum.h>
|
44 | 44 | #include <net/ip6_checksum.h>
|
| 45 | +#include <linux/etherdevice.h> |
45 | 46 | #include <linux/ethtool.h>
|
46 | 47 | #include <linux/if.h>
|
47 | 48 | #include <linux/if_vlan.h>
|
|
50 | 51 | #include <linux/prefetch.h>
|
51 | 52 | #include <scsi/fc/fc_fcoe.h>
|
52 | 53 |
|
| 54 | +#ifdef CONFIG_OF |
| 55 | +#include <linux/of_net.h> |
| 56 | +#endif |
| 57 | + |
| 58 | +#ifdef CONFIG_SPARC |
| 59 | +#include <asm/idprom.h> |
| 60 | +#include <asm/prom.h> |
| 61 | +#endif |
| 62 | + |
53 | 63 | #include "ixgbe.h"
|
54 | 64 | #include "ixgbe_common.h"
|
55 | 65 | #include "ixgbe_dcb_82599.h"
|
@@ -8020,6 +8030,29 @@ int ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id,
|
8020 | 8030 | return is_wol_supported;
|
8021 | 8031 | }
|
8022 | 8032 |
|
| 8033 | +/** |
| 8034 | + * ixgbe_get_platform_mac_addr - Look up MAC address in Open Firmware / IDPROM |
| 8035 | + * @adapter: Pointer to adapter struct |
| 8036 | + */ |
| 8037 | +static void ixgbe_get_platform_mac_addr(struct ixgbe_adapter *adapter) |
| 8038 | +{ |
| 8039 | +#ifdef CONFIG_OF |
| 8040 | + struct device_node *dp = pci_device_to_OF_node(adapter->pdev); |
| 8041 | + struct ixgbe_hw *hw = &adapter->hw; |
| 8042 | + const unsigned char *addr; |
| 8043 | + |
| 8044 | + addr = of_get_mac_address(dp); |
| 8045 | + if (addr) { |
| 8046 | + ether_addr_copy(hw->mac.perm_addr, addr); |
| 8047 | + return; |
| 8048 | + } |
| 8049 | +#endif /* CONFIG_OF */ |
| 8050 | + |
| 8051 | +#ifdef CONFIG_SPARC |
| 8052 | + ether_addr_copy(hw->mac.perm_addr, idprom->id_ethaddr); |
| 8053 | +#endif /* CONFIG_SPARC */ |
| 8054 | +} |
| 8055 | + |
8023 | 8056 | /**
|
8024 | 8057 | * ixgbe_probe - Device Initialization Routine
|
8025 | 8058 | * @pdev: PCI device information struct
|
@@ -8289,6 +8322,8 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
8289 | 8322 | goto err_sw_init;
|
8290 | 8323 | }
|
8291 | 8324 |
|
| 8325 | + ixgbe_get_platform_mac_addr(adapter); |
| 8326 | + |
8292 | 8327 | memcpy(netdev->dev_addr, hw->mac.perm_addr, netdev->addr_len);
|
8293 | 8328 |
|
8294 | 8329 | if (!is_valid_ether_addr(netdev->dev_addr)) {
|
|
0 commit comments