From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-co1nam03on0092.outbound.protection.outlook.com ([104.47.40.92]:4928 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752669AbeBCSBX (ORCPT ); Sat, 3 Feb 2018 13:01:23 -0500 From: Sasha Levin To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" CC: Fredrik Hallenberg , "David S . Miller" , Sasha Levin Subject: [PATCH AUTOSEL for 4.14 039/110] net: stmmac: Fix TX timestamp calculation Date: Sat, 3 Feb 2018 18:00:47 +0000 Message-ID: <20180203180015.29073-39-alexander.levin@microsoft.com> References: <20180203180015.29073-1-alexander.levin@microsoft.com> In-Reply-To: <20180203180015.29073-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Fredrik Hallenberg [ Upstream commit 200922c93f008e03ddc804c6dacdf26ca1ba86d7 ] When using GMAC4 the value written in PTP_SSIR should be shifted however the shifted value is also used in subsequent calculations which results in a bad timestamp value. Signed-off-by: Fredrik Hallenberg Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/driver= s/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c index 721b61655261..08c19ebd5306 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c @@ -34,6 +34,7 @@ static u32 stmmac_config_sub_second_increment(void __iome= m *ioaddr, { u32 value =3D readl(ioaddr + PTP_TCR); unsigned long data; + u32 reg_value; =20 /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second * formula =3D (1/ptp_clock) * 1000000000 @@ -50,10 +51,11 @@ static u32 stmmac_config_sub_second_increment(void __io= mem *ioaddr, =20 data &=3D PTP_SSIR_SSINC_MASK; =20 + reg_value =3D data; if (gmac4) - data =3D data << GMAC4_PTP_SSIR_SSINC_SHIFT; + reg_value <<=3D GMAC4_PTP_SSIR_SSINC_SHIFT; =20 - writel(data, ioaddr + PTP_SSIR); + writel(reg_value, ioaddr + PTP_SSIR); =20 return data; } --=20 2.11.0