Hi Jonathan, thanks for the diff. Currently building a kernel with it and will report back.
Regards, Rogier On Sat, Apr 27, 2013 at 3:24 AM, Jonathan Gray <[email protected]> wrote: > On Fri, Apr 26, 2013 at 10:51:45PM +0200, Rogier Krieger wrote: > > Dear list, > > > > after installing a dual-port fibre NIC, it seems the card is recognized, > > but fails to initalize. The card in question is an i350-F2. I've upgraded > > to the latest snapshot to see if there's any improvement, but alas. > > > > <snip> > > em0 at pci8 dev 0 function 0 "Intel I350 Fiber" rev 0x01: msiem0: > Hardware > > Initialization Failedem0: Unable to initialize the hardware > > em1 at pci8 dev 0 function 1 "Intel I350 Fiber" rev 0x01: msiem1: > Hardware > > Initialization Failedem1: Unable to initialize the hardware > > </snip> > > > > >From commits, I gather the i350 is relatively new. Would anyone have > > advice/hints on what steps of the initialisation I should look or how I > can > > generate more debugging output? I tried a verbose boot (boot -c), but > that > > didn't show more details for these em(4) cards. The box is currently > hooked > > up for testing, so few things to break. > > > > Any insight appreciated. I've added dmesg and pcidump below. > > It was tested with copper not fibre, perhaps the following > diff helps. > > Index: if_em_hw.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/if_em_hw.c,v > retrieving revision 1.71 > diff -u -p -r1.71 if_em_hw.c > --- if_em_hw.c 5 Dec 2012 23:20:20 -0000 1.71 > +++ if_em_hw.c 27 Apr 2013 01:21:06 -0000 > @@ -1446,7 +1446,7 @@ em_adjust_serdes_amplitude(struct em_hw > DEBUGFUNC("em_adjust_serdes_amplitude"); > > if (hw->media_type != em_media_type_internal_serdes || > - hw->mac_type == em_82575) > + (hw->mac_type >= em_82575)) > return E1000_SUCCESS; > > switch (hw->mac_type) { > @@ -1700,10 +1700,10 @@ em_setup_fiber_serdes_link(struct em_hw > * initialization. > */ > if (hw->mac_type == em_82571 || hw->mac_type == em_82572 || > - hw->mac_type == em_82575) > + hw->mac_type >= em_82575) > E1000_WRITE_REG(hw, SCTL, E1000_DISABLE_SERDES_LOOPBACK); > > - if (hw->mac_type == em_82575) > + if (hw->mac_type >= em_82575) > em_power_up_serdes_link_82575(hw); > > /* > @@ -1724,7 +1724,7 @@ em_setup_fiber_serdes_link(struct em_hw > /* Take the link out of reset */ > ctrl &= ~(E1000_CTRL_LRST); > > - if (hw->mac_type == em_82575) { > + if (hw->mac_type >= em_82575) { > /* set both sw defined pins on 82575/82576*/ > ctrl |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1; > > @@ -3611,7 +3611,7 @@ em_check_for_link(struct em_hw *hw) > DEBUGFUNC("em_check_for_link"); > uint16_t speed, duplex; > > - if (hw->mac_type == em_82575 && > + if ((hw->mac_type >= em_82575) && > hw->media_type != em_media_type_copper) { > ret_val = em_get_pcs_speed_and_duplex_82575(hw, &speed, > &duplex); > @@ -3951,7 +3951,8 @@ em_get_speed_and_duplex(struct em_hw *hw > uint16_t phy_data; > DEBUGFUNC("em_get_speed_and_duplex"); > > - if (hw->mac_type == em_82575 && hw->media_type != > em_media_type_copper) > + if ((hw->mac_type >= em_82575) && > + hw->media_type != em_media_type_copper) > return em_get_pcs_speed_and_duplex_82575(hw, speed, > duplex); > > if (hw->mac_type >= em_82543) { > @@ -5284,7 +5285,7 @@ em_detect_gig_phy(struct em_hw *hw) > > if ((hw->media_type == em_media_type_internal_serdes || > hw->media_type == em_media_type_fiber) && > - hw->mac_type == em_82575) { > + (hw->mac_type >= em_82575)) { > hw->phy_type = em_phy_undefined; > return E1000_SUCCESS; > } > -- If you don't know where you're going, any road will get you there.

