This fix is related to D36327.
mlx5e_mbuf_tstmp() splits the HW clock delta into seconds and a
sub-second remainder before scaling it by the calibration interval.
With a 1GHz core clock and the default 30 seconds recalibration
interval, both the remainder multiplied by the interval in ns and the
carry over multiplied by cclk exceed 2^64. RX timestamps end up off by
up to two seconds, which shows up as clock drift in NTP using HW RX
timestamps.
Take the whole calibration intervals out of the HW clock delta first,
so that the rest of the computation does not depend on how far the
timestamp is from the calibration point, e.g. after the system was
suspended. Then split the rest at 2^20 clocks, about 1ms at 1GHz,
instead of at seconds, using shifts and masks. This keeps 3 divides
per packet, as before the change. The split no longer depends on the
clock frequency, so priv->cclk is removed.
struct mlx5e_priv is also used by the IPsec code in mlx5_core, so
mlx5.ko and mlx5en.ko must be rebuilt together after this change.