diff mbox series

[net,1/1] net: stmmac: enable timestamp snapshot for required PTP packets in dwmac v5.10a

Message ID 1590394694-5505-1-git-send-email-fugang.duan@nxp.com (mailing list archive)
State Mainlined
Commit f2fb6b6275eba9d312957ca44c487bd780da6169
Headers show
Series [net,1/1] net: stmmac: enable timestamp snapshot for required PTP packets in dwmac v5.10a | expand

Commit Message

Andy Duan May 25, 2020, 8:18 a.m. UTC
For rx filter 'HWTSTAMP_FILTER_PTP_V2_EVENT', it should be
PTP v2/802.AS1, any layer, any kind of event packet, but HW only
take timestamp snapshot for below PTP message: sync, Pdelay_req,
Pdelay_resp.

Then it causes below issue when test E2E case:
ptp4l[2479.534]: port 1: received DELAY_REQ without timestamp
ptp4l[2481.423]: port 1: received DELAY_REQ without timestamp
ptp4l[2481.758]: port 1: received DELAY_REQ without timestamp
ptp4l[2483.524]: port 1: received DELAY_REQ without timestamp
ptp4l[2484.233]: port 1: received DELAY_REQ without timestamp
ptp4l[2485.750]: port 1: received DELAY_REQ without timestamp
ptp4l[2486.888]: port 1: received DELAY_REQ without timestamp
ptp4l[2487.265]: port 1: received DELAY_REQ without timestamp
ptp4l[2487.316]: port 1: received DELAY_REQ without timestamp

Timestamp snapshot dependency on register bits in received path:
SNAPTYPSEL TSMSTRENA TSEVNTENA 	PTP_Messages
01         x         0          SYNC, Follow_Up, Delay_Req,
                                Delay_Resp, Pdelay_Req, Pdelay_Resp,
                                Pdelay_Resp_Follow_Up
01         0         1          SYNC, Pdelay_Req, Pdelay_Resp

For dwmac v5.10a, enabling all events by setting register
DWC_EQOS_TIME_STAMPING[SNAPTYPSEL] to 2’b01, clearing bit [TSEVNTENA]
to 0’b0, which can support all required events.

Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

David Miller May 26, 2020, 11:28 p.m. UTC | #1
From: Fugang Duan <fugang.duan@nxp.com>
Date: Mon, 25 May 2020 16:18:14 +0800

> For rx filter 'HWTSTAMP_FILTER_PTP_V2_EVENT', it should be
> PTP v2/802.AS1, any layer, any kind of event packet, but HW only
> take timestamp snapshot for below PTP message: sync, Pdelay_req,
> Pdelay_resp.
> 
> Then it causes below issue when test E2E case:
> ptp4l[2479.534]: port 1: received DELAY_REQ without timestamp
> ptp4l[2481.423]: port 1: received DELAY_REQ without timestamp
> ptp4l[2481.758]: port 1: received DELAY_REQ without timestamp
> ptp4l[2483.524]: port 1: received DELAY_REQ without timestamp
> ptp4l[2484.233]: port 1: received DELAY_REQ without timestamp
> ptp4l[2485.750]: port 1: received DELAY_REQ without timestamp
> ptp4l[2486.888]: port 1: received DELAY_REQ without timestamp
> ptp4l[2487.265]: port 1: received DELAY_REQ without timestamp
> ptp4l[2487.316]: port 1: received DELAY_REQ without timestamp
> 
> Timestamp snapshot dependency on register bits in received path:
> SNAPTYPSEL TSMSTRENA TSEVNTENA 	PTP_Messages
> 01         x         0          SYNC, Follow_Up, Delay_Req,
>                                 Delay_Resp, Pdelay_Req, Pdelay_Resp,
>                                 Pdelay_Resp_Follow_Up
> 01         0         1          SYNC, Pdelay_Req, Pdelay_Resp
> 
> For dwmac v5.10a, enabling all events by setting register
> DWC_EQOS_TIME_STAMPING[SNAPTYPSEL] to 2’b01, clearing bit [TSEVNTENA]
> to 0’b0, which can support all required events.
> 
> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>

Applied and queued up for -stable, thanks.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index b6f92c7..73677c3 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -630,7 +630,8 @@  static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
 			ptp_v2 = PTP_TCR_TSVER2ENA;
 			snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
-			ts_event_en = PTP_TCR_TSEVNTENA;
+			if (priv->synopsys_id != DWMAC_CORE_5_10)
+				ts_event_en = PTP_TCR_TSEVNTENA;
 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
 			ptp_over_ethernet = PTP_TCR_TSIPENA;