Message ID | 20190727094011.14024-1-opensource@vdorst.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] net: phylink: Fix flow control for fixed-link | expand |
On Sat, Jul 27, 2019 at 11:40:11AM +0200, René van Dorst wrote: > In phylink_parse_fixedlink() the pl->link_config.advertising bits are AND > with pl->supported, pl->supported is zeroed and only the speed/duplex > modes and MII bits are set. > So pl->link_config.advertising always loses the flow control/pause bits. > > By setting Pause and Asym_Pause bits in pl->supported, the flow control > work again when devicetree "pause" is set in fixes-link node and the MAC > advertise that is supports pause. > > Results with this patch. > > Legend: > - DT = 'Pause' is set in the fixed-link in devicetree. > - validate() = ‘Yes’ means phylink_set(mask, Pause) is set in the > validate(). > - flow = results reported my link is Up line. > > +-----+------------+-------+ > | DT | validate() | flow | > +-----+------------+-------+ > | Yes | Yes | rx/tx | > | No | Yes | off | > | Yes | No | off | > +-----+------------+-------+ > > Fixes: 9525ae83959b ("phylink: add phylink infrastructure") > Signed-off-by: René van Dorst <opensource@vdorst.com> Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Thanks. > --- > drivers/net/phy/phylink.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index 5d0af041b8f9..a6aebaa14338 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -216,6 +216,8 @@ static int phylink_parse_fixedlink(struct phylink *pl, > pl->supported, true); > linkmode_zero(pl->supported); > phylink_set(pl->supported, MII); > + phylink_set(pl->supported, Pause); > + phylink_set(pl->supported, Asym_Pause); > if (s) { > __set_bit(s->bit, pl->supported); > } else { > -- > 2.20.1 > >
From: René van Dorst <opensource@vdorst.com> Date: Sat, 27 Jul 2019 11:40:11 +0200 > In phylink_parse_fixedlink() the pl->link_config.advertising bits are AND > with pl->supported, pl->supported is zeroed and only the speed/duplex > modes and MII bits are set. > So pl->link_config.advertising always loses the flow control/pause bits. > > By setting Pause and Asym_Pause bits in pl->supported, the flow control > work again when devicetree "pause" is set in fixes-link node and the MAC > advertise that is supports pause. > > Results with this patch. > > Legend: > - DT = 'Pause' is set in the fixed-link in devicetree. > - validate() = ‘Yes’ means phylink_set(mask, Pause) is set in the > validate(). > - flow = results reported my link is Up line. > > +-----+------------+-------+ > | DT | validate() | flow | > +-----+------------+-------+ > | Yes | Yes | rx/tx | > | No | Yes | off | > | Yes | No | off | > +-----+------------+-------+ > > Fixes: 9525ae83959b ("phylink: add phylink infrastructure") > Signed-off-by: René van Dorst <opensource@vdorst.com> Applied and queued up for -stable, thanks.
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 5d0af041b8f9..a6aebaa14338 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -216,6 +216,8 @@ static int phylink_parse_fixedlink(struct phylink *pl, pl->supported, true); linkmode_zero(pl->supported); phylink_set(pl->supported, MII); + phylink_set(pl->supported, Pause); + phylink_set(pl->supported, Asym_Pause); if (s) { __set_bit(s->bit, pl->supported); } else {
In phylink_parse_fixedlink() the pl->link_config.advertising bits are AND with pl->supported, pl->supported is zeroed and only the speed/duplex modes and MII bits are set. So pl->link_config.advertising always loses the flow control/pause bits. By setting Pause and Asym_Pause bits in pl->supported, the flow control work again when devicetree "pause" is set in fixes-link node and the MAC advertise that is supports pause. Results with this patch. Legend: - DT = 'Pause' is set in the fixed-link in devicetree. - validate() = ‘Yes’ means phylink_set(mask, Pause) is set in the validate(). - flow = results reported my link is Up line. +-----+------------+-------+ | DT | validate() | flow | +-----+------------+-------+ | Yes | Yes | rx/tx | | No | Yes | off | | Yes | No | off | +-----+------------+-------+ Fixes: 9525ae83959b ("phylink: add phylink infrastructure") Signed-off-by: René van Dorst <opensource@vdorst.com> --- drivers/net/phy/phylink.c | 2 ++ 1 file changed, 2 insertions(+)