mbox series

[net-next,00/10] PTP support for DSA and mv88e6xxx driver.

Message ID 1518566871-12213-1-git-send-email-andrew@lunn.ch
Headers show
Series PTP support for DSA and mv88e6xxx driver. | expand

Message

Andrew Lunn Feb. 14, 2018, 12:07 a.m. UTC
This patchset adds support for using the PTP hardware in switches
supported by the mv88e6xxx driver. The code was produces in
collaboration with Brandon Streiff doing the initial implementation,
and then Richard Cochran and Andrew Lunn making further changes and
cleanups.

The code is sufficient to use ptp4l on a single DSA interface, either
as a master or a slave. Due to the use of an MDIO bus to access the
switch, reading hardware timestamps is slower than what ptp4l
expects. Thus it is necessary to use the option
--tx_timestamp_timeout=32. Heavy use of ethtool -S, or bridge fdb show
can also upset ptp4l. Patches to address this will follow.

Further work is requires to support bridges using Boundary Clock or
Transparent Clock mode.

Since the RFC, an overflow bug has been fixed. Brandon Streiff
has also Acked-by: the updates to his initial patchset.

Thanks
	Andrew


Andrew Lunn (1):
  net: ptp: Add stub for ptp_classify_raw()

Brandon Streiff (9):
  net: dsa: mv88e6xxx: export g2 register accessors
  net: dsa: mv88e6xxx: add accessors for PTP/TAI registers
  net: dsa: mv88e6xxx: expose switch time as a PTP hardware clock
  net: dsa: mv88e6xxx: add support for GPIO configuration
  net: dsa: mv88e6xxx: add support for event capture
  net: dsa: forward hardware timestamping ioctls to switch driver
  net: dsa: forward timestamping callbacks to switch drivers
  net: dsa: mv88e6xxx: add rx/tx timestamping support
  net: dsa: mv88e6xxx: add workaround for 6341 timestamping

 drivers/net/dsa/mv88e6xxx/Kconfig           |  10 +
 drivers/net/dsa/mv88e6xxx/Makefile          |   4 +
 drivers/net/dsa/mv88e6xxx/chip.c            |  67 ++++
 drivers/net/dsa/mv88e6xxx/chip.h            | 103 +++++
 drivers/net/dsa/mv88e6xxx/global2.c         |   9 +-
 drivers/net/dsa/mv88e6xxx/global2.h         |  85 +++-
 drivers/net/dsa/mv88e6xxx/global2_avb.c     | 193 +++++++++
 drivers/net/dsa/mv88e6xxx/global2_scratch.c | 240 ++++++++++++
 drivers/net/dsa/mv88e6xxx/hwtstamp.c        | 584 ++++++++++++++++++++++++++++
 drivers/net/dsa/mv88e6xxx/hwtstamp.h        | 172 ++++++++
 drivers/net/dsa/mv88e6xxx/ptp.c             | 381 ++++++++++++++++++
 drivers/net/dsa/mv88e6xxx/ptp.h             | 108 +++++
 include/linux/ptp_classify.h                |   4 +
 include/net/dsa.h                           |  20 +
 net/dsa/dsa.c                               |  36 ++
 net/dsa/slave.c                             |  59 +++
 16 files changed, 2070 insertions(+), 5 deletions(-)
 create mode 100644 drivers/net/dsa/mv88e6xxx/global2_avb.c
 create mode 100644 drivers/net/dsa/mv88e6xxx/global2_scratch.c
 create mode 100644 drivers/net/dsa/mv88e6xxx/hwtstamp.c
 create mode 100644 drivers/net/dsa/mv88e6xxx/hwtstamp.h
 create mode 100644 drivers/net/dsa/mv88e6xxx/ptp.c
 create mode 100644 drivers/net/dsa/mv88e6xxx/ptp.h

Comments

Richard Cochran Feb. 14, 2018, 3:59 a.m. UTC | #1
On Wed, Feb 14, 2018 at 01:07:41AM +0100, Andrew Lunn wrote:
> Further work is requires to support bridges using Boundary Clock or
> Transparent Clock mode.

Small correction: Boundary Clock (BC) works just fine if the DSA ports
are separate (not in a bridge device).

If the DSA ports *are* connected together in a bridge device, the
multicast PTP messages are incorrectly (?) forwarded out all ports by
the kernel SW bridge code.  The work around is to add a bridge rule to
drop these frames.  With the rule in place, BC also works in this
configuration.

Transparent Clock would work as far as the driver and kernel go, but
ptp4l does not yet implement it.

Thanks,
Richard
David Miller Feb. 14, 2018, 7:38 p.m. UTC | #2
From: Andrew Lunn <andrew@lunn.ch>
Date: Wed, 14 Feb 2018 01:07:41 +0100

> This patchset adds support for using the PTP hardware in switches
> supported by the mv88e6xxx driver. The code was produces in
> collaboration with Brandon Streiff doing the initial implementation,
> and then Richard Cochran and Andrew Lunn making further changes and
> cleanups.
> 
> The code is sufficient to use ptp4l on a single DSA interface, either
> as a master or a slave. Due to the use of an MDIO bus to access the
> switch, reading hardware timestamps is slower than what ptp4l
> expects. Thus it is necessary to use the option
> --tx_timestamp_timeout=32. Heavy use of ethtool -S, or bridge fdb show
> can also upset ptp4l. Patches to address this will follow.
> 
> Further work is requires to support bridges using Boundary Clock or
> Transparent Clock mode.
> 
> Since the RFC, an overflow bug has been fixed. Brandon Streiff
> has also Acked-by: the updates to his initial patchset.

Looks great, series applied, thanks!