Regression: em driver in -CURRENT, "Invalid MAC address"

Sam Fourman Jr. sfourman at gmail.com
Wed Aug 19 02:55:24 UTC 2009


On Mon, Jul 13, 2009 at 12:25 PM, Mark Atkinson<atkin901 at yahoo.com> wrote:
> Jack Vogel wrote:
>> In case you hadn't seen it, the code that fixes this is now checked into
>> the tip, so the latest em driver should work for you.
>
> I upgraded the machine in question this morning and it appears to be
> working, thanks!


Jack

Would you be able to commit this patch to em(4) I have several
machines that do not work on FreeBSD 8 BETA2
With the 82543 em(4) based card. I copied the same approach you took
on e1000_82542.c

Thank you

Sam Fourman Jr.


pciconf -v -l |grep -A4 -e "^em"

em0 at pci0:14:13:0:	class=0x020000 card=0x10038086 chip=0x10018086
rev=0x02 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82543GC Gigabit Ethernet Adapter (Fiber)'
    class      = network
    subclass   = ethernet



I tested this patch and it works on today's source tree


**** e1000_82543.c       Wed Nov 26 17:57:23 2008
--- /root/e1000_82543.c Tue Aug 18 21:23:00 2009
***************
*** 75,80 ****
--- 75,81 ----
                                             u16 count);
  static bool e1000_tbi_compatibility_enabled_82543(struct e1000_hw *hw);
  static void e1000_set_tbi_sbp_82543(struct e1000_hw *hw, bool state);
+ static s32  e1000_read_mac_addr_82543(struct e1000_hw *hw);

  /**
   *  e1000_init_phy_params_82543 - Init PHY func ptrs.
***************
*** 246,251 ****
--- 247,254 ----
        mac->ops.clear_vfta = e1000_clear_vfta_generic;
        /* setting MTA */
        mac->ops.mta_set = e1000_mta_set_82543;
+       /* read mac address */
+       mac->ops.read_mac_addr = e1000_read_mac_addr_82543;
        /* turn on/off LED */
        mac->ops.led_on = e1000_led_on_82543;
        mac->ops.led_off = e1000_led_off_82543;
***************
*** 1600,1602 ****
--- 1603,1638 ----
        E1000_READ_REG(hw, E1000_TSCTC);
        E1000_READ_REG(hw, E1000_TSCTFC);
  }
+
+  /**
+   *  e1000_read_mac_addr_82543 - Read device MAC address
+   *  @hw: pointer to the HW structure
+   *  Same approach was taken for the 82542
+   *
+   *  Reads the device MAC address from the EEPROM and stores the value.
+   **/
+ static s32 e1000_read_mac_addr_82543(struct e1000_hw *hw)
+ {
+       s32  ret_val = E1000_SUCCESS;
+               u16 offset, nvm_data, i;
+
+              DEBUGFUNC("e1000_read_mac_addr");
+
+                for (i = 0; i < ETH_ADDR_LEN; i += 2) {


More information about the freebsd-net mailing list