Message ID | 1567701978-16056-1-git-send-email-stefanc@marvell.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | net: phylink: Fix flow control resolution | expand |
On Thu, Sep 05, 2019 at 07:46:18PM +0300, stefanc@marvell.com wrote: > From: Stefan Chulski <stefanc@marvell.com> > > Regarding to IEEE 802.3-2015 standard section 2 > 28B.3 Priority resolution - Table 28-3 - Pause resolution > > In case of Local device Pause=1 AsymDir=0, Link partner > Pause=1 AsymDir=1, Local device resolution should be enable PAUSE > transmit, disable PAUSE receive. > And in case of Local device Pause=1 AsymDir=1, Link partner > Pause=1 AsymDir=0, Local device resolution should be enable PAUSE > receive, disable PAUSE transmit. > > Signed-off-by: Stefan Chulski <stefanc@marvell.com> > Reported-by: Shaul Ben-Mayor <shaulb@marvell.com> Good catch, thanks for the patch. Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Fixes: 9525ae83959b ("phylink: add phylink infrastructure") > --- > drivers/net/phy/phylink.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index a45c5de..a5a57ca 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -376,8 +376,8 @@ static void phylink_get_fixed_state(struct phylink *pl, struct phylink_link_stat > * Local device Link partner > * Pause AsymDir Pause AsymDir Result > * 1 X 1 X TX+RX > - * 0 1 1 1 RX > - * 1 1 0 1 TX > + * 0 1 1 1 TX > + * 1 1 0 1 RX > */ > static void phylink_resolve_flow(struct phylink *pl, > struct phylink_link_state *state) > @@ -398,7 +398,7 @@ static void phylink_resolve_flow(struct phylink *pl, > new_pause = MLO_PAUSE_TX | MLO_PAUSE_RX; > else if (pause & MLO_PAUSE_ASYM) > new_pause = state->pause & MLO_PAUSE_SYM ? > - MLO_PAUSE_RX : MLO_PAUSE_TX; > + MLO_PAUSE_TX : MLO_PAUSE_RX; > } else { > new_pause = pl->link_config.pause & MLO_PAUSE_TXRX_MASK; > } > -- > 1.9.1 > >
From: <stefanc@marvell.com> Date: Thu, 5 Sep 2019 19:46:18 +0300 > From: Stefan Chulski <stefanc@marvell.com> > > Regarding to IEEE 802.3-2015 standard section 2 > 28B.3 Priority resolution - Table 28-3 - Pause resolution > > In case of Local device Pause=1 AsymDir=0, Link partner > Pause=1 AsymDir=1, Local device resolution should be enable PAUSE > transmit, disable PAUSE receive. > And in case of Local device Pause=1 AsymDir=1, Link partner > Pause=1 AsymDir=0, Local device resolution should be enable PAUSE > receive, disable PAUSE transmit. > > Signed-off-by: Stefan Chulski <stefanc@marvell.com> > Reported-by: Shaul Ben-Mayor <shaulb@marvell.com> Applied and queued up for -stable, thanks.
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index a45c5de..a5a57ca 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -376,8 +376,8 @@ static void phylink_get_fixed_state(struct phylink *pl, struct phylink_link_stat * Local device Link partner * Pause AsymDir Pause AsymDir Result * 1 X 1 X TX+RX - * 0 1 1 1 RX - * 1 1 0 1 TX + * 0 1 1 1 TX + * 1 1 0 1 RX */ static void phylink_resolve_flow(struct phylink *pl, struct phylink_link_state *state) @@ -398,7 +398,7 @@ static void phylink_resolve_flow(struct phylink *pl, new_pause = MLO_PAUSE_TX | MLO_PAUSE_RX; else if (pause & MLO_PAUSE_ASYM) new_pause = state->pause & MLO_PAUSE_SYM ? - MLO_PAUSE_RX : MLO_PAUSE_TX; + MLO_PAUSE_TX : MLO_PAUSE_RX; } else { new_pause = pl->link_config.pause & MLO_PAUSE_TXRX_MASK; }