Skip to content

Commit 8e15145

Browse files
Hariprasad Kelamdavem330
authored andcommitted
octeontx2-af: Don't reset previous pfc config
Current implementation is such that driver first resets the existing PFC config before applying new pfc configuration. This creates a problem like once PF or VFs requests PFC config previous pfc config by other PFVfs is getting reset. This patch fixes the problem by removing unnecessary resetting of PFC config. Also configure Pause quanta value to smaller as current value is too high. Signed-off-by: Hariprasad Kelam <[email protected]> Signed-off-by: Sunil Kovvuri Goutham <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9d899db commit 8e15145

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,11 @@ static void cgx_lmac_pause_frm_config(void *cgxd, int lmac_id, bool enable)
847847
cfg |= CGX_CMR_RX_OVR_BP_EN(lmac_id);
848848
cfg &= ~CGX_CMR_RX_OVR_BP_BP(lmac_id);
849849
cgx_write(cgx, 0, CGXX_CMR_RX_OVR_BP, cfg);
850+
851+
/* Disable all PFC classes by default */
852+
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_CBFC_CTL);
853+
cfg = FIELD_SET(CGX_PFC_CLASS_MASK, 0, cfg);
854+
cgx_write(cgx, lmac_id, CGXX_SMUX_CBFC_CTL, cfg);
850855
}
851856

852857
int verify_lmac_fc_cfg(void *cgxd, int lmac_id, u8 tx_pause, u8 rx_pause,
@@ -899,6 +904,7 @@ int cgx_lmac_pfc_config(void *cgxd, int lmac_id, u8 tx_pause,
899904
return 0;
900905

901906
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_CBFC_CTL);
907+
pfc_en |= FIELD_GET(CGX_PFC_CLASS_MASK, cfg);
902908

903909
if (rx_pause) {
904910
cfg |= (CGXX_SMUX_CBFC_CTL_RX_EN |
@@ -910,12 +916,13 @@ int cgx_lmac_pfc_config(void *cgxd, int lmac_id, u8 tx_pause,
910916
CGXX_SMUX_CBFC_CTL_DRP_EN);
911917
}
912918

913-
if (tx_pause)
919+
if (tx_pause) {
914920
cfg |= CGXX_SMUX_CBFC_CTL_TX_EN;
915-
else
921+
cfg = FIELD_SET(CGX_PFC_CLASS_MASK, pfc_en, cfg);
922+
} else {
916923
cfg &= ~CGXX_SMUX_CBFC_CTL_TX_EN;
917-
918-
cfg = FIELD_SET(CGX_PFC_CLASS_MASK, pfc_en, cfg);
924+
cfg = FIELD_SET(CGX_PFC_CLASS_MASK, 0, cfg);
925+
}
919926

920927
cgx_write(cgx, lmac_id, CGXX_SMUX_CBFC_CTL, cfg);
921928

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ void rpm_lmac_pause_frm_config(void *rpmd, int lmac_id, bool enable)
276276
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
277277
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
278278
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
279+
280+
/* Disable all PFC classes */
281+
cfg = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
282+
cfg = FIELD_SET(RPM_PFC_CLASS_MASK, 0, cfg);
283+
rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, cfg);
279284
}
280285

281286
int rpm_get_rx_stats(void *rpmd, int lmac_id, int idx, u64 *rx_stat)
@@ -387,15 +392,14 @@ void rpm_lmac_ptp_config(void *rpmd, int lmac_id, bool enable)
387392
int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 pfc_en)
388393
{
389394
rpm_t *rpm = rpmd;
390-
u64 cfg;
395+
u64 cfg, class_en;
391396

392397
if (!is_lmac_valid(rpm, lmac_id))
393398
return -ENODEV;
394399

395-
/* reset PFC class quanta and threshold */
396-
rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, 0xffff, false);
397-
398400
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
401+
class_en = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
402+
pfc_en |= FIELD_GET(RPM_PFC_CLASS_MASK, class_en);
399403

400404
if (rx_pause) {
401405
cfg &= ~(RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE |
@@ -410,9 +414,11 @@ int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 p
410414
if (tx_pause) {
411415
rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, pfc_en, true);
412416
cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
417+
class_en = FIELD_SET(RPM_PFC_CLASS_MASK, pfc_en, class_en);
413418
} else {
414419
rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, 0xfff, false);
415420
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
421+
class_en = FIELD_SET(RPM_PFC_CLASS_MASK, 0, class_en);
416422
}
417423

418424
if (!rx_pause && !tx_pause)
@@ -422,9 +428,7 @@ int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 p
422428

423429
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
424430

425-
cfg = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
426-
cfg = FIELD_SET(RPM_PFC_CLASS_MASK, pfc_en, cfg);
427-
rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, cfg);
431+
rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, class_en);
428432

429433
return 0;
430434
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
#define RPMX_MTI_MAC100X_CL1011_QUANTA_THRESH 0x8130
4949
#define RPMX_MTI_MAC100X_CL1213_QUANTA_THRESH 0x8138
5050
#define RPMX_MTI_MAC100X_CL1415_QUANTA_THRESH 0x8140
51-
#define RPM_DEFAULT_PAUSE_TIME 0xFFFF
5251
#define RPMX_CMR_RX_OVR_BP 0x4120
5352
#define RPMX_CMR_RX_OVR_BP_EN(x) BIT_ULL((x) + 8)
5453
#define RPMX_CMR_RX_OVR_BP_BP(x) BIT_ULL((x) + 4)
@@ -70,7 +69,7 @@
7069
#define RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_FWD BIT_ULL(7)
7170
#define RPMX_MTI_MAC100X_CL01_PAUSE_QUANTA 0x80A8
7271
#define RPMX_MTI_MAC100X_CL89_PAUSE_QUANTA 0x8108
73-
#define RPM_DEFAULT_PAUSE_TIME 0xFFFF
72+
#define RPM_DEFAULT_PAUSE_TIME 0x7FF
7473

7574
/* Function Declarations */
7675
int rpm_get_nr_lmacs(void *rpmd);

0 commit comments

Comments
 (0)