{
        s32 ret_val = 0;
 
-       if (igb_check_alt_mac_addr(hw))
-               ret_val = igb_read_mac_addr(hw);
+       /*
+        * If there's an alternate MAC address place it in RAR0
+        * so that it will override the Si installed default perm
+        * address.
+        */
+       ret_val = igb_check_alt_mac_addr(hw);
+       if (ret_val)
+               goto out;
+
+       ret_val = igb_read_mac_addr(hw);
 
+out:
        return ret_val;
 }
 
 
        }
 
        if (nvm_alt_mac_addr_offset == 0xFFFF) {
-               ret_val = -(E1000_NOT_IMPLEMENTED);
+               /* There is no Alternate MAC Address */
                goto out;
        }
 
        if (hw->bus.func == E1000_FUNC_1)
-               nvm_alt_mac_addr_offset += ETH_ALEN/sizeof(u16);
-
+               nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1;
        for (i = 0; i < ETH_ALEN; i += 2) {
                offset = nvm_alt_mac_addr_offset + (i >> 1);
                ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
 
        /* if multicast bit is set, the alternate address will not be used */
        if (alt_mac_addr[0] & 0x01) {
-               ret_val = -(E1000_NOT_IMPLEMENTED);
+               hw_dbg("Ignoring Alternate Mac Address with MC bit set\n");
                goto out;
        }
 
-       for (i = 0; i < ETH_ALEN; i++)
-               hw->mac.addr[i] = hw->mac.perm_addr[i] = alt_mac_addr[i];
-
-       hw->mac.ops.rar_set(hw, hw->mac.perm_addr, 0);
+       /*
+        * We have a valid alternate MAC address, and we want to treat it the
+        * same as the normal permanent MAC address stored by the HW into the
+        * RAR. Do this by mapping this address into RAR0.
+        */
+       hw->mac.ops.rar_set(hw, alt_mac_addr, 0);
 
 out:
        return ret_val;