1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/net/ethernet/intel/ixgbe
Cyril Novikov bf0a375055 ixgbe: set X550 MDIO speed before talking to PHY
The MDIO bus speed must be initialized before talking to the PHY the first
time in order to avoid talking to it using a speed that the PHY doesn't
support.

This fixes HW initialization error -17 (IXGBE_ERR_PHY_ADDR_INVALID) on
Denverton CPUs (a.k.a. the Atom C3000 family) on ports with a 10Gb network
plugged in. On those devices, HLREG0[MDCSPD] resets to 1, which combined
with the 10Gb network results in a 24MHz MDIO speed, which is apparently
too fast for the connected PHY. PHY register reads over MDIO bus return
garbage, leading to initialization failure.

Reproduced with Linux kernel 4.19 and 5.15-rc7. Can be reproduced using
the following setup:

* Use an Atom C3000 family system with at least one X552 LAN on the SoC
* Disable PXE or other BIOS network initialization if possible
  (the interface must not be initialized before Linux boots)
* Connect a live 10Gb Ethernet cable to an X550 port
* Power cycle (not reset, doesn't always work) the system and boot Linux
* Observe: ixgbe interfaces w/ 10GbE cables plugged in fail with error -17

Fixes: e84db72727 ("ixgbe: Introduce function to control MDIO speed")
Signed-off-by: Cyril Novikov <cnovikov@lynx.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
2021-12-15 11:24:39 -08:00
..
ixgbe.h ixgbe: let the xdpdrv work with more than 64 cpus 2021-09-30 13:38:08 +01:00
ixgbe_82598.c ethernet/intel: Convert fallthrough code comments 2020-07-01 13:47:43 -07:00
ixgbe_82599.c ixgbe: use checker safe conversions 2021-05-26 09:11:41 -07:00
ixgbe_common.c ixgbe: Fix out-bounds warning in ixgbe_host_interface_command() 2021-05-27 16:10:00 -07:00
ixgbe_common.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82598.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82598.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82599.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82599.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_nl.c net: ethernet: intel: Fix a typo in the file ixgbe_dcb_nl.c 2021-04-13 19:08:48 -07:00
ixgbe_debugfs.c netdev: pass the stuck queue to the timeout handler 2019-12-12 21:38:57 -08:00
ixgbe_ethtool.c net: convert users of bitmap_foo() to linkmode_foo() 2021-10-24 13:58:52 +01:00
ixgbe_fcoe.c scsi: fcoe: Fix I/O path allocation 2020-08-17 21:52:39 -04:00
ixgbe_fcoe.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_ipsec.c ixgbe: reduce checker warnings 2021-05-26 09:11:41 -07:00
ixgbe_ipsec.h ixgbe: add VF IPsec management 2018-08-28 14:33:03 -07:00
ixgbe_lib.c ixgbe: let the xdpdrv work with more than 64 cpus 2021-09-30 13:38:08 +01:00
ixgbe_main.c ixgbe: Document how to enable NBASE-T support 2021-12-15 11:09:29 -08:00
ixgbe_mbx.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_mbx.h ixgbe: add VF IPsec offload request message handling 2018-08-28 14:33:14 -07:00
ixgbe_model.h ixgbe: cleanup sparse warnings 2018-05-17 08:24:30 -07:00
ixgbe_phy.c ixgbe: Support external GBE SerDes PHY BCM54616s 2021-04-13 19:08:48 -07:00
ixgbe_phy.h ixgbe: Check DDM existence in transceiver before access 2019-06-26 09:18:54 -07:00
ixgbe_ptp.c ixgbe: Fix fall-through warnings for Clang 2021-03-23 11:34:02 -07:00
ixgbe_sriov.c ixgbe: fix large MTU request from VF 2021-05-20 15:22:41 -07:00
ixgbe_sriov.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_sysfs.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_txrx_common.h ixgbe: let the xdpdrv work with more than 64 cpus 2021-09-30 13:38:08 +01:00
ixgbe_type.h net: intel: Remove unused function pointer typedef ixgbe_mc_addr_itr 2021-04-13 19:08:48 -07:00
ixgbe_x540.c intel: clean up mismatched header comments 2021-03-23 11:34:02 -07:00
ixgbe_x540.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_x550.c ixgbe: set X550 MDIO speed before talking to PHY 2021-12-15 11:24:39 -08:00
ixgbe_xsk.c ixgbe: let the xdpdrv work with more than 64 cpus 2021-09-30 13:38:08 +01:00
Makefile ixgbe/ixgbevf: fix XFRM_ALGO dependency 2018-10-31 10:53:15 -07:00