diff options
Diffstat (limited to 'common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v3-12-18-net-axgbe-add-link-status-update.patch')
-rw-r--r-- | common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v3-12-18-net-axgbe-add-link-status-update.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v3-12-18-net-axgbe-add-link-status-update.patch b/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v3-12-18-net-axgbe-add-link-status-update.patch new file mode 100644 index 00000000..68cb5f36 --- /dev/null +++ b/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v3-12-18-net-axgbe-add-link-status-update.patch @@ -0,0 +1,90 @@ +From patchwork Fri Mar 9 08:42:28 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [dpdk-dev,v3,12/18] net/axgbe: add link status update +From: Ravi Kumar <ravi1.kumar@amd.com> +X-Patchwork-Id: 35831 +X-Patchwork-Delegate: ferruh.yigit@intel.com +Message-Id: <1520584954-130575-12-git-send-email-Ravi1.kumar@amd.com> +List-Id: dev.dpdk.org +To: dev@dpdk.org +Cc: ferruh.yigit@intel.com +Date: Fri, 9 Mar 2018 03:42:28 -0500 + +Signed-off-by: Ravi Kumar <Ravi1.kumar@amd.com> +--- + doc/guides/nics/features/axgbe.ini | 1 + + drivers/net/axgbe/axgbe_ethdev.c | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+) + +diff --git a/doc/guides/nics/features/axgbe.ini b/doc/guides/nics/features/axgbe.ini +index f644128..2dbff18 100644 +--- a/doc/guides/nics/features/axgbe.ini ++++ b/doc/guides/nics/features/axgbe.ini +@@ -5,6 +5,7 @@ + ; + [Features] + Speed capabilities = Y ++Link status = Y + Jumbo frame = Y + RSS hash = Y + CRC offload = Y +diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c +index ae78e09..ebae6cc 100644 +--- a/drivers/net/axgbe/axgbe_ethdev.c ++++ b/drivers/net/axgbe/axgbe_ethdev.c +@@ -137,6 +137,8 @@ static int axgbe_dev_start(struct rte_eth_dev *dev); + static void axgbe_dev_stop(struct rte_eth_dev *dev); + static void axgbe_dev_interrupt_handler(void *param); + static void axgbe_dev_close(struct rte_eth_dev *dev); ++static int axgbe_dev_link_update(struct rte_eth_dev *dev, ++ int wait_to_complete); + static void axgbe_dev_info_get(struct rte_eth_dev *dev, + struct rte_eth_dev_info *dev_info); + +@@ -193,6 +195,7 @@ static const struct eth_dev_ops axgbe_eth_dev_ops = { + .dev_start = axgbe_dev_start, + .dev_stop = axgbe_dev_stop, + .dev_close = axgbe_dev_close, ++ .link_update = axgbe_dev_link_update, + .dev_infos_get = axgbe_dev_info_get, + .rx_queue_setup = axgbe_dev_rx_queue_setup, + .rx_queue_release = axgbe_dev_rx_queue_release, +@@ -338,6 +341,36 @@ axgbe_dev_close(struct rte_eth_dev *dev) + axgbe_dev_clear_queues(dev); + } + ++/* return 0 means link status changed, -1 means not changed */ ++static int ++axgbe_dev_link_update(struct rte_eth_dev *dev, ++ int wait_to_complete __rte_unused) ++{ ++ PMD_INIT_FUNC_TRACE(); ++ rte_delay_ms(800); ++ ++ struct axgbe_port *pdata = dev->data->dev_private; ++ int old_link_status = dev->data->dev_link.link_status; ++ ++ pdata->phy_if.phy_status(pdata); ++ ++ dev->data->dev_link.link_speed = pdata->phy_speed; ++ switch (pdata->phy.duplex) { ++ case DUPLEX_FULL: ++ dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX; ++ break; ++ case DUPLEX_HALF: ++ dev->data->dev_link.link_duplex = ETH_LINK_HALF_DUPLEX; ++ break; ++ } ++ dev->data->dev_link.link_autoneg = !(dev->data->dev_conf.link_speeds & ++ ETH_LINK_SPEED_FIXED); ++ dev->data->dev_link.link_status = pdata->phy_link; ++ ++ return old_link_status == dev->data->dev_link.link_status ? -1 : 0; ++} ++ ++ + static void + axgbe_dev_info_get(struct rte_eth_dev *dev, + struct rte_eth_dev_info *dev_info) |