From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
To: Vishal Badole <Vishal.Badole@amd.com>,
Shyam-sundar.S-k@amd.com, andrew+netdev@lunn.ch,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [RESEND PATCH net-next] amd-xgbe: Configure and retrieve 'tx-usecs' for Tx coalescing
Date: Sat, 19 Jul 2025 16:16:49 +0100 [thread overview]
Message-ID: <509add4e-5dff-4f30-b96b-488919fedb77@linux.dev> (raw)
In-Reply-To: <20250719072608.4048494-1-Vishal.Badole@amd.com>
On 19.07.2025 08:26, Vishal Badole wrote:
> Ethtool has advanced with additional configurable options, but the
> current driver does not support tx-usecs configuration.
>
> Add support to configure and retrieve 'tx-usecs' using ethtool, which
> specifies the wait time before servicing an interrupt for Tx coalescing.
>
> Signed-off-by: Vishal Badole <Vishal.Badole@amd.com>
> Acked-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
> ---
> drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 19 +++++++++++++++++--
> drivers/net/ethernet/amd/xgbe/xgbe.h | 1 +
> 2 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> index 12395428ffe1..362f8623433a 100644
> --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
> @@ -450,6 +450,7 @@ static int xgbe_get_coalesce(struct net_device *netdev,
> ec->rx_coalesce_usecs = pdata->rx_usecs;
> ec->rx_max_coalesced_frames = pdata->rx_frames;
>
> + ec->tx_coalesce_usecs = pdata->tx_usecs;
> ec->tx_max_coalesced_frames = pdata->tx_frames;
>
> return 0;
> @@ -463,7 +464,7 @@ static int xgbe_set_coalesce(struct net_device *netdev,
> struct xgbe_prv_data *pdata = netdev_priv(netdev);
> struct xgbe_hw_if *hw_if = &pdata->hw_if;
> unsigned int rx_frames, rx_riwt, rx_usecs;
> - unsigned int tx_frames;
> + unsigned int tx_frames, tx_usecs;
>
> rx_riwt = hw_if->usec_to_riwt(pdata, ec->rx_coalesce_usecs);
> rx_usecs = ec->rx_coalesce_usecs;
> @@ -485,9 +486,22 @@ static int xgbe_set_coalesce(struct net_device *netdev,
> return -EINVAL;
> }
>
> + tx_usecs = ec->tx_coalesce_usecs;
> tx_frames = ec->tx_max_coalesced_frames;
>
> + /* Check if both tx_usecs and tx_frames are set to 0 simultaneously */
> + if (!tx_usecs && !tx_frames) {
> + netdev_err(netdev,
> + "tx_usecs and tx_frames must not be 0 together\n");
> + return -EINVAL;
> + }
> +
> /* Check the bounds of values for Tx */
> + if (tx_usecs > XGMAC_MAX_COAL_TX_TICK) {
> + netdev_err(netdev, "tx-usecs is limited to %d usec\n",
> + XGMAC_MAX_COAL_TX_TICK);
> + return -EINVAL;
> + }
> if (tx_frames > pdata->tx_desc_count) {
> netdev_err(netdev, "tx-frames is limited to %d frames\n",
> pdata->tx_desc_count);
> @@ -499,6 +513,7 @@ static int xgbe_set_coalesce(struct net_device *netdev,
> pdata->rx_frames = rx_frames;
> hw_if->config_rx_coalesce(pdata);
>
> + pdata->tx_usecs = tx_usecs;
> pdata->tx_frames = tx_frames;
> hw_if->config_tx_coalesce(pdata);
>
I'm not quite sure, but it looks like it never works. config_tx_coalesce()
callback equals to xgbe_config_tx_coalesce() which is implemented as:
static int xgbe_config_tx_coalesce(struct xgbe_prv_data *pdata)
{
return 0;
}
How is it expected to change anything from HW side?
> @@ -830,7 +845,7 @@ static int xgbe_set_channels(struct net_device *netdev,
> }
>
> static const struct ethtool_ops xgbe_ethtool_ops = {
> - .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS |
> + .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
> ETHTOOL_COALESCE_MAX_FRAMES,
> .get_drvinfo = xgbe_get_drvinfo,
> .get_msglevel = xgbe_get_msglevel,
> diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
> index 42fa4f84ff01..e330ae9ea685 100755
> --- a/drivers/net/ethernet/amd/xgbe/xgbe.h
> +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
> @@ -272,6 +272,7 @@
> /* Default coalescing parameters */
> #define XGMAC_INIT_DMA_TX_USECS 1000
> #define XGMAC_INIT_DMA_TX_FRAMES 25
> +#define XGMAC_MAX_COAL_TX_TICK 100000
>
> #define XGMAC_MAX_DMA_RIWT 0xff
> #define XGMAC_INIT_DMA_RX_USECS 30
next prev parent reply other threads:[~2025-07-19 15:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-19 7:26 [RESEND PATCH net-next] amd-xgbe: Configure and retrieve 'tx-usecs' for Tx coalescing Vishal Badole
2025-07-19 15:16 ` Vadim Fedorenko [this message]
2025-07-20 18:28 ` Badole, Vishal
2025-07-20 21:35 ` Vadim Fedorenko
2025-07-25 8:59 ` Badole, Vishal
2025-07-26 1:07 ` Jakub Kicinski
2025-07-26 11:08 ` Badole, Vishal
2025-08-01 1:25 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=509add4e-5dff-4f30-b96b-488919fedb77@linux.dev \
--to=vadim.fedorenko@linux.dev \
--cc=Shyam-sundar.S-k@amd.com \
--cc=Vishal.Badole@amd.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.