Commit 7b7491372f8e for kernel

commit 7b7491372f8ec2d8c08da18e5d629e55f41dda89
Author: Alexis Lothoré <alexis.lothore@bootlin.com>
Date:   Wed Apr 23 09:12:10 2025 +0200

    net: stmmac: fix multiplication overflow when reading timestamp

    The current way of reading a timestamp snapshot in stmmac can lead to
    integer overflow, as the computation is done on 32 bits. The issue has
    been observed on a dwmac-socfpga platform returning chaotic timestamp
    values due to this overflow. The corresponding multiplication is done
    with a MUL instruction, which returns 32 bit values. Explicitly casting
    the value to 64 bits replaced the MUL with a UMLAL, which computes and
    returns the result on 64 bits, and so returns correctly the timestamps.

    Prevent this overflow by explicitly casting the intermediate value to
    u64 to make sure that the whole computation is made on u64. While at it,
    apply the same cast on the other dwmac variant (GMAC4) method for
    snapshot retrieval.

    Fixes: 477c3e1f6363 ("net: stmmac: Introduce dwmac1000 timestamping operations")
    Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Link: https://patch.msgid.link/20250423-stmmac_ts-v2-2-e2cf2bbd61b1@bootlin.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
index a8b901cdf5cb..56b76aaa58f0 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
@@ -553,7 +553,7 @@ void dwmac1000_get_ptptime(void __iomem *ptpaddr, u64 *ptp_time)
 	u64 ns;

 	ns = readl(ptpaddr + GMAC_PTP_ATNR);
-	ns += readl(ptpaddr + GMAC_PTP_ATSR) * NSEC_PER_SEC;
+	ns += (u64)readl(ptpaddr + GMAC_PTP_ATSR) * NSEC_PER_SEC;

 	*ptp_time = ns;
 }
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
index 0f59aa982604..e2840fa241f2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
@@ -222,7 +222,7 @@ static void get_ptptime(void __iomem *ptpaddr, u64 *ptp_time)
 	u64 ns;

 	ns = readl(ptpaddr + PTP_ATNR);
-	ns += readl(ptpaddr + PTP_ATSR) * NSEC_PER_SEC;
+	ns += (u64)readl(ptpaddr + PTP_ATSR) * NSEC_PER_SEC;

 	*ptp_time = ns;
 }