]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: dwmac4: fix RX FIFO fill statistics
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 8 Jan 2026 17:36:14 +0000 (17:36 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 13 Jan 2026 02:02:10 +0000 (18:02 -0800)
In dwmac4_debug(), the wrong shift is used with the RXFSTS mask:

 #define MTL_DEBUG_RXFSTS_MASK          GENMASK(5, 4)
 #define MTL_DEBUG_RXFSTS_SHIFT         4
 #define MTL_DEBUG_RRCSTS_SHIFT         1

                       u32 rxfsts = (value & MTL_DEBUG_RXFSTS_MASK)
                                    >> MTL_DEBUG_RRCSTS_SHIFT;

where rxfsts is tested against small integers 1 .. 3. This results in
the tests always failing, causing the "mtl_rx_fifo__fill_level_empty"
statistic counter to always be incremented no matter what the fill
level actually is.

Fix this by using FIELD_GET() and remove the unnecessary
MTL_DEBUG_RXFSTS_SHIFT definition as FIELD_GET() will shift according
to the least siginificant set bit in the supplied field mask.

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vdtvi-00000002GtP-1Os1@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac4.h
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c

index fa27639895ce930bbc7e08299c99ef98c21616c9..3da6891b9df753dd37a77d7cf36397fcd72c5414 100644 (file)
@@ -460,7 +460,6 @@ static inline u32 mtl_low_credx_base_addr(const struct dwmac4_addrs *addrs,
 
 /* MAC debug: GMII or MII Transmit Protocol Engine Status */
 #define MTL_DEBUG_RXFSTS_MASK          GENMASK(5, 4)
-#define MTL_DEBUG_RXFSTS_SHIFT         4
 #define MTL_DEBUG_RXFSTS_EMPTY         0
 #define MTL_DEBUG_RXFSTS_BT            1
 #define MTL_DEBUG_RXFSTS_AT            2
index a4282fd7c3c739b0b72a7908ebc922c07281337f..bd5f48d0b9fc42b2d76f73c2023e367833800bad 100644 (file)
@@ -700,8 +700,7 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
                value = readl(ioaddr + MTL_CHAN_RX_DEBUG(dwmac4_addrs, queue));
 
                if (value & MTL_DEBUG_RXFSTS_MASK) {
-                       u32 rxfsts = (value & MTL_DEBUG_RXFSTS_MASK)
-                                    >> MTL_DEBUG_RRCSTS_SHIFT;
+                       u32 rxfsts = FIELD_GET(MTL_DEBUG_RXFSTS_MASK, value);
 
                        if (rxfsts == MTL_DEBUG_RXFSTS_FULL)
                                x->mtl_rx_fifo_fill_level_full++;