net: stmmac: dwmac-socfpga: Set RX watchdog interrupt as broken
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Fri, 22 Nov 2024 14:12:55 +0000 (15:12 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 26 Nov 2024 10:58:12 +0000 (11:58 +0100)
On DWMAC3 and later, there's a RX Watchdog interrupt that's used for
interrupt coalescing. It's known to be buggy on some platforms, and
dwmac-socfpga appears to be one of them. Changing the interrupt
coalescing from ethtool doesn't appear to have any effect here.

Without disabling RIWT (Received Interrupt Watchdog Timer, I
believe...), we observe latencies while receiving traffic that amount to
around ~0.4ms. This was discovered with NTP but can be easily reproduced
with a simple ping. Without this patch :

64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=0.657 ms

With this patch :

64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=0.254 ms

Fixes: 801d233b7302 ("net: stmmac: Add SOCFPGA glue driver")
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20241122141256.764578-1-maxime.chevallier@bootlin.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c

index 248b30d..16020b7 100644 (file)
@@ -487,6 +487,8 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
        plat_dat->select_pcs = socfpga_dwmac_select_pcs;
        plat_dat->has_gmac = true;
 
+       plat_dat->riwt_off = 1;
+
        ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
        if (ret)
                return ret;