mbox series

[net-next,v6,0/4] net: enetc: remove bootloader dependency

Message ID 20200709213526.21972-1-michael@walle.cc
Headers show
Series net: enetc: remove bootloader dependency | expand

Message

Michael Walle July 9, 2020, 9:35 p.m. UTC
This is a resend [now a new v6] of the series because the conversion to the
phylink interface will likely take longer:
https://lore.kernel.org/netdev/CA+h21hpBodyY8CtNH2ktRdc2FqPi=Fjp94=VVZvzSVbnvnfKVg@mail.gmail.com/
Also the discussion in the v3 resend doesn't look like it will be resolved
soon :/
https://lore.kernel.org/netdev/20200701213433.9217-1-michael@walle.cc/

Unfortunately, we have boards in the wild with a bootloader which doesn't
set the PCS up correctly. Thus I'd really see this patches picked up as an
intermediate step until the phylink conversion is ready. Vladimir Oltean
already offered to convert enetc to phylink when he converts the felix to
phylink. After this series the PCS setup of the enetc looks almost the same
as the current felix setup. Thus conversion should be easy.

These patches were picked from the following series:
https://lore.kernel.org/netdev/1567779344-30965-1-git-send-email-claudiu.manoil@nxp.com/
They have never been resent. I've picked them up, addressed Andrews
comments, fixed some more bugs and asked Claudiu if I can keep their SOB
tags; he agreed. I've tested this on our board which happens to have a
bootloader which doesn't do the enetc setup in all cases. Though, only
SGMII mode was tested.

changes since v5:
 - fixed pcs->autoneg_complete and pcs->link assignment. Thanks Vladimir.

changes since v4:
 - moved (and renamed) the USXGMII constants to include/uapi/linux/mdio.h.
   Suggested by Russell King.

changes since v3:
 - rebased to latest net-next where devm_mdiobus_free() was removed.
   replace it by mdiobus_free(). The internal MDIO bus is optional, if
   there is any error, we try to run with the bootloader default PCS
   settings, thus in the error case, we need to free the mdiobus.

changes since v2:
 - removed SOBs from "net: enetc: Initialize SerDes for SGMII and USXGMII
   protocols" because almost everything has changed.
 - get a phy_device for the internal PCS PHY so we can use the phy_
   functions instead of raw mdiobus writes
 - reuse macros already defined in fsl_mdio.h, move missing bits from
   felix to fsl_mdio.h, because they share the same PCS PHY building
   block
 - added 2500BaseX mode (based on felix init routine)
 - changed xgmii mode to usxgmii mode, because it is actually USXGMII and
   felix does the same.
 - fixed devad, which is 0x1f (MMD_VEND2)

changes since v1:
 - mdiobus id is '"imdio-%s", dev_name(dev)' because the plain dev_name()
   is used by the emdio.
 - use mdiobus_write() instead of imdio->write(imdio, ..), since this is
   already a full featured mdiobus
 - set phy_mask to ~0 to avoid scanning the bus
 - use phy_interface_mode_is_rgmii(phy_mode) to also include the RGMII
   modes with pad delays.
 - move enetc_imdio_init() to enetc_pf.c, there shouldn't be any other
   users, should it?
 - renamed serdes to SerDes
 - printing the error code of mdiobus_register() in the error path
 - call mdiobus_unregister() on _remove()
 - call devm_mdiobus_free() if mdiobus_register() fails, since an
   error is not fatal

Alex Marginean (1):
  net: enetc: Use DT protocol information to set up the ports

Michael Walle (3):
  net: phy: add USXGMII link partner ability constants
  net: dsa: felix: (re)use already existing constants
  net: enetc: Initialize SerDes for SGMII and USXGMII protocols

 drivers/net/dsa/ocelot/felix_vsc9959.c        |  45 ++---
 .../net/ethernet/freescale/enetc/enetc_hw.h   |   3 +
 .../net/ethernet/freescale/enetc/enetc_pf.c   | 188 +++++++++++++++---
 .../net/ethernet/freescale/enetc/enetc_pf.h   |   5 +
 include/uapi/linux/mdio.h                     |  26 +++
 5 files changed, 210 insertions(+), 57 deletions(-)

Comments

Vladimir Oltean July 11, 2020, 7:52 a.m. UTC | #1
On Thu, Jul 09, 2020 at 11:35:22PM +0200, Michael Walle wrote:
> This is a resend [now a new v6] of the series because the conversion to the
> phylink interface will likely take longer:
> https://lore.kernel.org/netdev/CA+h21hpBodyY8CtNH2ktRdc2FqPi=Fjp94=VVZvzSVbnvnfKVg@mail.gmail.com/
> Also the discussion in the v3 resend doesn't look like it will be resolved
> soon :/
> https://lore.kernel.org/netdev/20200701213433.9217-1-michael@walle.cc/
> 
> Unfortunately, we have boards in the wild with a bootloader which doesn't
> set the PCS up correctly. Thus I'd really see this patches picked up as an
> intermediate step until the phylink conversion is ready. Vladimir Oltean
> already offered to convert enetc to phylink when he converts the felix to
> phylink. After this series the PCS setup of the enetc looks almost the same
> as the current felix setup. Thus conversion should be easy.
> 
> These patches were picked from the following series:
> https://lore.kernel.org/netdev/1567779344-30965-1-git-send-email-claudiu.manoil@nxp.com/
> They have never been resent. I've picked them up, addressed Andrews
> comments, fixed some more bugs and asked Claudiu if I can keep their SOB
> tags; he agreed. I've tested this on our board which happens to have a
> bootloader which doesn't do the enetc setup in all cases. Though, only
> SGMII mode was tested.
> 
> changes since v5:
>  - fixed pcs->autoneg_complete and pcs->link assignment. Thanks Vladimir.
> 
> changes since v4:
>  - moved (and renamed) the USXGMII constants to include/uapi/linux/mdio.h.
>    Suggested by Russell King.
> 
> changes since v3:
>  - rebased to latest net-next where devm_mdiobus_free() was removed.
>    replace it by mdiobus_free(). The internal MDIO bus is optional, if
>    there is any error, we try to run with the bootloader default PCS
>    settings, thus in the error case, we need to free the mdiobus.
> 
> changes since v2:
>  - removed SOBs from "net: enetc: Initialize SerDes for SGMII and USXGMII
>    protocols" because almost everything has changed.
>  - get a phy_device for the internal PCS PHY so we can use the phy_
>    functions instead of raw mdiobus writes
>  - reuse macros already defined in fsl_mdio.h, move missing bits from
>    felix to fsl_mdio.h, because they share the same PCS PHY building
>    block
>  - added 2500BaseX mode (based on felix init routine)
>  - changed xgmii mode to usxgmii mode, because it is actually USXGMII and
>    felix does the same.
>  - fixed devad, which is 0x1f (MMD_VEND2)
> 
> changes since v1:
>  - mdiobus id is '"imdio-%s", dev_name(dev)' because the plain dev_name()
>    is used by the emdio.
>  - use mdiobus_write() instead of imdio->write(imdio, ..), since this is
>    already a full featured mdiobus
>  - set phy_mask to ~0 to avoid scanning the bus
>  - use phy_interface_mode_is_rgmii(phy_mode) to also include the RGMII
>    modes with pad delays.
>  - move enetc_imdio_init() to enetc_pf.c, there shouldn't be any other
>    users, should it?
>  - renamed serdes to SerDes
>  - printing the error code of mdiobus_register() in the error path
>  - call mdiobus_unregister() on _remove()
>  - call devm_mdiobus_free() if mdiobus_register() fails, since an
>    error is not fatal
> 
> Alex Marginean (1):
>   net: enetc: Use DT protocol information to set up the ports
> 
> Michael Walle (3):
>   net: phy: add USXGMII link partner ability constants
>   net: dsa: felix: (re)use already existing constants
>   net: enetc: Initialize SerDes for SGMII and USXGMII protocols
> 
>  drivers/net/dsa/ocelot/felix_vsc9959.c        |  45 ++---
>  .../net/ethernet/freescale/enetc/enetc_hw.h   |   3 +
>  .../net/ethernet/freescale/enetc/enetc_pf.c   | 188 +++++++++++++++---
>  .../net/ethernet/freescale/enetc/enetc_pf.h   |   5 +
>  include/uapi/linux/mdio.h                     |  26 +++
>  5 files changed, 210 insertions(+), 57 deletions(-)
> 
> -- 
> 2.20.1
> 

I plan to give this series a go on an LS1028A-QDS later today to make
sure there are no regressions.

Thanks,
-Vladimir