On 28/11/2025 12:53, Chwee-Lin Choong wrote:
The current HW bug workaround checks the TXTT_0 ready bit first,
then reads TXSTMPL_0 twice (before and after reading TXSTMPH_0)
to detect whether a new timestamp was captured by timestamp
register 0 during the workaround.
This sequence has a race: if a new timestamp is captured after
checking the TXTT_0 bit but before the first TXSTMPL_0 read, the
detection fails because both the “old” and “new” values come from
the same timestamp.
Fix by reading TXSTMPL_0 first to establish a baseline, then
checking the TXTT_0 bit. This ensures any timestamp captured
during the race window will be detected.
Old sequence:
1. Check TXTT_0 ready bit
2. Read TXSTMPL_0 (baseline)
3. Read TXSTMPH_0 (interrupt workaround)
4. Read TXSTMPL_0 (detect changes vs baseline)
New sequence:
1. Read TXSTMPL_0 (baseline)
2. Check TXTT_0 ready bit
3. Read TXSTMPH_0 (interrupt workaround)
4. Read TXSTMPL_0 (detect changes vs baseline)
Fixes: c789ad7cbebc ("igc: Work around HW bug causing missing timestamps")
Suggested-by: Avi Shalev <[email protected]>
Reviewed-by: Aleksandr Loktionov <[email protected]>
Co-developed-by: Song Yoong Siang <[email protected]>
Signed-off-by: Song Yoong Siang <[email protected]>
Signed-off-by: Chwee-Lin Choong <[email protected]>
---
v1:
https://patchwork.ozlabs.org/project/intel-wired-lan/patch/[email protected]/
v2:
https://patchwork.ozlabs.org/project/intel-wired-lan/patch/[email protected]/
v3:
https://patchwork.ozlabs.org/project/intel-wired-lan/patch/[email protected]/
changelog:
v1 -> v2
- Added detailed comments explaining the hardware bug workaround and race
detection mechanism
v2 -> v3
- Removed extra export file added by mistake
v3 -> v4
- Added co-developer
---
drivers/net/ethernet/intel/igc/igc_ptp.c | 43 ++++++++++++++----------
1 file changed, 25 insertions(+), 18 deletions(-)
Tested-by: Avigail Dahan <[email protected]>