On 12.04.2021 12:03, Yangbo Lu wrote:
This patch is to add support for PTP Sync packet one-step timestamping.
Since ENETC single-step register has to be configured dynamically per
packet for correctionField offeset and UDP checksum update, current
one-step timestamping packet has to be sent only when the last one
completes transmitting on hardware. So, on the TX, this patch handles
one-step timestamping packet as below:

- Trasmit packet immediately if no other one in transfer, or queue to
   skb queue if there is already one in transfer.
   The test_and_set_bit_lock() is used here to lock and check state.
- Start a work when complete transfer on hardware, to release the bit
   lock and to send one skb in skb queue if has.

And the configuration for one-step timestamping on ENETC before
transmitting is,

- Set one-step timestamping flag in extension BD.
- Write 30 bits current timestamp in tstamp field of extension BD.
- Update PTP Sync packet originTimestamp field with current timestamp.
- Configure single-step register for correctionField offeset and UDP
   checksum update.

Signed-off-by: Yangbo Lu <yangbo...@nxp.com>
---
[...]
+       /* Queue one-step Sync packet if already locked */
+       if (skb->cb[0] & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) {
+               if (test_and_set_bit_lock(ENETC_TX_ONESTEP_TSTAMP_IN_PROGRESS,
+                                         &priv->flags)) {
fyi, I had to check with objdump that test_and_set_bit_lock translates to a atomic bit set operation on ARM64, it's LDSETA. I'd appreciate any pointers on how to look it up in the arm64 arch code.

Reviewed-by: Claudiu Manoil <claudiu.man...@nxp.com>

Reply via email to