mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 19:30:11 -05:00
net: sparx5: Fix invalid timestamps
Bit 270-271 are occasionally unexpectedly set by the hardware. This issue
was observed with 10G SFPs causing huge time errors (> 30ms) in PTP. Only
30 bits are needed for the nanosecond part of the timestamp, clear 2 most
significant bits before extracting timestamp from the internal frame
header.
Fixes: 70dfe25cd8 ("net: sparx5: Update extraction/injection for timestamping")
Signed-off-by: Aakash Menon <aakash.menon@protempis.com>
Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
9410645520
commit
151ac45348
@@ -45,8 +45,12 @@ void sparx5_ifh_parse(u32 *ifh, struct frame_info *info)
|
||||
fwd = (fwd >> 5);
|
||||
info->src_port = FIELD_GET(GENMASK(7, 1), fwd);
|
||||
|
||||
/*
|
||||
* Bit 270-271 are occasionally unexpectedly set by the hardware,
|
||||
* clear bits before extracting timestamp
|
||||
*/
|
||||
info->timestamp =
|
||||
((u64)xtr_hdr[2] << 24) |
|
||||
((u64)(xtr_hdr[2] & GENMASK(5, 0)) << 24) |
|
||||
((u64)xtr_hdr[3] << 16) |
|
||||
((u64)xtr_hdr[4] << 8) |
|
||||
((u64)xtr_hdr[5] << 0);
|
||||
|
||||
Reference in New Issue
Block a user