Message ID | E1j3k7t-00072J-RS@rmk-PC.armlinux.org.uk |
---|---|
State | RFC |
Delegated to: | David Miller |
Headers | show |
Series | rework phylink interface for split MAC/PCS support | expand |
Hi Andre, Are you able to give this (along with patch 1) some testing please? The series can be grabbed from: https://patchwork.ozlabs.org/series/159037/mbox/ Strangely, google doesn't find it in the lore.kernel.org archives, but does in spinics.net archives and patchwork... On Mon, Feb 17, 2020 at 05:24:09PM +0000, Russell King wrote: > Convert the Xilinx AXI ethernet driver to use the finalised link > parameters in mac_link_up() rather than the parameters in mac_config(). > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > --- > .../net/ethernet/xilinx/xilinx_axienet_main.c | 38 +++++++++---------- > 1 file changed, 19 insertions(+), 19 deletions(-) > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > index 197740781157..c2f4c5ca2e80 100644 > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > @@ -1440,6 +1440,22 @@ static void axienet_mac_an_restart(struct phylink_config *config) > > static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > const struct phylink_link_state *state) > +{ > + /* nothing meaningful to do */ > +} > + > +static void axienet_mac_link_down(struct phylink_config *config, > + unsigned int mode, > + phy_interface_t interface) > +{ > + /* nothing meaningful to do */ > +} > + > +static void axienet_mac_link_up(struct phylink_config *config, > + struct phy_device *phy, > + unsigned int mode, phy_interface_t interface, > + int speed, int duplex, > + bool tx_pause, bool rx_pause) > { > struct net_device *ndev = to_net_dev(config->dev); > struct axienet_local *lp = netdev_priv(ndev); > @@ -1448,7 +1464,7 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); > emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; > > - switch (state->speed) { > + switch (speed) { > case SPEED_1000: > emmc_reg |= XAE_EMMC_LINKSPD_1000; > break; > @@ -1467,33 +1483,17 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); > > fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET); > - if (state->pause & MLO_PAUSE_TX) > + if (tx_pause) > fcc_reg |= XAE_FCC_FCTX_MASK; > else > fcc_reg &= ~XAE_FCC_FCTX_MASK; > - if (state->pause & MLO_PAUSE_RX) > + if (rx_pause) > fcc_reg |= XAE_FCC_FCRX_MASK; > else > fcc_reg &= ~XAE_FCC_FCRX_MASK; > axienet_iow(lp, XAE_FCC_OFFSET, fcc_reg); > } > > -static void axienet_mac_link_down(struct phylink_config *config, > - unsigned int mode, > - phy_interface_t interface) > -{ > - /* nothing meaningful to do */ > -} > - > -static void axienet_mac_link_up(struct phylink_config *config, > - struct phy_device *phy, > - unsigned int mode, phy_interface_t interface, > - int speed, int duplex, > - bool tx_pause, bool rx_pause) > -{ > - /* nothing meaningful to do */ > -} > - > static const struct phylink_mac_ops axienet_phylink_ops = { > .validate = axienet_validate, > .mac_pcs_get_state = axienet_mac_pcs_get_state, > -- > 2.20.1 > >
On Mon, 17 Feb 2020 17:24:09 +0000 Russell King <rmk+kernel@armlinux.org.uk> wrote: Hi Russell, > Convert the Xilinx AXI ethernet driver to use the finalised link > parameters in mac_link_up() rather than the parameters in mac_config(). Many thanks for this series, a quite neat solution for the problems I saw! I picked 1/8 and 4/8 on top of net-next/master as of today: c3e042f54107376 ("igmp: remove unused macro IGMP_Vx_UNSOLICITED_REPORT_INTERVAL") and it worked great on my FPGA board using SGMII (but no in-band negotiation over that link). I had the 64-bit DMA patches on top, but that doesn't affect this series. Tested-by: Andre Przywara <andre.przywara@arm.com> Is this heading for 5.7? Cheers, Andre. > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > --- > .../net/ethernet/xilinx/xilinx_axienet_main.c | 38 +++++++++---------- > 1 file changed, 19 insertions(+), 19 deletions(-) > > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > index 197740781157..c2f4c5ca2e80 100644 > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c > @@ -1440,6 +1440,22 @@ static void axienet_mac_an_restart(struct phylink_config *config) > > static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > const struct phylink_link_state *state) > +{ > + /* nothing meaningful to do */ > +} > + > +static void axienet_mac_link_down(struct phylink_config *config, > + unsigned int mode, > + phy_interface_t interface) > +{ > + /* nothing meaningful to do */ > +} > + > +static void axienet_mac_link_up(struct phylink_config *config, > + struct phy_device *phy, > + unsigned int mode, phy_interface_t interface, > + int speed, int duplex, > + bool tx_pause, bool rx_pause) > { > struct net_device *ndev = to_net_dev(config->dev); > struct axienet_local *lp = netdev_priv(ndev); > @@ -1448,7 +1464,7 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); > emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; > > - switch (state->speed) { > + switch (speed) { > case SPEED_1000: > emmc_reg |= XAE_EMMC_LINKSPD_1000; > break; > @@ -1467,33 +1483,17 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, > axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); > > fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET); > - if (state->pause & MLO_PAUSE_TX) > + if (tx_pause) > fcc_reg |= XAE_FCC_FCTX_MASK; > else > fcc_reg &= ~XAE_FCC_FCTX_MASK; > - if (state->pause & MLO_PAUSE_RX) > + if (rx_pause) > fcc_reg |= XAE_FCC_FCRX_MASK; > else > fcc_reg &= ~XAE_FCC_FCRX_MASK; > axienet_iow(lp, XAE_FCC_OFFSET, fcc_reg); > } > > -static void axienet_mac_link_down(struct phylink_config *config, > - unsigned int mode, > - phy_interface_t interface) > -{ > - /* nothing meaningful to do */ > -} > - > -static void axienet_mac_link_up(struct phylink_config *config, > - struct phy_device *phy, > - unsigned int mode, phy_interface_t interface, > - int speed, int duplex, > - bool tx_pause, bool rx_pause) > -{ > - /* nothing meaningful to do */ > -} > - > static const struct phylink_mac_ops axienet_phylink_ops = { > .validate = axienet_validate, > .mac_pcs_get_state = axienet_mac_pcs_get_state,
On Mon, Feb 24, 2020 at 12:24:21PM +0000, Andre Przywara wrote: > On Mon, 17 Feb 2020 17:24:09 +0000 > Russell King <rmk+kernel@armlinux.org.uk> wrote: > > Hi Russell, > > > Convert the Xilinx AXI ethernet driver to use the finalised link > > parameters in mac_link_up() rather than the parameters in mac_config(). > > Many thanks for this series, a quite neat solution for the problems I saw! > > I picked 1/8 and 4/8 on top of net-next/master as of today: c3e042f54107376 ("igmp: remove unused macro IGMP_Vx_UNSOLICITED_REPORT_INTERVAL") and it worked great on my FPGA board using SGMII (but no in-band negotiation over that link). I had the 64-bit DMA patches on top, but that doesn't affect this series. > > Tested-by: Andre Przywara <andre.przywara@arm.com> Great, thanks for testing! > Is this heading for 5.7? Yes, that is my hope.
diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 197740781157..c2f4c5ca2e80 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -1440,6 +1440,22 @@ static void axienet_mac_an_restart(struct phylink_config *config) static void axienet_mac_config(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state) +{ + /* nothing meaningful to do */ +} + +static void axienet_mac_link_down(struct phylink_config *config, + unsigned int mode, + phy_interface_t interface) +{ + /* nothing meaningful to do */ +} + +static void axienet_mac_link_up(struct phylink_config *config, + struct phy_device *phy, + unsigned int mode, phy_interface_t interface, + int speed, int duplex, + bool tx_pause, bool rx_pause) { struct net_device *ndev = to_net_dev(config->dev); struct axienet_local *lp = netdev_priv(ndev); @@ -1448,7 +1464,7 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; - switch (state->speed) { + switch (speed) { case SPEED_1000: emmc_reg |= XAE_EMMC_LINKSPD_1000; break; @@ -1467,33 +1483,17 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET); - if (state->pause & MLO_PAUSE_TX) + if (tx_pause) fcc_reg |= XAE_FCC_FCTX_MASK; else fcc_reg &= ~XAE_FCC_FCTX_MASK; - if (state->pause & MLO_PAUSE_RX) + if (rx_pause) fcc_reg |= XAE_FCC_FCRX_MASK; else fcc_reg &= ~XAE_FCC_FCRX_MASK; axienet_iow(lp, XAE_FCC_OFFSET, fcc_reg); } -static void axienet_mac_link_down(struct phylink_config *config, - unsigned int mode, - phy_interface_t interface) -{ - /* nothing meaningful to do */ -} - -static void axienet_mac_link_up(struct phylink_config *config, - struct phy_device *phy, - unsigned int mode, phy_interface_t interface, - int speed, int duplex, - bool tx_pause, bool rx_pause) -{ - /* nothing meaningful to do */ -} - static const struct phylink_mac_ops axienet_phylink_ops = { .validate = axienet_validate, .mac_pcs_get_state = axienet_mac_pcs_get_state,
Convert the Xilinx AXI ethernet driver to use the finalised link parameters in mac_link_up() rather than the parameters in mac_config(). Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- .../net/ethernet/xilinx/xilinx_axienet_main.c | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-)