RE: [EXT] Re: [PATCH RFC net-next 14/19] net: mvpp2: add ethtool flow control configuration support
From: Stefan Chulski <hidden>
Date: 2021-01-10 18:29:06
Also in:
lkml
quoted
@@ -5373,6 +5402,30 @@ static intmvpp2_ethtool_set_pause_param(struct net_device *dev,quoted
struct ethtool_pauseparam *pause) { struct mvpp2_port *port = netdev_priv(dev); + int i; + + if (pause->tx_pause && port->priv->global_tx_fc) { + port->tx_fc = true; + mvpp2_rxq_enable_fc(port); + if (port->priv->percpu_pools) { + for (i = 0; i < port->nrxqs; i++) + mvpp2_bm_pool_update_fc(port, &port- priv->bm_pools[i], true); + } else { + mvpp2_bm_pool_update_fc(port, port->pool_long,true);quoted
+ mvpp2_bm_pool_update_fc(port, port->pool_short,true);quoted
+ } + + } else if (port->priv->global_tx_fc) { + port->tx_fc = false; + mvpp2_rxq_disable_fc(port); + if (port->priv->percpu_pools) { + for (i = 0; i < port->nrxqs; i++) + mvpp2_bm_pool_update_fc(port, &port- priv->bm_pools[i], false); + } else { + mvpp2_bm_pool_update_fc(port, port->pool_long,false);quoted
+ mvpp2_bm_pool_update_fc(port, port->pool_short,false);quoted
+ } + }This doesn't look correct to me. This function is only called when ethtool -A is used to change the flow control settings. This is not the place to be configuring flow control, as flow control is negotiated with the link partner. The final resolved flow control settings are available in mvpp2_mac_link_up() via the tx_pause and rx_pause parameters.
I would move this to mvpp2_mac_link_up. Thanks.
What also concerns me is whether flow control is supported in the existing driver at all, given this patch set. If it isn't supported without the firmware's help, then we should _not_ be negotiating flow control with the link partner unless we actually support it, so the Pause and Asym_Pause bits in mvpp2_phylink_validate() should be cleared.
RX FC supported, issue only with TX FC. Stefan, Regards.