OSDN Git Service

octeontx2-af: CN10KB: fix PFC configuration
authorHariprasad Kelam <hkelam@marvell.com>
Thu, 24 Aug 2023 08:10:31 +0000 (13:40 +0530)
committerJakub Kicinski <kuba@kernel.org>
Sat, 26 Aug 2023 01:48:39 +0000 (18:48 -0700)
Suppose user has enabled pfc with prio 0,1 on a PF netdev(eth0)
dcb pfc set dev eth0 prio-pfc o:on 1:on
later user enabled pfc priorities 2 and 3 on the VF interface(eth1)
dcb pfc set dev eth1 prio-pfc 2:on 3:on

Instead of enabling pfc on all priorities (0..3), the driver only
enables on priorities 2,3. This patch corrects the issue by using
the proper CSR address.

Fixes: b9d0fedc6234 ("octeontx2-af: cn10kb: Add RPM_USX MAC support")
Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230824081032.436432-3-sumang@marvell.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/octeontx2/af/rpm.c

index b4fcb20..af21e20 100644 (file)
@@ -355,8 +355,8 @@ int rpm_lmac_enadis_pause_frm(void *rpmd, int lmac_id, u8 tx_pause,
 
 void rpm_lmac_pause_frm_config(void *rpmd, int lmac_id, bool enable)
 {
+       u64 cfg, pfc_class_mask_cfg;
        rpm_t *rpm = rpmd;
-       u64 cfg;
 
        /* ALL pause frames received are completely ignored */
        cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
@@ -380,9 +380,11 @@ void rpm_lmac_pause_frm_config(void *rpmd, int lmac_id, bool enable)
                rpm_write(rpm, 0, RPMX_CMR_CHAN_MSK_OR, ~0ULL);
 
        /* Disable all PFC classes */
-       cfg = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
+       pfc_class_mask_cfg = is_dev_rpm2(rpm) ? RPM2_CMRX_PRT_CBFC_CTL :
+                                               RPMX_CMRX_PRT_CBFC_CTL;
+       cfg = rpm_read(rpm, lmac_id, pfc_class_mask_cfg);
        cfg = FIELD_SET(RPM_PFC_CLASS_MASK, 0, cfg);
-       rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, cfg);
+       rpm_write(rpm, lmac_id, pfc_class_mask_cfg, cfg);
 }
 
 int rpm_get_rx_stats(void *rpmd, int lmac_id, int idx, u64 *rx_stat)
@@ -605,8 +607,11 @@ int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 p
        if (!is_lmac_valid(rpm, lmac_id))
                return -ENODEV;
 
+       pfc_class_mask_cfg = is_dev_rpm2(rpm) ? RPM2_CMRX_PRT_CBFC_CTL :
+                                               RPMX_CMRX_PRT_CBFC_CTL;
+
        cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-       class_en = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
+       class_en = rpm_read(rpm, lmac_id, pfc_class_mask_cfg);
        pfc_en |= FIELD_GET(RPM_PFC_CLASS_MASK, class_en);
 
        if (rx_pause) {
@@ -635,10 +640,6 @@ int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 p
                cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_PFC_MODE;
 
        rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
-
-       pfc_class_mask_cfg = is_dev_rpm2(rpm) ? RPM2_CMRX_PRT_CBFC_CTL :
-                                               RPMX_CMRX_PRT_CBFC_CTL;
-
        rpm_write(rpm, lmac_id, pfc_class_mask_cfg, class_en);
 
        return 0;