Add the support to read the rx alignment and length errors and update them in the standard rtnl_link_stats64 structure. Signed-off-by: Raju Rangoju --- drivers/net/ethernet/amd/xgbe/xgbe-common.h | 3 +++ drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 8 ++++++++ drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 2 ++ drivers/net/ethernet/amd/xgbe/xgbe.h | 1 + 4 files changed, 14 insertions(+) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h index 62b01de93db4..711f295eb777 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h @@ -598,6 +598,7 @@ #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 @@ -658,6 +659,8 @@ #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 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index b646ae575e6a..c04a9c76bd40 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c @@ -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); } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index b5a60a048896..ebc5fe8324ea 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c @@ -1838,6 +1838,8 @@ 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->rx_length_errors = pstats->rxlengtherror; s->tx_packets = pstats->txframecount_gb; s->tx_bytes = pstats->txoctetcount_gb; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index 03ef0f548483..1269b8ce9249 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -659,6 +659,7 @@ struct xgbe_mmc_stats { u64 rxfifooverflow; u64 rxvlanframes_gb; u64 rxwatchdogerror; + u64 rxalignmenterror; }; struct xgbe_ext_stats { -- 2.34.1