net: dsa: felix: update base time of time-aware shaper when adjusting PTP time
authorXiaoliang Yang <xiaoliang.yang_1@nxp.com>
Fri, 17 Jun 2022 03:24:23 +0000 (11:24 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jun 2022 08:53:59 +0000 (09:53 +0100)
commit8670dc33f48bab4d7bb4b8d0232f17f4dae419ec
treeee153e88e10b3e41b0ace1474dd4e427597f66f1
parentc205035e3adb4c50234c9263f7cf3bbff76b3c72
net: dsa: felix: update base time of time-aware shaper when adjusting PTP time

When adjusting the PTP clock, the base time of the TAS configuration
will become unreliable. We need reset the TAS configuration by using a
new base time.

For example, if the driver gets a base time 0 of Qbv configuration from
user, and current time is 20000. The driver will set the TAS base time
to be 20000. After the PTP clock adjustment, the current time becomes
10000. If the TAS base time is still 20000, it will be a future time,
and TAS entry list will stop running. Another example, if the current
time becomes to be 10000000 after PTP clock adjust, a large time offset
can cause the hardware to hang.

This patch introduces a tas_clock_adjust() function to reset the TAS
module by using a new base time after the PTP clock adjustment. This can
avoid issues above.

Due to PTP clock adjustment can occur at any time, it may conflict with
the TAS configuration. We introduce a new TAS lock to serialize the
access to the TAS registers.

Signed-off-by: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/ocelot/felix_vsc9959.c
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/mscc/ocelot_ptp.c
include/soc/mscc/ocelot.h