@@ -64,6 +64,7 @@ struct xgene_gstrings_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 @@ struct xgene_gstrings_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)
@@ -230,6 +232,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)
@@ -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++;
}
}
@@ -225,6 +225,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 */