From 5d0d7892797f8b454dc3c233bc3f49e74c208466 Mon Sep 17 00:00:00 2001 From: Wenzhuo Lu Date: Tue, 16 Jun 2015 16:07:49 +0800 Subject: [PATCH] ixgbe: fix X550 copper link For there're only laser ports on x550 before, we only considered laser ports for the testpmd CLIs "port start/stop ...". Now we have new x550 devices which have copper ports. Use the API for copper to enable/disable these ports. And also let the testpmd CLI "set link-up/down ..." support copper ports. Signed-off-by: Wenzhuo Lu Acked-by: Konstantin Ananyev --- drivers/net/ixgbe/ixgbe_ethdev.c | 44 ++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index d39640bdac..f18550cef6 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1522,8 +1522,13 @@ ixgbe_dev_start(struct rte_eth_dev *dev) goto error; } - /* Turn on the laser */ - ixgbe_enable_tx_laser(hw); + if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper) { + /* Turn on the copper */ + ixgbe_set_phy_power(hw, true); + } else { + /* Turn on the laser */ + ixgbe_enable_tx_laser(hw); + } err = ixgbe_check_link(hw, &speed, &link_up, 0); if (err) @@ -1643,8 +1648,13 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) vf < dev->pci_dev->max_vfs; vf++) vfinfo[vf].clear_to_send = false; - /* Turn off the laser */ - ixgbe_disable_tx_laser(hw); + if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper) { + /* Turn off the copper */ + ixgbe_set_phy_power(hw, false); + } else { + /* Turn off the laser */ + ixgbe_disable_tx_laser(hw); + } ixgbe_dev_clear_queues(dev); @@ -1670,7 +1680,7 @@ ixgbe_dev_stop(struct rte_eth_dev *dev) } /* - * Set device link up: enable tx laser. + * Set device link up: enable tx. */ static int ixgbe_dev_set_link_up(struct rte_eth_dev *dev) @@ -1686,18 +1696,21 @@ ixgbe_dev_set_link_up(struct rte_eth_dev *dev) return -ENOTSUP; } #endif + } + + if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper) { + /* Turn on the copper */ + ixgbe_set_phy_power(hw, true); + } else { /* Turn on the laser */ ixgbe_enable_tx_laser(hw); - return 0; } - PMD_INIT_LOG(ERR, "Set link up is not supported by device id 0x%x", - hw->device_id); - return -ENOTSUP; + return 0; } /* - * Set device link down: disable tx laser. + * Set device link down: disable tx. */ static int ixgbe_dev_set_link_down(struct rte_eth_dev *dev) @@ -1713,14 +1726,17 @@ ixgbe_dev_set_link_down(struct rte_eth_dev *dev) return -ENOTSUP; } #endif + } + + if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper) { + /* Turn off the copper */ + ixgbe_set_phy_power(hw, false); + } else { /* Turn off the laser */ ixgbe_disable_tx_laser(hw); - return 0; } - PMD_INIT_LOG(ERR, "Set link down is not supported by device id 0x%x", - hw->device_id); - return -ENOTSUP; + return 0; } /* -- 2.20.1