]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
amd-xgbe: add support for rx alignment errors
authorRaju Rangoju <Raju.Rangoju@amd.com>
Thu, 29 Jan 2026 11:15:20 +0000 (16:45 +0530)
committerJakub Kicinski <kuba@kernel.org>
Sat, 31 Jan 2026 01:36:38 +0000 (17:36 -0800)
Add the support to read the rx alignment errors and update
them in the standard rtnl_link_stats64 structure.

Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20260129111520.1567097-1-Raju.Rangoju@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/amd/xgbe/xgbe-common.h
drivers/net/ethernet/amd/xgbe/xgbe-dev.c
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/amd/xgbe/xgbe.h

index 62b01de93db49a982c6fbde45d104f1c03448c70..711f295eb777460c61e3b050cf0d52823cb6fce5 100644 (file)
 #define MMC_RXVLANFRAMES_GB_LO         0x0998
 #define MMC_RXVLANFRAMES_GB_HI         0x099c
 #define MMC_RXWATCHDOGERROR            0x09a0
+#define MMC_RXALIGNMENTERROR           0x09bc
 
 /* MMC register entry bit positions and sizes */
 #define MMC_CR_CR_INDEX                                0
 #define MMC_RISR_RXVLANFRAMES_GB_WIDTH         1
 #define MMC_RISR_RXWATCHDOGERROR_INDEX         22
 #define MMC_RISR_RXWATCHDOGERROR_WIDTH         1
+#define MMC_RISR_RXALIGNMENTERROR_INDEX                27
+#define MMC_RISR_RXALIGNMENTERROR_WIDTH                1
 #define MMC_TIER_ALL_INTERRUPTS_INDEX          0
 #define MMC_TIER_ALL_INTERRUPTS_WIDTH          18
 #define MMC_TISR_TXOCTETCOUNT_GB_INDEX         0
index b646ae575e6a18c17342801adaa0d65d2a27e685..c04a9c76bd40a8b6468e1d881366d53f66d63c4e 100644 (file)
@@ -2794,6 +2794,7 @@ static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo)
                case MMC_RXUNDERSIZE_G:
                case MMC_RXOVERSIZE_G:
                case MMC_RXWATCHDOGERROR:
+               case MMC_RXALIGNMENTERROR:
                        read_hi = false;
                        break;
 
@@ -2997,6 +2998,10 @@ static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
        if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR))
                stats->rxwatchdogerror +=
                        xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
+
+       if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXALIGNMENTERROR))
+               stats->rxalignmenterror +=
+                       xgbe_mmc_read(pdata, MMC_RXALIGNMENTERROR);
 }
 
 static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
@@ -3129,6 +3134,9 @@ static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
        stats->rxwatchdogerror +=
                xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
 
+       stats->rxalignmenterror +=
+               xgbe_mmc_read(pdata, MMC_RXALIGNMENTERROR);
+
        /* Un-freeze counters */
        XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0);
 }
index b5a60a0488967d3d73128446387910f43064f721..62bb4b8a68e1ca8e59956c6cbfe83e1eea48fa05 100644 (file)
@@ -1838,6 +1838,7 @@ static void xgbe_get_stats64(struct net_device *netdev,
        s->rx_length_errors = pstats->rxlengtherror;
        s->rx_crc_errors = pstats->rxcrcerror;
        s->rx_over_errors = pstats->rxfifooverflow;
+       s->rx_frame_errors = pstats->rxalignmenterror;
 
        s->tx_packets = pstats->txframecount_gb;
        s->tx_bytes = pstats->txoctetcount_gb;
index 03ef0f5484830a15a4be4ce6c78cc06260718283..1269b8ce92492d35bfd70283496975d19b1f4cc6 100644 (file)
@@ -659,6 +659,7 @@ struct xgbe_mmc_stats {
        u64 rxfifooverflow;
        u64 rxvlanframes_gb;
        u64 rxwatchdogerror;
+       u64 rxalignmenterror;
 };
 
 struct xgbe_ext_stats {