Commit 40a70b38 authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller

igb: read address from RAH/RAL instead of from EEPROM

Instead of pulling the mac address from EEPROM it is easier to pull it from
the RAL/RAH registers and then just copy it into the address structures.
Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c1889bfe
...@@ -481,6 +481,8 @@ ...@@ -481,6 +481,8 @@
* manageability enabled, allowing us room for 15 multicast addresses. * manageability enabled, allowing us room for 15 multicast addresses.
*/ */
#define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */ #define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */
#define E1000_RAL_MAC_ADDR_LEN 4
#define E1000_RAH_MAC_ADDR_LEN 2
/* Error Codes */ /* Error Codes */
#define E1000_ERR_NVM 1 #define E1000_ERR_NVM 1
......
...@@ -515,29 +515,23 @@ s32 igb_read_part_num(struct e1000_hw *hw, u32 *part_num) ...@@ -515,29 +515,23 @@ s32 igb_read_part_num(struct e1000_hw *hw, u32 *part_num)
**/ **/
s32 igb_read_mac_addr(struct e1000_hw *hw) s32 igb_read_mac_addr(struct e1000_hw *hw)
{ {
s32 ret_val = 0; u32 rar_high;
u16 offset, nvm_data, i; u32 rar_low;
u16 i;
for (i = 0; i < ETH_ALEN; i += 2) { rar_high = rd32(E1000_RAH(0));
offset = i >> 1; rar_low = rd32(E1000_RAL(0));
ret_val = hw->nvm.ops.read_nvm(hw, offset, 1, &nvm_data);
if (ret_val) { for (i = 0; i < E1000_RAL_MAC_ADDR_LEN; i++)
hw_dbg("NVM Read Error\n"); hw->mac.perm_addr[i] = (u8)(rar_low >> (i*8));
goto out;
}
hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
}
/* Flip last bit of mac address if we're on second port */ for (i = 0; i < E1000_RAH_MAC_ADDR_LEN; i++)
if (hw->bus.func == E1000_FUNC_1) hw->mac.perm_addr[i+4] = (u8)(rar_high >> (i*8));
hw->mac.perm_addr[5] ^= 1;
for (i = 0; i < ETH_ALEN; i++) for (i = 0; i < ETH_ALEN; i++)
hw->mac.addr[i] = hw->mac.perm_addr[i]; hw->mac.addr[i] = hw->mac.perm_addr[i];
out: return 0;
return ret_val;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment