Skip to content

Commit 07cd1eb

Browse files
Hariprasad KelamPaolo Abeni
authored andcommitted
octeontx2-af: RPM: fix stale RSFEC counters
The earlier patch sets the 'Stats control register' for RPM receive/transmit statistics instead of RSFEC statistics, causing the driver to return stale FEC counters. Fixes: 84ad364 ("octeontx2-af: Add FEC stats for RPM/RPM_USX block") Signed-off-by: Hariprasad Kelam <hkelam@marvell.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent d1e8884 commit 07cd1eb

File tree

2 files changed

+12
-5
lines changed
  • drivers/net/ethernet/marvell/octeontx2/af

2 files changed

+12
-5
lines changed

drivers/net/ethernet/marvell/octeontx2/af/rpm.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,10 @@ int rpm_get_fec_stats(void *rpmd, int lmac_id, struct cgx_fec_stats_rsp *rsp)
699699
if (rpm->lmac_idmap[lmac_id]->link_info.fec == OTX2_FEC_NONE)
700700
return 0;
701701

702+
/* latched registers FCFECX_CW_HI/RSFEC_STAT_FAST_DATA_HI_CDC are common
703+
* for all counters. Acquire lock to ensure serialized reads
704+
*/
705+
mutex_lock(&rpm->lock);
702706
if (rpm->lmac_idmap[lmac_id]->link_info.fec == OTX2_FEC_BASER) {
703707
val_lo = rpm_read(rpm, lmac_id, RPMX_MTI_FCFECX_VL0_CCW_LO);
704708
val_hi = rpm_read(rpm, lmac_id, RPMX_MTI_FCFECX_CW_HI);
@@ -725,20 +729,21 @@ int rpm_get_fec_stats(void *rpmd, int lmac_id, struct cgx_fec_stats_rsp *rsp)
725729
}
726730
} else {
727731
/* enable RS-FEC capture */
728-
cfg = rpm_read(rpm, 0, RPMX_MTI_STAT_STATN_CONTROL);
732+
cfg = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_STATN_CONTROL);
729733
cfg |= RPMX_RSFEC_RX_CAPTURE | BIT(lmac_id);
730-
rpm_write(rpm, 0, RPMX_MTI_STAT_STATN_CONTROL, cfg);
734+
rpm_write(rpm, 0, RPMX_MTI_RSFEC_STAT_STATN_CONTROL, cfg);
731735

732736
val_lo = rpm_read(rpm, 0,
733737
RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_2);
734-
val_hi = rpm_read(rpm, 0, RPMX_MTI_STAT_DATA_HI_CDC);
738+
val_hi = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC);
735739
rsp->fec_corr_blks = (val_hi << 32 | val_lo);
736740

737741
val_lo = rpm_read(rpm, 0,
738742
RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_3);
739-
val_hi = rpm_read(rpm, 0, RPMX_MTI_STAT_DATA_HI_CDC);
743+
val_hi = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC);
740744
rsp->fec_uncorr_blks = (val_hi << 32 | val_lo);
741745
}
746+
mutex_unlock(&rpm->lock);
742747

743748
return 0;
744749
}

drivers/net/ethernet/marvell/octeontx2/af/rpm.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,11 @@
8484
/* FEC stats */
8585
#define RPMX_MTI_STAT_STATN_CONTROL 0x10018
8686
#define RPMX_MTI_STAT_DATA_HI_CDC 0x10038
87-
#define RPMX_RSFEC_RX_CAPTURE BIT_ULL(27)
87+
#define RPMX_RSFEC_RX_CAPTURE BIT_ULL(28)
8888
#define RPMX_CMD_CLEAR_RX BIT_ULL(30)
8989
#define RPMX_CMD_CLEAR_TX BIT_ULL(31)
90+
#define RPMX_MTI_RSFEC_STAT_STATN_CONTROL 0x40018
91+
#define RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC 0x40000
9092
#define RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_2 0x40050
9193
#define RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_3 0x40058
9294
#define RPMX_MTI_FCFECX_VL0_CCW_LO 0x38618

0 commit comments

Comments
 (0)