> > @@ -5373,6 +5402,30 @@ static int > mvpp2_ethtool_set_pause_param(struct net_device *dev, > > 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); > > + mvpp2_bm_pool_update_fc(port, port->pool_short, > true); > > + } > > + > > + } 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); > > + mvpp2_bm_pool_update_fc(port, port->pool_short, > false); > > + } > > + } > > > This looks wrong. Flow control is normally the result of auto negotiation. > Both > ends need to agree to it. Which is why > mvpp2_ethtool_set_pause_param() passes the users request onto phylink. > phylink will handle the autoneg and then ask the MAC to setup flow control > depending on the result in mvpp2_mac_link_up(). > > Andrew
Ok, I would move it to mvpp2_mac_link_up. Stefan, Thanks.