Module Name: src Committed By: msaitoh Date: Wed Nov 8 08:41:13 UTC 2017
Modified Files: src/sys/dev/pci/ixgbe: ixgbe_x550.c Log Message: Fix a bug that Denverton which uses firmware don't linkup if the media is forced to 100baseTX-FDX or 10baseT-FDX. As I wrote in ixgbe_phy.c rev. 1.13, popular switches and OSes don't use auto-negotiation if the media is forced to 100BASE-TX or 10BASE-T. Do the same thing. But, if we don't set FW_PHY_ACT_SETUP_LINK_AN in ixgbe_setup_fw_link(), the firmware wrongly set BMCR register. Two problems are observed: a) FDX may not be set. b) BMCR_SPEED1 (bit 6) is always cleard. + -------+------+-----------+-----+ |request | BMCR | BMCR spd | BMCR | | | (HEX)| (in bits)| FDX | +--------+------+----------+------+ | 10M | 0000 | 10M(00) | 0 | | 10M | 2100 | 100M(01) | 1 | | 100M | 0000 | 10M(00) | 0 | | 100M | 0100 | 10M(00) | 1 | +--------------------------+------+ To avoid this problem, after sending request to firmware, check BMCR register and fix the setting if it's required. Before this change: +------------------+---------------------------------------------+ | | denverton | | +---------+--------+---------+----------------+ | | auto | 1G FDX | 100 FDX | 10 FDX | +---------+--------+---------+--------+---------+----------------+ | | auto | 1G FDX | 1G FDX | 100 FDX | 10FDX/down(NG) | | +--------+---------+--------+---------+----------------+ | | 1G FDX | 1G FDX | 1G FDX | down | down | | link +--------+---------+--------+---------+----------------+ | partner |100 FDX | down(*1)| down | down(NG)| down | | +--------+---------+--------+---------+----------------+ | | 10 FDX | down(*1)| down | down | down(NG) | +---------+--------+---------+--------+---------+----------------+ (Observed on: NVM Image Version 0.05 ID 0x8, NVM Map version 1.16, OEM NVM Image version 0.06, ETrackID 8000087c) After this change: +------------------+---------------------------------------------+ | | denverton | | +---------+--------+---------+----------------+ | | auto | 1G FDX | 100 FDX | 10 FDX | +---------+--------+---------+--------+---------+----------------+ | | auto | 1G FDX | 1G FDX | 100 FDX | 10 FDX | | +--------+---------+--------+---------+----------------+ | | 1G FDX | 1G FDX | 1G FDX | down | down | | link +--------+---------+--------+---------+----------------+ | partner |100 FDX | down(*1)| down | 100 FDX | down | | +--------+---------+--------+---------+----------------+ | | 10 FDX | down(*1)| down | down | 10 FDX | +---------+--------+---------+--------+---------+----------------+ *1): may be correct because ixg doesn't support half duplex. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/dev/pci/ixgbe/ixgbe_x550.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.