On an 82599 card, the PHY type is not known until the SFP+ module is connected. If no module is installed when the driver loads, the PHY type will be set to ixgbe_phy_none in ixgbe_identify_phy_82599(). Once it is set there, it will never be re-set, even after a cable is plugged in. SFP+ modules which require initialization won't get it. The detection logic in ixgbe_sfp_probe() won't do anything unless the PHY type is set to ixgbe_phy_nl, so it works on 82598 cards but not on 82599 cards. Fix: Add PHY detection logic to ixgbe_handle_mod(). Add locking to ixgbe_handle_mod() and ixgbe_handle_msf() since PHY detection sometimes fails without it. Since mod_task will call msf_task if necessary, simplify logic in ixgbe_config_link(). Patch attached with submission follows: How-To-Repeat: Install an 82599 card but no SFP+ module. Boot the system, then install a cable (copper or optical).
Responsible Changed From-To: freebsd-bugs->freebsd-net Over to maintainer(s).
Bugzilla is making it hard to tell where this applies to, but it *should* be applied to if_ix.c ... I think.
(In reply to aboyer from comment #0) https://reviews.freebsd.org/D3188 Can you take a look at the review I've put up as I had to redo the patch after ixgbe(4) got an overhaul.
A commit references this bug: Author: sbruno Date: Thu Jan 7 17:02:34 UTC 2016 New revision: 293334 URL: https://svnweb.freebsd.org/changeset/base/293334 Log: Fixup SFP module insertion on the 82599 when insertion happens after the system is booted and running. Add PHY detection logic to ixgbe_handle_mod() and add locking to ixgbe_handle_msf() as well. PR: 150251 Submitted by: aboyer@averesystems.com MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D3188 Changes: head/sys/dev/ixgbe/if_ix.c