Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eaef62a4 authored by Quan Nguyen's avatar Quan Nguyen Committed by David S. Miller
Browse files

drivers: net: xgene: Add frame recovered statistics counter for errata 10GE_8/ENET_11



This patch adds statistic counter for frames recovered from HW errata
10GE_8 and ENET_11:
"HW reports Length error for valid 64 byte frames with len <46 bytes".

Signed-off-by: default avatarQuan Nguyen <qnguyen@apm.com>
Signed-off-by: default avatarIyappan Subramanian <isubramanian@apm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a844e7d1
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ static const struct xgene_gstrings_stats gstrings_extd_stats[] = {
	XGENE_EXTD_STAT(rx_unk_opcode_cntr, RXUO, 16),
	XGENE_EXTD_STAT(rx_align_err_cntr, RALN, 16),
	XGENE_EXTD_STAT(rx_frame_len_err_cntr, RFLR, 16),
	XGENE_EXTD_STAT(rx_frame_len_err_recov_cntr, DUMP, 0),
	XGENE_EXTD_STAT(rx_code_err_cntr, RCDE, 16),
	XGENE_EXTD_STAT(rx_carrier_sense_err_cntr, RCSE, 16),
	XGENE_EXTD_STAT(rx_undersize_pkt_cntr, RUND, 16),
@@ -95,8 +96,9 @@ static const struct xgene_gstrings_stats gstrings_extd_stats[] = {

#define XGENE_STATS_LEN		ARRAY_SIZE(gstrings_stats)
#define XGENE_EXTD_STATS_LEN	ARRAY_SIZE(gstrings_extd_stats)
#define RX_OVERRUN_IDX		22
#define TX_UNDERRUN_IDX		41
#define FALSE_RFLR_IDX		15
#define RX_OVERRUN_IDX		23
#define TX_UNDERRUN_IDX		42

static void xgene_get_drvinfo(struct net_device *ndev,
			      struct ethtool_drvinfo *info)
@@ -229,6 +231,9 @@ static void xgene_get_extd_stats(struct xgene_enet_pdata *pdata)
	pdata->mac_ops->get_drop_cnt(pdata, &rx_drop, &tx_drop);
	pdata->extd_stats[RX_OVERRUN_IDX] += rx_drop;
	pdata->extd_stats[TX_UNDERRUN_IDX] += tx_drop;

	/* Errata 10GE_8 -  Update Frame recovered from Errata 10GE_8/ENET_11 */
	pdata->extd_stats[FALSE_RFLR_IDX] = pdata->false_rflr;
}

int xgene_extd_stats_init(struct xgene_enet_pdata *pdata)
+2 −0
Original line number Diff line number Diff line
@@ -712,6 +712,8 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
			xgene_enet_parse_error(rx_ring, status);
			rx_ring->rx_dropped++;
			goto out;
		} else {
			pdata->false_rflr++;
		}
	}

+1 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ struct xgene_enet_pdata {
	enum xgene_enet_rm rm;
	struct xgene_enet_cle cle;
	u64 *extd_stats;
	u64 false_rflr;
	spinlock_t stats_lock; /* statistics lock */
	const struct xgene_mac_ops *mac_ops;
	spinlock_t mac_lock; /* mac lock */