Skip to content

Commit

Permalink
net: dpaa2: add support for manual setup of IRQ coalesing
Browse files Browse the repository at this point in the history
Use the newly exported dpio driver API to manually configure the IRQ
coalescing parameters requested by the user.
The .get_coalesce() and .set_coalesce() net_device callbacks are
implemented and directly export or setup the rx-usecs on all the
channels configured.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ioana Ciornei authored and David S. Miller committed Oct 15, 2021
1 parent ed1d214 commit a64b442
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,56 @@ static int dpaa2_eth_set_tunable(struct net_device *net_dev,
return err;
}

static int dpaa2_eth_get_coalesce(struct net_device *dev,
struct ethtool_coalesce *ic,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{
struct dpaa2_eth_priv *priv = netdev_priv(dev);
struct dpaa2_io *dpio = priv->channel[0]->dpio;

dpaa2_io_get_irq_coalescing(dpio, &ic->rx_coalesce_usecs);

return 0;
}

static int dpaa2_eth_set_coalesce(struct net_device *dev,
struct ethtool_coalesce *ic,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{
struct dpaa2_eth_priv *priv = netdev_priv(dev);
struct dpaa2_io *dpio;
u32 prev_rx_usecs;
int i, j, err;

/* Keep track of the previous value, just in case we fail */
dpio = priv->channel[0]->dpio;
dpaa2_io_get_irq_coalescing(dpio, &prev_rx_usecs);

/* Setup new value for rx coalescing */
for (i = 0; i < priv->num_channels; i++) {
dpio = priv->channel[i]->dpio;

err = dpaa2_io_set_irq_coalescing(dpio, ic->rx_coalesce_usecs);
if (err)
goto restore_rx_usecs;
}

return 0;

restore_rx_usecs:
for (j = 0; j < i; j++) {
dpio = priv->channel[j]->dpio;

dpaa2_io_set_irq_coalescing(dpio, prev_rx_usecs);
}

return err;
}

const struct ethtool_ops dpaa2_ethtool_ops = {
.supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
.get_drvinfo = dpaa2_eth_get_drvinfo,
.nway_reset = dpaa2_eth_nway_reset,
.get_link = ethtool_op_get_link,
Expand All @@ -836,4 +885,6 @@ const struct ethtool_ops dpaa2_ethtool_ops = {
.get_ts_info = dpaa2_eth_get_ts_info,
.get_tunable = dpaa2_eth_get_tunable,
.set_tunable = dpaa2_eth_set_tunable,
.get_coalesce = dpaa2_eth_get_coalesce,
.set_coalesce = dpaa2_eth_set_coalesce,
};

0 comments on commit a64b442

Please sign in to comment.