diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0006-amd-xgbe-Add-ethtool-show-set-ring-parameter-support.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0006-amd-xgbe-Add-ethtool-show-set-ring-parameter-support.patch | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0006-amd-xgbe-Add-ethtool-show-set-ring-parameter-support.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0006-amd-xgbe-Add-ethtool-show-set-ring-parameter-support.patch deleted file mode 100644 index 3464a094..00000000 --- a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0006-amd-xgbe-Add-ethtool-show-set-ring-parameter-support.patch +++ /dev/null @@ -1,153 +0,0 @@ -From b92764506809e9dd65c2e1a1d7e8e93bd8910491 Mon Sep 17 00:00:00 2001 -From: Tom Lendacky <thomas.lendacky@amd.com> -Date: Wed, 23 May 2018 11:38:56 -0500 -Subject: [PATCH 06/95] amd-xgbe: Add ethtool show/set ring parameter support - -Add ethtool support to show and set the number of the Rx and Tx ring -descriptors. Changing the ring configuration will result in a device -restart. - -Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> ---- - drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 6 +-- - drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 65 ++++++++++++++++++++++++++++ - drivers/net/ethernet/amd/xgbe/xgbe.h | 6 +++ - 3 files changed, 72 insertions(+), 5 deletions(-) - -diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -index 75c4455..0360633 100644 ---- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -@@ -1428,10 +1428,8 @@ static void xgbe_stopdev(struct work_struct *work) - netdev_alert(pdata->netdev, "device stopped\n"); - } - --static void xgbe_restart_dev(struct xgbe_prv_data *pdata) -+void xgbe_restart_dev(struct xgbe_prv_data *pdata) - { -- DBGPR("-->xgbe_restart_dev\n"); -- - /* If not running, "restart" will happen on open */ - if (!netif_running(pdata->netdev)) - return; -@@ -1442,8 +1440,6 @@ static void xgbe_restart_dev(struct xgbe_prv_data *pdata) - xgbe_free_rx_data(pdata); - - xgbe_start(pdata); -- -- DBGPR("<--xgbe_restart_dev\n"); - } - - static void xgbe_restart(struct work_struct *work) -diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c -index 57394b77..d12f982 100644 ---- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c -+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c -@@ -642,6 +642,69 @@ static int xgbe_get_module_eeprom(struct net_device *netdev, - return pdata->phy_if.module_eeprom(pdata, eeprom, data); - } - -+static void xgbe_get_ringparam(struct net_device *netdev, -+ struct ethtool_ringparam *ringparam) -+{ -+ struct xgbe_prv_data *pdata = netdev_priv(netdev); -+ -+ ringparam->rx_max_pending = XGBE_RX_DESC_CNT_MAX; -+ ringparam->tx_max_pending = XGBE_TX_DESC_CNT_MAX; -+ ringparam->rx_pending = pdata->rx_desc_count; -+ ringparam->tx_pending = pdata->tx_desc_count; -+} -+ -+static int xgbe_set_ringparam(struct net_device *netdev, -+ struct ethtool_ringparam *ringparam) -+{ -+ struct xgbe_prv_data *pdata = netdev_priv(netdev); -+ unsigned int rx, tx; -+ -+ if (ringparam->rx_mini_pending || ringparam->rx_jumbo_pending) { -+ netdev_err(netdev, "unsupported ring parameter\n"); -+ return -EINVAL; -+ } -+ -+ if ((ringparam->rx_pending < XGBE_RX_DESC_CNT_MIN) || -+ (ringparam->rx_pending > XGBE_RX_DESC_CNT_MAX)) { -+ netdev_err(netdev, -+ "rx ring parameter must be between %u and %u\n", -+ XGBE_RX_DESC_CNT_MIN, XGBE_RX_DESC_CNT_MAX); -+ return -EINVAL; -+ } -+ -+ if ((ringparam->tx_pending < XGBE_TX_DESC_CNT_MIN) || -+ (ringparam->tx_pending > XGBE_TX_DESC_CNT_MAX)) { -+ netdev_err(netdev, -+ "tx ring parameter must be between %u and %u\n", -+ XGBE_TX_DESC_CNT_MIN, XGBE_TX_DESC_CNT_MAX); -+ return -EINVAL; -+ } -+ -+ rx = __rounddown_pow_of_two(ringparam->rx_pending); -+ if (rx != ringparam->rx_pending) -+ netdev_notice(netdev, -+ "rx ring parameter rounded to power of two: %u\n", -+ rx); -+ -+ tx = __rounddown_pow_of_two(ringparam->tx_pending); -+ if (tx != ringparam->tx_pending) -+ netdev_notice(netdev, -+ "tx ring parameter rounded to power of two: %u\n", -+ tx); -+ -+ if ((rx == pdata->rx_desc_count) && -+ (tx == pdata->tx_desc_count)) -+ goto out; -+ -+ pdata->rx_desc_count = rx; -+ pdata->tx_desc_count = tx; -+ -+ xgbe_restart_dev(pdata); -+ -+out: -+ return 0; -+} -+ - static const struct ethtool_ops xgbe_ethtool_ops = { - .get_drvinfo = xgbe_get_drvinfo, - .get_msglevel = xgbe_get_msglevel, -@@ -664,6 +727,8 @@ static const struct ethtool_ops xgbe_ethtool_ops = { - .set_link_ksettings = xgbe_set_link_ksettings, - .get_module_info = xgbe_get_module_info, - .get_module_eeprom = xgbe_get_module_eeprom, -+ .get_ringparam = xgbe_get_ringparam, -+ .set_ringparam = xgbe_set_ringparam, - }; - - const struct ethtool_ops *xgbe_get_ethtool_ops(void) -diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h -index f0f455b..7dc0fac 100644 ---- a/drivers/net/ethernet/amd/xgbe/xgbe.h -+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h -@@ -144,6 +144,11 @@ - #define XGBE_TX_DESC_MAX_PROC (XGBE_TX_DESC_CNT >> 1) - #define XGBE_RX_DESC_CNT 512 - -+#define XGBE_TX_DESC_CNT_MIN 64 -+#define XGBE_TX_DESC_CNT_MAX 4096 -+#define XGBE_RX_DESC_CNT_MIN 64 -+#define XGBE_RX_DESC_CNT_MAX 4096 -+ - #define XGBE_TX_MAX_BUF_SIZE (0x3fff & ~(64 - 1)) - - /* Descriptors required for maximum contiguous TSO/GSO packet */ -@@ -1330,6 +1335,7 @@ int xgbe_powerup(struct net_device *, unsigned int); - int xgbe_powerdown(struct net_device *, unsigned int); - void xgbe_init_rx_coalesce(struct xgbe_prv_data *); - void xgbe_init_tx_coalesce(struct xgbe_prv_data *); -+void xgbe_restart_dev(struct xgbe_prv_data *pdata); - - #ifdef CONFIG_DEBUG_FS - void xgbe_debugfs_init(struct xgbe_prv_data *); --- -2.7.4 - |