From: Andrew Lunn <andrew@lunn.ch>
To: Shannon Nelson <snelson@pensando.io>
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH v3 net-next 13/19] ionic: Add initial ethtool support
Date: Fri, 19 Jul 2019 21:07:15 +0200 [thread overview]
Message-ID: <20190719190715.GO25635@lunn.ch> (raw)
In-Reply-To: <15796ade-68dd-4350-e481-3a3a1e7ce3d5@pensando.io>
On Fri, Jul 19, 2019 at 11:41:28AM -0700, Shannon Nelson wrote:
> On 7/18/19 7:40 PM, Andrew Lunn wrote:
> >On Thu, Jul 18, 2019 at 05:12:07PM -0700, Shannon Nelson wrote:
> >>On 7/17/19 8:28 PM, Andrew Lunn wrote:
> >>>On Fri, Jul 12, 2019 at 10:16:31PM -0700, Shannon Nelson wrote:
> >>>>On 7/8/19 7:14 PM, Andrew Lunn wrote:
> >>>>>>+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;
> >>>>>>+ u32 cur_autoneg;
> >>>>>>+ int err;
> >>>>>>+
> >>>>>>+ cur_autoneg = idev->port_info->config.an_enable ? AUTONEG_ENABLE :
> >>>>>>+ AUTONEG_DISABLE;
> >>>>>>+ if (pause->autoneg != cur_autoneg) {
> >>>>>>+ 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;
> >>>>>>+
> >>>>>>+ if (requested_pause == idev->port_info->config.pause_type)
> >>>>>>+ return 0;
> >>>>>>+
> >>>>>>+ idev->port_info->config.pause_type = requested_pause;
> >>>>>>+
> >>>>>>+ mutex_lock(&ionic->dev_cmd_lock);
> >>>>>>+ ionic_dev_cmd_port_pause(idev, requested_pause);
> >>>>>>+ err = ionic_dev_cmd_wait(ionic, devcmd_timeout);
> >>>>>>+ mutex_unlock(&ionic->dev_cmd_lock);
> >>>>>>+ if (err)
> >>>>>>+ return err;
> >>>>>Hi Shannon
> >>>>>
> >>>>>I've no idea what the firmware black box is doing, but this looks
> >>>>>wrong.
> >>>>>
> >>>>>pause->autoneg is about if the results of auto-neg should be used or
> >>>>>not. If false, just configure the MAC with the pause settings and you
> >>>>>are done. If the interface is being forced, so autoneg in general is
> >>>>>disabled, just configure the MAC and you are done.
> >>>>>
> >>>>>If pause->autoneg is true and the interface is using auto-neg as a
> >>>>>whole, you pass the pause values to the PHY for it to advertise and
> >>>>>trigger an auto-neg. Once autoneg has completed, and the resolved
> >>>>>settings are available, the MAC is configured with the resolved
> >>>>>values.
> >>>>>
> >>>>>Looking at this code, i don't see any difference between configuring
> >>>>>the MAC or configuring the PHY. I would expect pause->autoneg to be
> >>>>>part of requested_pause somehow, so the firmware knows what is should
> >>>>>do.
> >>>>>
> >>>>> Andrew
> >>>>In this device there's actually very little the driver can do to directly
> >>>>configure the mac or phy besides passing through to the firmware what the
> >>>>user has requested - that happens here for the pause values, and in
> >>>>ionic_set_link_ksettings() for autoneg. The firmware is managing the port
> >>>>based on these requests with the help of internally configured rules defined
> >>>>in a customer setting.
> >>>I get that. But the firmware needs to conform to what Linux
> >>>expects. And what i see here does not conform. That is why i gave a
> >>>bit of detail in my reply.
> >>>
> >>>What exactly does the firmware do? Once we know that, we can figure
> >>>out when the driver should return -EOPNOTSUPP because of firmware
> >>>limitations, and what it can configure and should return 0.
> >>Because this is fairly smart FW, it handles this as expected. I can add
> >>this as another comment in the code.
> >Hi Shannon
> >
> >Looking at the code, i don't see how it can handle this
> >correctly. Please look at my comments, particularly the meaning of
> >pause->autoneg and describe how the firmware does the right thing,
> >given what information it is passed.
> >
>
> I guess I'm not sure how much better I can answer your question. Like
> several other devices, we don't support selecting pause->autoneg. The
> firmware manages the PHY itself, the driver doesn't have direct access to
> the PHY. The driver passes the tx and rx pause info down to the firmware in
> a command request. The NIC firmware does an autoneg if autoneg is enabled
> on the port.
Hi Shannon
Thanks. That was the information i was looking for.
Please return -EOPNOTSUPP if pause->autoneg indicates autoneg results
should not be used. Your firmware does not support it, so the driver
should error out. Also the get function should use a hard coded value
for pause->autoneg.
If you ever fix your firmware, you can add full support for pause
configuration.
Thanks
Andrew
next prev parent reply other threads:[~2019-07-19 19:07 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-08 19:25 [PATCH v3 net-next 00/19] Add ionic driver Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 01/19] ionic: Add basic framework for IONIC Network device driver Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 02/19] ionic: Add hardware init and device commands Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 03/19] ionic: Add port management commands Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 04/19] ionic: Add basic lif support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 05/19] ionic: Add interrupts and doorbells Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 06/19] ionic: Add basic adminq support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 07/19] ionic: Add adminq action Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 08/19] ionic: Add notifyq support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 09/19] ionic: Add the basic NDO callbacks for netdev support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 10/19] ionic: Add management of rx filters Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 11/19] ionic: Add Rx filter and rx_mode ndo support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 12/19] ionic: Add async link status check and basic stats Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 13/19] ionic: Add initial ethtool support Shannon Nelson
2019-07-08 22:04 ` Andrew Lunn
2019-07-09 5:15 ` Michal Kubecek
2019-07-09 22:35 ` Shannon Nelson
2019-07-11 19:10 ` Shannon Nelson
2019-07-09 2:14 ` Andrew Lunn
2019-07-13 5:16 ` Shannon Nelson
2019-07-18 3:28 ` Andrew Lunn
2019-07-19 0:12 ` Shannon Nelson
2019-07-19 2:40 ` Andrew Lunn
2019-07-19 18:41 ` Shannon Nelson
2019-07-19 19:07 ` Andrew Lunn [this message]
2019-07-19 20:20 ` Shannon Nelson
2019-07-09 2:27 ` Andrew Lunn
2019-07-09 22:42 ` Shannon Nelson
2019-07-18 3:21 ` Andrew Lunn
2019-07-18 17:05 ` Shannon Nelson
2019-07-18 17:28 ` Andrew Lunn
2019-07-18 17:54 ` Shannon Nelson
2019-07-09 2:30 ` Andrew Lunn
2019-07-13 5:32 ` Shannon Nelson
2019-07-18 3:31 ` Andrew Lunn
2019-07-18 17:14 ` Shannon Nelson
2019-07-09 5:25 ` Michal Kubecek
2019-07-09 22:34 ` Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 14/19] ionic: Add Tx and Rx handling Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 15/19] ionic: Add netdev-event handling Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 16/19] ionic: Add driver stats Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 17/19] ionic: Add RSS support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 18/19] ionic: Add coalesce and other features Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 19/19] ionic: Add basic devlink interface Shannon Nelson
2019-07-08 19:34 ` Jiri Pirko
2019-07-08 19:58 ` Shannon Nelson
2019-07-08 20:03 ` Jiri Pirko
2019-07-08 22:58 ` Shannon Nelson
2019-07-09 6:56 ` Jiri Pirko
2019-07-09 19:13 ` Shannon Nelson
2019-07-10 6:48 ` Jiri Pirko
2019-07-10 17:06 ` Shannon Nelson
2019-07-09 1:26 ` Jakub Kicinski
2019-07-09 19:06 ` Shannon Nelson
2019-07-09 2:58 ` [PATCH v3 net-next 00/19] Add ionic driver David Miller
2019-07-09 3:01 ` Shannon Nelson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190719190715.GO25635@lunn.ch \
--to=andrew@lunn.ch \
--cc=netdev@vger.kernel.org \
--cc=snelson@pensando.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.