linux/drivers/net/dsa/sja1105
Vladimir Oltean 34d76e9fa8 net: dsa: sja1105: Implement the .gettimex64 system call for PTP
Through the PTP_SYS_OFFSET_EXTENDED ioctl, it is possible for userspace
applications (i.e. phc2sys) to compensate for the delays incurred while
reading the PHC's time.

The task itself of taking the software timestamp is delegated to the SPI
subsystem, through the newly introduced API in struct spi_transfer. The
goal is to cross-timestamp I/O operations on the switch's PTP clock with
values in the local system clock (CLOCK_REALTIME). For that we need to
understand a bit of the hardware internals.

The 'read PTP time' message is a 12 byte structure, first 4 bytes of
which represent the SPI header, and the last 8 bytes represent the
64-bit PTP time. The switch itself starts processing the command
immediately after receiving the last bit of the address, i.e. at the
middle of byte 3 (last byte of header). The PTP time is shadowed to a
buffer register in the switch, and retrieved atomically during the
subsequent SPI frames.

A similar thing goes on for the 'write PTP time' message, although in
that case the switch waits until the 64-bit PTP time becomes fully
available before taking any action. So the byte that needs to be
software-timestamped is byte 11 (last) of the transfer.

The patch creates a common (and local) sja1105_xfer implementation for
the SPI I/O, and offers 3 front-ends:

- sja1105_xfer_u32 and sja1105_xfer_u64: these are capable of optionally
  requesting a PTP timestamp

- sja1105_xfer_buf: this is for large transfers (e.g. the static config
  buffer) and other misc data, and there is no point in giving
  timestamping capabilities to this.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-11-11 12:45:30 -08:00
..
Kconfig net: dsa: sja1105: improve NET_DSA_SJA1105_TAS dependency 2019-10-28 16:33:42 -07:00
Makefile net: dsa: sja1105: Configure the Time-Aware Scheduler via tc-taprio offload 2019-09-16 21:32:58 +02:00
sja1105_clocking.c net: dsa: sja1105: Rename sja1105_spi_send_packed_buf to sja1105_xfer_buf 2019-10-02 12:25:11 -04:00
sja1105_dynamic_config.c net: dsa: sja1105: Rename sja1105_spi_send_packed_buf to sja1105_xfer_buf 2019-10-02 12:25:11 -04:00
sja1105_dynamic_config.h net: dsa: sja1105: Use the correct style for SPDX License Identifier 2019-10-15 20:16:26 -07:00
sja1105_ethtool.c net: dsa: sja1105: Rename sja1105_spi_send_packed_buf to sja1105_xfer_buf 2019-10-02 12:25:11 -04:00
sja1105_main.c net: dsa: sja1105: Implement the .gettimex64 system call for PTP 2019-11-11 12:45:30 -08:00
sja1105_ptp.c net: dsa: sja1105: Implement the .gettimex64 system call for PTP 2019-11-11 12:45:30 -08:00
sja1105_ptp.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-10-20 10:43:00 -07:00
sja1105_spi.c net: dsa: sja1105: Implement the .gettimex64 system call for PTP 2019-11-11 12:45:30 -08:00
sja1105_static_config.c net: dsa: sja1105: Add static config tables for scheduling 2019-09-16 21:32:57 +02:00
sja1105_static_config.h net: dsa: sja1105: Use the correct style for SPDX License Identifier 2019-10-15 20:16:26 -07:00
sja1105_tas.c net: dsa: sja1105: Configure the Time-Aware Scheduler via tc-taprio offload 2019-09-16 21:32:58 +02:00
sja1105_tas.h net: dsa: sja1105: Use the correct style for SPDX License Identifier 2019-10-15 20:16:26 -07:00
sja1105.h net: dsa: sja1105: Implement the .gettimex64 system call for PTP 2019-11-11 12:45:30 -08:00