Date: Fri, 3 Sep 2010 15:14:05 GMT From: Andrew Boyer <aboyer@averesystems.com> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/150249: [ixgbe] Media type detection broken Message-ID: <201009031514.o83FE5Dn054552@www.freebsd.org> Resent-Message-ID: <201009031520.o83FK3vj002052@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 150249 >Category: misc >Synopsis: [ixgbe] Media type detection broken >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Sep 03 15:20:03 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Andrew Boyer >Release: 7.1p3 >Organization: Avere Systems >Environment: N/A >Description: Intel 82599 adapter cards can use either copper or optical modules. Currently, no matter which type of connection is used, ifconfig will report a media type of 10Gbase-SR. Several changes are required to fix this. 1) In ixgbe_attach(), pci_device_id IXGBE_DEV_ID_82599_SFP causes adapter->optics to be set to IFM_10G_SR. This is incorrect. The "optics" type can not be set until the media is actually detected. (2) In our tree I added a switch statement at the end of ixgbe_handle_mod() to set the optics value based on the return value of hw->mac.ops.get_media_type(). That led me to discover that functions ixgbe_get_media_type_82598() and ixgbe_get_media_type_82599() have flaws: 3) In ixgbe_get_media_type_82598(), device_id IXGBE_DEV_ID_82598_DA_DUAL_PORT returns ixgbe_media_type_fiber, even though the DA card supports only copper. 4) In both, the initial test to detect if there is a copper PHY attached leaves out some possible values for copper PHYs: ixgbe_phy_sfp_passive_tyco ixgbe_phy_sfp_passive_unknown ixgbe_phy_sfp_active_unknown 5) Once you fix this so that ixgbe_get_media_type_*() returns the correct value, you'll notice that ixgbe_identify_sfp_module_generic() stops working for copper cables. This is because it tests for (mac.ops.get_media_type() != ixgbe_media_type_fiber) and returns an error. In our internal tree I have commented out this check completely; the ID routine will fail gracefully if there isn't an SFP present, at least on all of our card types. >How-To-Repeat: Install an 82599 card and SFP+ copper cables. Run 'ifconfig' and observe that the media type is listed as (10Gbase-SR <full-duplex>). >Fix: See suggestions in the Full Description. I could put together a patch if it would help get this fixed in the tree, although a lot of it is in Intel common code (ixgbe_82598.c, ixgbe_82599.c, ixgbe_phy.c). >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009031514.o83FE5Dn054552>