mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 18:08:20 +00:00
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: 84ad3642115d ("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>
This commit is contained in:
parent
d1e8884e05
commit
07cd1eb166
@ -699,6 +699,10 @@ int rpm_get_fec_stats(void *rpmd, int lmac_id, struct cgx_fec_stats_rsp *rsp)
|
||||
if (rpm->lmac_idmap[lmac_id]->link_info.fec == OTX2_FEC_NONE)
|
||||
return 0;
|
||||
|
||||
/* latched registers FCFECX_CW_HI/RSFEC_STAT_FAST_DATA_HI_CDC are common
|
||||
* for all counters. Acquire lock to ensure serialized reads
|
||||
*/
|
||||
mutex_lock(&rpm->lock);
|
||||
if (rpm->lmac_idmap[lmac_id]->link_info.fec == OTX2_FEC_BASER) {
|
||||
val_lo = rpm_read(rpm, lmac_id, RPMX_MTI_FCFECX_VL0_CCW_LO);
|
||||
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)
|
||||
}
|
||||
} else {
|
||||
/* enable RS-FEC capture */
|
||||
cfg = rpm_read(rpm, 0, RPMX_MTI_STAT_STATN_CONTROL);
|
||||
cfg = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_STATN_CONTROL);
|
||||
cfg |= RPMX_RSFEC_RX_CAPTURE | BIT(lmac_id);
|
||||
rpm_write(rpm, 0, RPMX_MTI_STAT_STATN_CONTROL, cfg);
|
||||
rpm_write(rpm, 0, RPMX_MTI_RSFEC_STAT_STATN_CONTROL, cfg);
|
||||
|
||||
val_lo = rpm_read(rpm, 0,
|
||||
RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_2);
|
||||
val_hi = rpm_read(rpm, 0, RPMX_MTI_STAT_DATA_HI_CDC);
|
||||
val_hi = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC);
|
||||
rsp->fec_corr_blks = (val_hi << 32 | val_lo);
|
||||
|
||||
val_lo = rpm_read(rpm, 0,
|
||||
RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_3);
|
||||
val_hi = rpm_read(rpm, 0, RPMX_MTI_STAT_DATA_HI_CDC);
|
||||
val_hi = rpm_read(rpm, 0, RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC);
|
||||
rsp->fec_uncorr_blks = (val_hi << 32 | val_lo);
|
||||
}
|
||||
mutex_unlock(&rpm->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -84,9 +84,11 @@
|
||||
/* FEC stats */
|
||||
#define RPMX_MTI_STAT_STATN_CONTROL 0x10018
|
||||
#define RPMX_MTI_STAT_DATA_HI_CDC 0x10038
|
||||
#define RPMX_RSFEC_RX_CAPTURE BIT_ULL(27)
|
||||
#define RPMX_RSFEC_RX_CAPTURE BIT_ULL(28)
|
||||
#define RPMX_CMD_CLEAR_RX BIT_ULL(30)
|
||||
#define RPMX_CMD_CLEAR_TX BIT_ULL(31)
|
||||
#define RPMX_MTI_RSFEC_STAT_STATN_CONTROL 0x40018
|
||||
#define RPMX_MTI_RSFEC_STAT_FAST_DATA_HI_CDC 0x40000
|
||||
#define RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_2 0x40050
|
||||
#define RPMX_MTI_RSFEC_STAT_COUNTER_CAPTURE_3 0x40058
|
||||
#define RPMX_MTI_FCFECX_VL0_CCW_LO 0x38618
|
||||
|
Loading…
x
Reference in New Issue
Block a user