On Mon, Jul 22, 2019 at 02:40:17PM -0700, Shannon Nelson wrote: > +static void ionic_get_pauseparam(struct net_device *netdev, > + struct ethtool_pauseparam *pause) > +{ > + struct lif *lif = netdev_priv(netdev); > + struct ionic_dev *idev = &lif->ionic->idev; > + uint8_t pause_type = idev->port_info->config.pause_type; > + > + pause->autoneg = 0; > + > + if (pause_type) { > + pause->rx_pause = pause_type & IONIC_PAUSE_F_RX ? 1 : 0; > + pause->tx_pause = pause_type & IONIC_PAUSE_F_TX ? 1 : 0; > + } > +} > + > +static int ionic_set_pauseparam(struct net_device *netdev, > + struct ethtool_pauseparam *pause) > +{ > + struct lif *lif = netdev_priv(netdev); > + struct ionic *ionic = lif->ionic; > + struct ionic_dev *idev = &lif->ionic->idev; > + u32 requested_pause; > + int err; > + > + if (pause->autoneg == AUTONEG_ENABLE) { > + netdev_info(netdev, "Please use 'ethtool -s ...' to change > autoneg\n"); > + return -EOPNOTSUPP; > + } > + > + /* change both at the same time */ > + requested_pause = PORT_PAUSE_TYPE_LINK; > + if (pause->rx_pause) > + requested_pause |= IONIC_PAUSE_F_RX; > + if (pause->tx_pause) > + requested_pause |= IONIC_PAUSE_F_TX;
Hi Shannon This not what i was expecting, and i'm guessing what you have here is not right. So you don't support the case of pause->autoneg == AUTONEG_ENABLE. That implies that setting pause values directly configures the MAC. The values from auto-neg are always ignored. Then why did you set PAUSE in the get ksettings function? If you always ignore the values from auto-neg, then your info message also makes no sense. What really does the firmware do? Andrew