• Danielle Ratson's avatar
    mlxsw: spectrum_ptp: Support SIOCGHWTSTAMP, SIOCSHWTSTAMP ioctls · 08ef8bc8
    Danielle Ratson authored
    The SIOCSHWTSTAMP ioctl configures HW timestamping on a given port. In
    Spectrum-2 and above, each packet gets time stamp by default, but in
    order to provide an accurate time stamp, software should configure to
    update the correction field. In addition, the PTP traps are not enabled
    by default, software should enable it per port or for all ports.
    
    The switch behaves like a transparent clock between CPU port and each
    front panel port. If ingress correction is set on a port for a given packet
    type, then when such a packet is received via the port, the current time
    stamp is subtracted from the correction field. If egress correction is set
    on a port for a given packet type, then when such a packet is transmitted
    via the port, the current time stamp is added to the correction field.
    
    The result is that as the packet ingresses through a port with ingress
    correction enabled, and egresses through a port with egress correction
    enabled, the PTP correction field is updated to reflect the time that the
    packet spent in the ASIC.
    
    This can be used to update the correction field of trapped packets by
    enabling ingress correction on a port where time stamping was enabled,
    and egress correction on the CPU port. Similarly, for packets transmitted
    from the host, ingress correction should be enabled on the CPU port, and
    egress correction on a front-panel port.
    
    However, since the correction fields will be updated for all PTP packets
    crossing the CPU port, in order not to mangle the correction field, the
    front panel port involved in the packet transfer must have the
    corresponding correction enabled as well.
    
    Therefore, when HW timestamping is enabled on at least one port, we have
    to configure hardware to update the correction field and trap PTP event
    packets on all ports.
    
    Add reference count as part of 'struct mlxsw_sp_ptp_state', to maintain
    how many ports use HW timestamping. Handle the correction field
    configuration only when the first port enables time stamping and when the
    last port disables time stamping. Store the configuration as part of
    'struct mlxsw_sp_ptp_state', as it is global for all ports.
    
    The SIOCGHWTSTAMP ioctl is a getter for the current configuration,
    implement it and use the global configuration.
    Signed-off-by: default avatarDanielle Ratson <danieller@nvidia.com>
    Signed-off-by: default avatarAmit Cohen <amcohen@nvidia.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    08ef8bc8
spectrum_ptp.h 6.37 KB