mbox series

[net-next,00/11] net: mtk_eth_soc: improve PCS implementation

Message ID Y1qDMw+DJLAJHT40@shell.armlinux.org.uk (mailing list archive)
Headers show
Series net: mtk_eth_soc: improve PCS implementation | expand

Message

Russell King (Oracle) Oct. 27, 2022, 1:10 p.m. UTC
Hi,

As a result of invesigations from Frank Wunderlich, we know a lot more
about the Mediatek "SGMII" PCS block, and can implement the PCS support
correctly. This series achieves that, and Frank has tested the final
result and reports that it works for him. The series could do with
further testing by others, but I suspect that is unlikely to happen
until it is merged based on past performances with this driver.

Briefly, the patches in order:

1. Add a new helper to get the link timer duration in nanoseconds
2. Add definitions for the newly discovered registers and updates to
   bit definitions, including bitmasks for the BMCR, BMSR and two
   advertisement registers.
3. Remove unnecessary/unused error handling (functions always returning
   zero.)
4. Adding the missing pcs_get_state() implementation.
5. Converting the code to use regmap_update_bits() rather than
   open-coding read-modify-write sequences.
6. Adding out-of-band speed and duplex forcing for all non-inband modes
   not just the 802.3z link modes the code currently does.
7. Moving the release of the PHY power down to the main pcs_config()
   function.
8. Moving the interface speed selection to the main pcs_config()
   function.
9. Adding advertisement programming.
10. Adding correct link timer programming using the new helper in the
    first patch.
11. Adding support for 802.3z negotiation.

There is one remaining issue - when configuring the PCS for in-band,
for some reason the AN restart bit is always set. This should not be
necessary, but requires further investigation with the hardware to
find out whether it is really necessary. I suspect this was a work
around for a previous poor implementation.

 drivers/net/ethernet/mediatek/mtk_eth_soc.h |  13 ++-
 drivers/net/ethernet/mediatek/mtk_sgmii.c   | 174 ++++++++++++++++------------
 include/linux/phylink.h                     |  24 ++++
 3 files changed, 134 insertions(+), 77 deletions(-)

Comments

Russell King (Oracle) Oct. 27, 2022, 1:23 p.m. UTC | #1
On Thu, Oct 27, 2022 at 02:10:11PM +0100, Russell King (Oracle) wrote:
> Hi,
> 
> As a result of invesigations from Frank Wunderlich, we know a lot more
> about the Mediatek "SGMII" PCS block, and can implement the PCS support
> correctly. This series achieves that, and Frank has tested the final
> result and reports that it works for him. The series could do with
> further testing by others, but I suspect that is unlikely to happen
> until it is merged based on past performances with this driver.

I forgot to say, many thanks to Frank for his efforts and patience in
testing various patches to discover how this PCS works.

> 
> Briefly, the patches in order:
> 
> 1. Add a new helper to get the link timer duration in nanoseconds
> 2. Add definitions for the newly discovered registers and updates to
>    bit definitions, including bitmasks for the BMCR, BMSR and two
>    advertisement registers.
> 3. Remove unnecessary/unused error handling (functions always returning
>    zero.)
> 4. Adding the missing pcs_get_state() implementation.
> 5. Converting the code to use regmap_update_bits() rather than
>    open-coding read-modify-write sequences.
> 6. Adding out-of-band speed and duplex forcing for all non-inband modes
>    not just the 802.3z link modes the code currently does.
> 7. Moving the release of the PHY power down to the main pcs_config()
>    function.
> 8. Moving the interface speed selection to the main pcs_config()
>    function.
> 9. Adding advertisement programming.
> 10. Adding correct link timer programming using the new helper in the
>     first patch.
> 11. Adding support for 802.3z negotiation.
> 
> There is one remaining issue - when configuring the PCS for in-band,
> for some reason the AN restart bit is always set. This should not be
> necessary, but requires further investigation with the hardware to
> find out whether it is really necessary. I suspect this was a work
> around for a previous poor implementation.
> 
>  drivers/net/ethernet/mediatek/mtk_eth_soc.h |  13 ++-
>  drivers/net/ethernet/mediatek/mtk_sgmii.c   | 174 ++++++++++++++++------------
>  include/linux/phylink.h                     |  24 ++++
>  3 files changed, 134 insertions(+), 77 deletions(-)
> 
> -- 
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
>
patchwork-bot+netdevbpf@kernel.org Oct. 29, 2022, 5 a.m. UTC | #2
Hello:

This series was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba@kernel.org>:

On Thu, 27 Oct 2022 14:10:11 +0100 you wrote:
> Hi,
> 
> As a result of invesigations from Frank Wunderlich, we know a lot more
> about the Mediatek "SGMII" PCS block, and can implement the PCS support
> correctly. This series achieves that, and Frank has tested the final
> result and reports that it works for him. The series could do with
> further testing by others, but I suspect that is unlikely to happen
> until it is merged based on past performances with this driver.
> 
> [...]

Here is the summary with links:
  - [net-next,01/11] net: phylink: add phylink_get_link_timer_ns() helper
    https://git.kernel.org/netdev/net-next/c/9c5a170677c3
  - [net-next,02/11] net: mtk_eth_soc: add definitions for PCS
    https://git.kernel.org/netdev/net-next/c/b6a709cb51f7
  - [net-next,03/11] net: mtk_eth_soc: eliminate unnecessary error handling
    https://git.kernel.org/netdev/net-next/c/5cf7797526ee
  - [net-next,04/11] net: mtk_eth_soc: add pcs_get_state() implementation
    https://git.kernel.org/netdev/net-next/c/c000dca09800
  - [net-next,05/11] net: mtk_eth_soc: convert mtk_sgmii to use regmap_update_bits()
    https://git.kernel.org/netdev/net-next/c/0d2351dc2768
  - [net-next,06/11] net: mtk_eth_soc: add out of band forcing of speed and duplex in pcs_link_up
    https://git.kernel.org/netdev/net-next/c/12198c3a410f
  - [net-next,07/11] net: mtk_eth_soc: move PHY power up
    https://git.kernel.org/netdev/net-next/c/6f38fffe2179
  - [net-next,08/11] net: mtk_eth_soc: move interface speed selection
    https://git.kernel.org/netdev/net-next/c/f752c0df13df
  - [net-next,09/11] net: mtk_eth_soc: add advertisement programming
    https://git.kernel.org/netdev/net-next/c/c125c66ea71b
  - [net-next,10/11] net: mtk_eth_soc: move and correct link timer programming
    https://git.kernel.org/netdev/net-next/c/3027d89f8770
  - [net-next,11/11] net: mtk_eth_soc: add support for in-band 802.3z negotiation
    https://git.kernel.org/netdev/net-next/c/81b0f12a2a8a

You are awesome, thank you!