From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Vladimir Oltean <olteanv@gmail.com>
Cc: Taras Chornyi <taras.chornyi@plvision.eu>,
Andrew Lunn <andrew@lunn.ch>,
Marcin Wojtas <marcin.s.wojtas@gmail.com>,
Madalin Bucur <madalin.bucur@nxp.com>,
Alexander Duyck <alexanderduyck@fb.com>,
Daniel Golle <daniel@makrotopia.org>,
Eric Dumazet <edumazet@google.com>,
Ioana Ciornei <ioana.ciornei@nxp.com>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Sean Anderson <sean.anderson@seco.com>,
Steen Hegelund <Steen.Hegelund@microchip.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Sean Wang <sean.wang@mediatek.com>,
Daniel Machon <daniel.machon@microchip.com>,
kernel-team@meta.com, DENG Qingfang <dqfext@gmail.com>,
linux-mediatek@lists.infradead.org,
Matthias Brugger <matthias.bgg@gmail.com>,
Michal Simek <michal.simek@amd.com>,
linux-arm-kernel@lists.infradead.org,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
"Chester A. Unal" <chester.a.unal@arinc9.com>,
netdev@vger.kernel.org, Claudiu Beznea <claudiu.beznea@tuxon.dev>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew+netdev@lunn.ch>,
Eric Woudstra <ericwouds@gmail.com>,
Alexander Couzens <lynxis@fe80.eu>,
"David S. Miller" <davem@davemloft.net>,
Heiner Kallweit <hkallweit1@gmail.com>
Subject: Re: [PATCH net-next v2 5/5] net: phylink: provide fixed state for 1000base-X and 2500base-X
Date: Tue, 14 Jan 2025 13:31:22 +0000 [thread overview]
Message-ID: <Z4ZnKpQgxZCbV5Yk@shell.armlinux.org.uk> (raw)
In-Reply-To: <20250114125739.sgegfxibbzpc2uor@skbuf>
On Tue, Jan 14, 2025 at 02:57:39PM +0200, Vladimir Oltean wrote:
> On Mon, Jan 13, 2025 at 09:22:44AM +0000, Russell King (Oracle) wrote:
> > When decoding clause 22 state, if in-band is disabled and using either
> > 1000base-X or 2500base-X, rather than reporting link-down, we know the
> > speed, and we only support full duplex. Pause modes taken from XPCS.
> >
> > This fixes a problem reported by Eric Woudstra.
> >
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> > ---
> > drivers/net/phy/phylink.c | 29 +++++++++++++++++++----------
> > 1 file changed, 19 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> > index b79f975bc164..ff0efb52189f 100644
> > --- a/drivers/net/phy/phylink.c
> > +++ b/drivers/net/phy/phylink.c
> > @@ -3882,27 +3882,36 @@ void phylink_mii_c22_pcs_decode_state(struct phylink_link_state *state,
> > if (!state->link)
> > return;
> >
> > - /* If in-band is disabled, then the advertisement data is not
> > - * meaningful.
> > - */
> > - if (neg_mode != PHYLINK_PCS_NEG_INBAND_ENABLED)
> > - return;
> > -
> > switch (state->interface) {
> > case PHY_INTERFACE_MODE_1000BASEX:
> > - phylink_decode_c37_word(state, lpa, SPEED_1000);
> > + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
> > + phylink_decode_c37_word(state, lpa, SPEED_1000);
> > + } else {
> > + state->speed = SPEED_1000;
> > + state->duplex = DUPLEX_FULL;
> > + state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
> > + }
> > break;
> >
> > case PHY_INTERFACE_MODE_2500BASEX:
> > - phylink_decode_c37_word(state, lpa, SPEED_2500);
> > + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
> > + phylink_decode_c37_word(state, lpa, SPEED_2500);
> > + } else {
> > + state->speed = SPEED_2500;
> > + state->duplex = DUPLEX_FULL;
> > + state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
> > + }
> > break;
>
> Are the "else" branches necessary, given the "else" branch from
> phylink_mac_pcs_get_state?
>
> static void phylink_mac_pcs_get_state(struct phylink *pl,
> struct phylink_link_state *state)
> {
> struct phylink_pcs *pcs;
> bool autoneg;
>
> linkmode_copy(state->advertising, pl->link_config.advertising);
> linkmode_zero(state->lp_advertising);
> state->interface = pl->link_config.interface;
> state->rate_matching = pl->link_config.rate_matching;
> state->an_complete = 0;
> state->link = 1;
>
> pcs = pl->pcs;
> if (!pcs || pcs->neg_mode)
> autoneg = pl->pcs_neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED;
> else
> autoneg = linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
> state->advertising);
>
> if (autoneg) {
> state->speed = SPEED_UNKNOWN;
> state->duplex = DUPLEX_UNKNOWN;
> state->pause = MLO_PAUSE_NONE;
> } else { |
> state->speed = pl->link_config.speed; |
> state->duplex = pl->link_config.duplex; | this
> state->pause = pl->link_config.pause; |
> } |
This is fine for cases where ethtool is used to turn autoneg off, but
not if we're in in-band mode and the PCS/PHY have decided to have
autoneg off - in that case, nothing sets pl->link_config.* to anything
sensible.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
WARNING: multiple messages have this Message-ID (diff)
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Vladimir Oltean <olteanv@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Alexander Couzens <lynxis@fe80.eu>,
Alexander Duyck <alexanderduyck@fb.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
"Chester A. Unal" <chester.a.unal@arinc9.com>,
Claudiu Beznea <claudiu.beznea@tuxon.dev>,
Daniel Golle <daniel@makrotopia.org>,
Daniel Machon <daniel.machon@microchip.com>,
"David S. Miller" <davem@davemloft.net>,
DENG Qingfang <dqfext@gmail.com>,
Eric Dumazet <edumazet@google.com>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
Ioana Ciornei <ioana.ciornei@nxp.com>,
Jakub Kicinski <kuba@kernel.org>,
kernel-team@meta.com, linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
Madalin Bucur <madalin.bucur@nxp.com>,
Marcin Wojtas <marcin.s.wojtas@gmail.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
Michal Simek <michal.simek@amd.com>,
netdev@vger.kernel.org,
Nicolas Ferre <nicolas.ferre@microchip.com>,
Paolo Abeni <pabeni@redhat.com>,
Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>,
Sean Anderson <sean.anderson@seco.com>,
Sean Wang <sean.wang@mediatek.com>,
Steen Hegelund <Steen.Hegelund@microchip.com>,
Taras Chornyi <taras.chornyi@plvision.eu>,
UNGLinuxDriver@microchip.com, Eric Woudstra <ericwouds@gmail.com>
Subject: Re: [PATCH net-next v2 5/5] net: phylink: provide fixed state for 1000base-X and 2500base-X
Date: Tue, 14 Jan 2025 13:31:22 +0000 [thread overview]
Message-ID: <Z4ZnKpQgxZCbV5Yk@shell.armlinux.org.uk> (raw)
In-Reply-To: <20250114125739.sgegfxibbzpc2uor@skbuf>
On Tue, Jan 14, 2025 at 02:57:39PM +0200, Vladimir Oltean wrote:
> On Mon, Jan 13, 2025 at 09:22:44AM +0000, Russell King (Oracle) wrote:
> > When decoding clause 22 state, if in-band is disabled and using either
> > 1000base-X or 2500base-X, rather than reporting link-down, we know the
> > speed, and we only support full duplex. Pause modes taken from XPCS.
> >
> > This fixes a problem reported by Eric Woudstra.
> >
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> > ---
> > drivers/net/phy/phylink.c | 29 +++++++++++++++++++----------
> > 1 file changed, 19 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> > index b79f975bc164..ff0efb52189f 100644
> > --- a/drivers/net/phy/phylink.c
> > +++ b/drivers/net/phy/phylink.c
> > @@ -3882,27 +3882,36 @@ void phylink_mii_c22_pcs_decode_state(struct phylink_link_state *state,
> > if (!state->link)
> > return;
> >
> > - /* If in-band is disabled, then the advertisement data is not
> > - * meaningful.
> > - */
> > - if (neg_mode != PHYLINK_PCS_NEG_INBAND_ENABLED)
> > - return;
> > -
> > switch (state->interface) {
> > case PHY_INTERFACE_MODE_1000BASEX:
> > - phylink_decode_c37_word(state, lpa, SPEED_1000);
> > + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
> > + phylink_decode_c37_word(state, lpa, SPEED_1000);
> > + } else {
> > + state->speed = SPEED_1000;
> > + state->duplex = DUPLEX_FULL;
> > + state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
> > + }
> > break;
> >
> > case PHY_INTERFACE_MODE_2500BASEX:
> > - phylink_decode_c37_word(state, lpa, SPEED_2500);
> > + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
> > + phylink_decode_c37_word(state, lpa, SPEED_2500);
> > + } else {
> > + state->speed = SPEED_2500;
> > + state->duplex = DUPLEX_FULL;
> > + state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
> > + }
> > break;
>
> Are the "else" branches necessary, given the "else" branch from
> phylink_mac_pcs_get_state?
>
> static void phylink_mac_pcs_get_state(struct phylink *pl,
> struct phylink_link_state *state)
> {
> struct phylink_pcs *pcs;
> bool autoneg;
>
> linkmode_copy(state->advertising, pl->link_config.advertising);
> linkmode_zero(state->lp_advertising);
> state->interface = pl->link_config.interface;
> state->rate_matching = pl->link_config.rate_matching;
> state->an_complete = 0;
> state->link = 1;
>
> pcs = pl->pcs;
> if (!pcs || pcs->neg_mode)
> autoneg = pl->pcs_neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED;
> else
> autoneg = linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
> state->advertising);
>
> if (autoneg) {
> state->speed = SPEED_UNKNOWN;
> state->duplex = DUPLEX_UNKNOWN;
> state->pause = MLO_PAUSE_NONE;
> } else { |
> state->speed = pl->link_config.speed; |
> state->duplex = pl->link_config.duplex; | this
> state->pause = pl->link_config.pause; |
> } |
This is fine for cases where ethtool is used to turn autoneg off, but
not if we're in in-band mode and the PCS/PHY have decided to have
autoneg off - in that case, nothing sets pl->link_config.* to anything
sensible.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2025-01-14 13:34 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-13 9:22 [PATCH net-next v2 0/5] net: phylink: fix PCS without autoneg Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-13 9:22 ` [PATCH net-next v2 1/5] net: phylink: use pcs_neg_mode in phylink_mac_pcs_get_state() Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-13 9:22 ` [PATCH net-next v2 2/5] net: phylink: pass neg_mode into .pcs_get_state() method Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-13 9:22 ` [PATCH net-next v2 3/5] net: phylink: pass neg_mode into c22 state decoder Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-13 9:22 ` [PATCH net-next v2 4/5] net: phylink: use neg_mode in phylink_mii_c22_pcs_decode_state() Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-13 9:22 ` [PATCH net-next v2 5/5] net: phylink: provide fixed state for 1000base-X and 2500base-X Russell King (Oracle)
2025-01-13 9:22 ` Russell King (Oracle)
2025-01-14 12:57 ` Vladimir Oltean
2025-01-14 12:57 ` Vladimir Oltean
2025-01-14 13:31 ` Russell King (Oracle) [this message]
2025-01-14 13:31 ` Russell King (Oracle)
2025-01-13 16:22 ` [PATCH net-next v2 0/5] net: phylink: fix PCS without autoneg Maxime Chevallier
2025-01-13 16:22 ` Maxime Chevallier
2025-01-15 21:30 ` patchwork-bot+netdevbpf
2025-01-15 21:30 ` patchwork-bot+netdevbpf
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=Z4ZnKpQgxZCbV5Yk@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=Steen.Hegelund@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=alexanderduyck@fb.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=angelogioacchino.delregno@collabora.com \
--cc=chester.a.unal@arinc9.com \
--cc=claudiu.beznea@tuxon.dev \
--cc=daniel.machon@microchip.com \
--cc=daniel@makrotopia.org \
--cc=davem@davemloft.net \
--cc=dqfext@gmail.com \
--cc=edumazet@google.com \
--cc=ericwouds@gmail.com \
--cc=florian.fainelli@broadcom.com \
--cc=hkallweit1@gmail.com \
--cc=horatiu.vultur@microchip.com \
--cc=ioana.ciornei@nxp.com \
--cc=kernel-team@meta.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=lynxis@fe80.eu \
--cc=madalin.bucur@nxp.com \
--cc=marcin.s.wojtas@gmail.com \
--cc=matthias.bgg@gmail.com \
--cc=michal.simek@amd.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=radhey.shyam.pandey@amd.com \
--cc=sean.anderson@seco.com \
--cc=sean.wang@mediatek.com \
--cc=taras.chornyi@plvision.eu \
/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.