Thread (48 messages) 48 messages, 3 authors, 2021-01-10

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 int
mvpp2_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.

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help