linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sean Anderson <sean.anderson@seco.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: "David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Madalin Bucur <madalin.bucur@nxp.com>,
	netdev@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
	Eric Dumazet <edumazet@google.com>,
	linux-arm-kernel@lists.infradead.org,
	Russell King <linux@armlinux.org.uk>,
	linux-kernel@vger.kernel.org,
	Alexandru Marginean <alexandru.marginean@nxp.com>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Vladimir Oltean <olteanv@gmail.com>
Subject: Re: [PATCH net-next v3 10/47] net: phylink: Adjust link settings based on rate adaptation
Date: Mon, 18 Jul 2022 12:29:17 -0400	[thread overview]
Message-ID: <41d87b16-e0ea-5b29-6ecc-8e90f906d366@seco.com> (raw)
In-Reply-To: <YtNoW8bJdWPzX3Cq@lunn.ch>



On 7/16/22 9:39 PM, Andrew Lunn wrote:
>> > I would not do this. If the requirements for rate adaptation are not
>> > fulfilled, you should turn off rate adaptation.
>> > 
>> > A MAC which knows rate adaptation is going on can help out, by not
>> > advertising 10Half, 100Half etc. Autoneg will then fail for modes
>> > where rate adaptation does not work.
>> 
>> OK, so maybe it is better to phylink_warn here. Something along the
>> lines of "phy using pause-based rate adaptation, but duplex is %s".
> 
> You say 1/2 duplex simply does not work with rate adaptation.

It doesn't work with pause-based rate adaptation. This is because we can't
enable pause frames in half duplex (see phy_get_pause). I don't know if this
is a technical limitation (or something else), but presumably there exists a
MAC out there which can't enable pause frames unless it's in full-duplex mode.

> So i
> would actually return -EINVAL at the point the MAC indicates what
> modes it supports if there is a 1/2 duplex mode in the list.

Well, half duplex is still valid if we are at the full line rate. This is more
of a sanity check on what we get back from the phy. That is, we should never
get anything but full duplex if the phy indicates that pause-based rate
adaptation is being performed. So maybe this should live in phy_read_status?

And of course, CRS-based adaptation requires half-duplex (or a MAC which
respects CRS in full-duplex mode).

>> 
>> > The MAC should also be declaring what sort of pause it supports, so
>> > disable rate adaptation if it does not have async pause.
>> 
>> That's what we do in the previous patch.
>> 
>> The problem is that rx_pause and tx_pause are resolved based on our
>> advertisement and the link partner's advertisement. However, the link
>> partner may not support pause frames at all. In that case, we will get
>> rx_pause and tx_pause as false. However, we still want to enable rx_pause,
>> because we know that the phy will be emitting pause frames. And of course
>> the user can always force disable pause frames anyway through ethtool.
> 
> Right, so we need a table somewhere in the documentation listing the
> different combinations and what should happen.

OK, so first here's table 28B-3 (e.g. linkmode_resolve_pause):

Local device  Link partner  Local resolution Partner resolution
============= ============= ================ ==================
PAUSE ASM_DIR PAUSE ASM_DIR Transmit Receive Transmit   Receive
===== ======= ===== ======= ======== ======= ========   =======
    0       0     X       X        N       N        N         N
    0       1     0       X        N       N        N         N
    0       1     1       0        N       N        N         N
    0       1     1       1        Y       N        N         Y
    1       0     0       X        N       N        N         N
    1       X     1       X        Y       Y        Y         Y
    1       1     0       0        N       N        N         N
    1       1     0       1        N       Y        Y         N

And now here's the same table, but assuming that we have a local phy
performing rate adaptation

Local device  Link partner  Local resolution Partner resolution
============= ============= ================ ==================
PAUSE ASM_DIR PAUSE ASM_DIR Transmit Receive Transmit   Receive
===== ======= ===== ======= ======== ======= ========   =======
    0       0     X       X        N       N        N         N # Broken
    0       1     0       X        N       N        N         N # Broken
    0       1     1       0        N       N        N         N # Broken
    0       1     1       1        Y       N        N         Y # Broken
    1       0     0       X        ?       ?        N         N # Semi-broken
    1       X     1       X        Y       Y        Y         Y
    1       1     0       0        N       Y        N         N
    1       1     0       1        N       Y        Y         N

The rows marked as "Broken" don't have local receive pause enabled.
These should never occur, since we can detect that the local MAC doesn't
support pause reception and disable advertisement of pause-based
rate-adapted modes.

On the row marked as "Semi-broken", the local MAC supports only
symmetric pause, and the link partner doesn't support pause. We're not
supposed to send pause frames, so we disable pause, but this breaks rate
adaptation. In this case, we could renegotiate with rate-adapted modes
disabled. Alternatively, we could just decline to advertise rate-adapted
modes for symmetric-pause MACs. This avoids the semi-broken line above,
but also prevents the line below from using rate adaptation.

> If the MAC does not support rx_pause, rate adaptation is turned off.
>> If the negotiation results in no rx_pause, force it on anyway with
> Pause based adaptation. If ethtool turns pause off, turn off rate
> adaptation.
> 
> Does 802.3 say anything about this?

Only IPG-based and CRS-based rate adaptation are defined in 802.3.

> We might also want to add an additional state to the ethtool get for
> pause, to indicate rx_pause is enabled because of rate adaptation, not
> because of autoneg.

Probably a good idea.

--Sean

  parent reply	other threads:[~2022-07-18 16:30 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-15 21:59 [PATCH net-next v3 00/47] [RFT] net: dpaa: Convert to phylink Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 01/47] dt-bindings: phy: Add Lynx 10G phy binding Sean Anderson
2022-07-20 22:17   ` Rob Herring
2022-07-21 16:05     ` Sean Anderson
2022-07-21 18:29       ` Rob Herring
2022-07-21 23:35         ` Sean Anderson
2022-07-26 15:44           ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 02/47] dt-bindings: net: Expand pcs-handle to an array Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 03/47] dt-bindings: net: Convert FMan MAC bindings to yaml Sean Anderson
2022-07-15 23:06   ` Rob Herring
2022-07-16 22:47     ` Sean Anderson
2022-07-21 14:42       ` Krzysztof Kozlowski
2022-07-22 16:50         ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 04/47] dt-bindings: net: fman: Add additional interface properties Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 05/47] net: phy: Add 1000BASE-KX interface mode Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 06/47] [RFT] phy: fsl: Add Lynx 10G SerDes driver Sean Anderson
2022-07-16 22:39   ` kernel test robot
2022-07-15 21:59 ` [PATCH net-next v3 07/47] net: phy: Add support for rate adaptation Sean Anderson
2022-07-16 19:39   ` Andrew Lunn
2022-07-16 21:55     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 08/47] net: phylink: Support differing link speeds and interface speeds Sean Anderson
2022-07-16 20:06   ` Andrew Lunn
2022-07-16 22:29     ` Sean Anderson
2022-07-17  1:26       ` Andrew Lunn
2022-07-18 15:49         ` Sean Anderson
2022-07-18 16:06     ` Russell King (Oracle)
2022-07-18 16:38       ` Sean Anderson
2022-07-18 17:28         ` Andrew Lunn
2022-07-18 17:40           ` Sean Anderson
2022-07-18 18:01           ` Russell King (Oracle)
2022-07-15 21:59 ` [PATCH net-next v3 09/47] net: phylink: Adjust advertisement based on rate adaptation Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 10/47] net: phylink: Adjust link settings " Sean Anderson
2022-07-16 20:17   ` Andrew Lunn
2022-07-16 22:37     ` Sean Anderson
2022-07-17  1:39       ` Andrew Lunn
2022-07-18 16:22         ` Russell King (Oracle)
2022-07-18 16:29         ` Sean Anderson [this message]
2022-07-18 16:14       ` Russell King (Oracle)
2022-07-18 16:12   ` Russell King (Oracle)
2022-07-18 16:45     ` Sean Anderson
2022-07-18 17:58       ` Russell King (Oracle)
2022-07-15 21:59 ` [PATCH net-next v3 11/47] [RFC] net: phylink: Add support for CRS-based " Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 12/47] net: phy: aquantia: Add support for AQR115 Sean Anderson
2022-07-16 18:17   ` Andrew Lunn
2022-07-16 22:42     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 13/47] net: phy: aquantia: Add some additional phy interfaces Sean Anderson
2022-07-16 18:18   ` Andrew Lunn
2022-07-15 21:59 ` [PATCH net-next v3 14/47] net: phy: aquantia: Add support for rate adaptation Sean Anderson
2022-07-16 18:38   ` Andrew Lunn
2022-07-16 22:45     ` Sean Anderson
2022-07-17  1:42       ` Andrew Lunn
2022-07-15 21:59 ` [PATCH net-next v3 15/47] net: fman: Convert to SPDX identifiers Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 16/47] net: fman: Don't pass comm_mode to enable/disable Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 17/47] net: fman: Store en/disable in mac_device instead of mac_priv_s Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 18/47] net: fman: dtsec: Always gracefully stop/start Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 19/47] net: fman: Get PCS node in per-mac init Sean Anderson
2022-07-21 12:39   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 20/47] net: fman: Store initialization function in match data Sean Anderson
2022-07-21 12:51   ` Camelia Alexandra Groza
2022-07-21 15:34     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 21/47] net: fman: Move struct dev to mac_device Sean Anderson
2022-07-21 12:52   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 22/47] net: fman: Configure fixed link in memac_initialization Sean Anderson
2022-07-21 12:57   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 23/47] net: fman: Export/rename some common functions Sean Anderson
2022-07-21 12:58   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 24/47] net: fman: memac: Use params instead of priv for max_speed Sean Anderson
2022-07-21 12:58   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 25/47] net: fman: Move initialization to mac-specific files Sean Anderson
2022-07-21 12:59   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 26/47] net: fman: Mark mac methods static Sean Anderson
2022-07-21 12:59   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 27/47] net: fman: Inline several functions into initialization Sean Anderson
2022-07-21 13:01   ` Camelia Alexandra Groza
2022-07-21 15:33     ` Sean Anderson
2022-07-22 12:30       ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 28/47] net: fman: Remove internal_phy_node from params Sean Anderson
2022-07-21 13:03   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 29/47] net: fman: Map the base address once Sean Anderson
2022-07-21 13:04   ` Camelia Alexandra Groza
2022-07-21 15:34     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 30/47] net: fman: Pass params directly to mac init Sean Anderson
2022-07-21 13:05   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 31/47] net: fman: Use mac_dev for some params Sean Anderson
2022-07-21 13:05   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 32/47] net: fman: Specify type of mac_dev for exception_cb Sean Anderson
2022-07-21 13:06   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 33/47] net: fman: Clean up error handling Sean Anderson
2022-07-21 13:06   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 34/47] net: fman: Change return type of disable to void Sean Anderson
2022-07-21 13:08   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 35/47] net: dpaa: Use mac_dev variable in dpaa_netdev_init Sean Anderson
2022-07-21 13:15   ` Camelia Alexandra Groza
2022-07-21 15:36     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 36/47] soc: fsl: qbman: Add helper for sanity checking cgr ops Sean Anderson
2022-07-21 13:16   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 37/47] soc: fsl: qbman: Add CGR update function Sean Anderson
2022-07-21 13:18   ` Camelia Alexandra Groza
2022-07-21 15:36     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 38/47] net: dpaa: Adjust queue depth on rate change Sean Anderson
2022-07-21 13:18   ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 39/47] net: fman: memac: Add serdes support Sean Anderson
2022-07-21 13:30   ` Camelia Alexandra Groza
2022-07-21 15:38     ` Sean Anderson
2022-07-22 12:43       ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 40/47] net: fman: memac: Use lynx pcs driver Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 41/47] [RFT] net: dpaa: Convert to phylink Sean Anderson
2022-07-16 21:27   ` kernel test robot
2022-07-15 21:59 ` [PATCH net-next v3 42/47] powerpc: dts: qoriq: Add nodes for QSGMII PCSs Sean Anderson
2022-07-21 13:48   ` Camelia Alexandra Groza
2022-07-21 17:51     ` Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 43/47] arm64: dts: layerscape: " Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 44/47] arm64: dts: ls1046a: Add serdes bindings Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 45/47] arm64: dts: ls1088a: " Sean Anderson
2022-07-15 21:59 ` [PATCH net-next v3 46/47] arm64: dts: ls1046ardb: " Sean Anderson
2022-07-21 14:20   ` Camelia Alexandra Groza
2022-07-21 15:40     ` Sean Anderson
2022-07-22 12:41       ` Camelia Alexandra Groza
2022-07-25 20:02         ` Sean Anderson
2022-07-26 11:35           ` Camelia Alexandra Groza
2022-07-15 21:59 ` [PATCH net-next v3 47/47] [WIP] arm64: dts: ls1088ardb: " Sean Anderson
2022-07-21 14:26 ` [PATCH net-next v3 00/47] [RFT] net: dpaa: Convert to phylink Camelia Alexandra Groza
2022-07-21 15:39   ` Sean Anderson

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=41d87b16-e0ea-5b29-6ecc-8e90f906d366@seco.com \
    --to=sean.anderson@seco.com \
    --cc=alexandru.marginean@nxp.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=madalin.bucur@nxp.com \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).