octeontx2-af: RPM: fix stale FCFEC counters
authorHariprasad Kelam <hkelam@marvell.com>
Fri, 22 Nov 2024 16:20:34 +0000 (21:50 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 26 Nov 2024 11:09:40 +0000 (12:09 +0100)
The corrected words register(FCFECX_VL0_CCW_LO)/Uncorrected words
register (FCFECX_VL0_NCCW_LO) of FCFEC counter has different LMAC
offset which needs to be accessed differently.

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>
drivers/net/ethernet/marvell/octeontx2/af/rpm.c
drivers/net/ethernet/marvell/octeontx2/af/rpm.h

index 70629f9..e97fcc5 100644 (file)
@@ -704,27 +704,27 @@ int rpm_get_fec_stats(void *rpmd, int lmac_id, struct cgx_fec_stats_rsp *rsp)
         */
        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);
+               val_lo = rpm_read(rpm, 0, RPMX_MTI_FCFECX_VL0_CCW_LO(lmac_id));
+               val_hi = rpm_read(rpm, 0, RPMX_MTI_FCFECX_CW_HI(lmac_id));
                rsp->fec_corr_blks = (val_hi << 16 | val_lo);
 
-               val_lo = rpm_read(rpm, lmac_id, RPMX_MTI_FCFECX_VL0_NCCW_LO);
-               val_hi = rpm_read(rpm, lmac_id, RPMX_MTI_FCFECX_CW_HI);
+               val_lo = rpm_read(rpm, 0, RPMX_MTI_FCFECX_VL0_NCCW_LO(lmac_id));
+               val_hi = rpm_read(rpm, 0, RPMX_MTI_FCFECX_CW_HI(lmac_id));
                rsp->fec_uncorr_blks = (val_hi << 16 | val_lo);
 
                /* 50G uses 2 Physical serdes lines */
                if (rpm->lmac_idmap[lmac_id]->link_info.lmac_type_id ==
                    LMAC_MODE_50G_R) {
-                       val_lo = rpm_read(rpm, lmac_id,
-                                         RPMX_MTI_FCFECX_VL1_CCW_LO);
-                       val_hi = rpm_read(rpm, lmac_id,
-                                         RPMX_MTI_FCFECX_CW_HI);
+                       val_lo = rpm_read(rpm, 0,
+                                         RPMX_MTI_FCFECX_VL1_CCW_LO(lmac_id));
+                       val_hi = rpm_read(rpm, 0,
+                                         RPMX_MTI_FCFECX_CW_HI(lmac_id));
                        rsp->fec_corr_blks += (val_hi << 16 | val_lo);
 
-                       val_lo = rpm_read(rpm, lmac_id,
-                                         RPMX_MTI_FCFECX_VL1_NCCW_LO);
-                       val_hi = rpm_read(rpm, lmac_id,
-                                         RPMX_MTI_FCFECX_CW_HI);
+                       val_lo = rpm_read(rpm, 0,
+                                         RPMX_MTI_FCFECX_VL1_NCCW_LO(lmac_id));
+                       val_hi = rpm_read(rpm, 0,
+                                         RPMX_MTI_FCFECX_CW_HI(lmac_id));
                        rsp->fec_uncorr_blks += (val_hi << 16 | val_lo);
                }
        } else {
index a5773fb..5194fec 100644 (file)
 #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
-#define RPMX_MTI_FCFECX_VL0_NCCW_LO                    0x38620
-#define RPMX_MTI_FCFECX_VL1_CCW_LO                     0x38628
-#define RPMX_MTI_FCFECX_VL1_NCCW_LO                    0x38630
-#define RPMX_MTI_FCFECX_CW_HI                          0x38638
+#define RPMX_MTI_FCFECX_VL0_CCW_LO(a)                  (0x38618 + ((a) * 0x40))
+#define RPMX_MTI_FCFECX_VL0_NCCW_LO(a)                 (0x38620 + ((a) * 0x40))
+#define RPMX_MTI_FCFECX_VL1_CCW_LO(a)                  (0x38628 + ((a) * 0x40))
+#define RPMX_MTI_FCFECX_VL1_NCCW_LO(a)                 (0x38630 + ((a) * 0x40))
+#define RPMX_MTI_FCFECX_CW_HI(a)                       (0x38638 + ((a) * 0x40))
 
 /* CN10KB CSR Declaration */
 #define  RPM2_CMRX_SW_INT                              0x1b0