• Holger Assmann's avatar
    net: stmmac: retain PTP clock time during SIOCSHWTSTAMP ioctls · a6da2bbb
    Holger Assmann authored
    Currently, when user space emits SIOCSHWTSTAMP ioctl calls such as
    enabling/disabling timestamping or changing filter settings, the driver
    reads the current CLOCK_REALTIME value and programming this into the
    NIC's hardware clock. This might be necessary during system
    initialization, but at runtime, when the PTP clock has already been
    synchronized to a grandmaster, a reset of the timestamp settings might
    result in a clock jump. Furthermore, if the clock is also controlled by
    phc2sys in automatic mode (where the UTC offset is queried from ptp4l),
    that UTC-to-TAI offset (currently 37 seconds in 2021) would be
    temporarily reset to 0, and it would take a long time for phc2sys to
    readjust so that CLOCK_REALTIME and the PHC are apart by 37 seconds
    again.
    
    To address the issue, we introduce a new function called
    stmmac_init_tstamp_counter(), which gets called during ndo_open().
    It contains the code snippet moved from stmmac_hwtstamp_set() that
    manages the time synchronization. Besides, the sub second increment
    configuration is also moved here since the related values are hardware
    dependent and runtime invariant.
    
    Furthermore, the hardware clock must be kept running even when no time
    stamping mode is selected in order to retain the synchronized time base.
    That way, timestamping can be enabled again at any time only with the
    need to compensate the clock's natural drifting.
    
    As a side effect, this patch fixes the issue that ptp_clock_info::enable
    can be called before SIOCSHWTSTAMP and the driver (which looks at
    priv->systime_flags) was not prepared to handle that ordering.
    
    Fixes: 92ba6888
    
     ("stmmac: add the support for PTP hw clock driver")
    Reported-by: default avatarMichael Olbrich <m.olbrich@pengutronix.de>
    Signed-off-by: default avatarAhmad Fatoum <a.fatoum@pengutronix.de>
    Signed-off-by: default avatarHolger Assmann <h.assmann@pengutronix.de>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a6da2bbb
stmmac_main.c 197 KB