Skip to content

Commit d957b51

Browse files
Hariprasad Kelamdavem330
authored andcommitted
octeontx2-af: Don't enable Pause frames by default
Current implementation is such that 802.3x pause frames are enabled by default. As CGX and RPM blocks support PFC (priority flow control) also, instead of driver enabling one between them enable them upon request from PF or its VFs. Also add support to disable pause frames in driver unbind. 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 b4f029f commit d957b51

File tree

6 files changed

+44
-80
lines changed

6 files changed

+44
-80
lines changed

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

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -782,21 +782,8 @@ static void cgx_lmac_pause_frm_config(void *cgxd, int lmac_id, bool enable)
782782

783783
if (!is_lmac_valid(cgx, lmac_id))
784784
return;
785-
if (enable) {
786-
/* Enable receive pause frames */
787-
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
788-
cfg |= CGX_SMUX_RX_FRM_CTL_CTL_BCK;
789-
cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
790-
791-
cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
792-
cfg |= CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
793-
cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
794-
795-
/* Enable pause frames transmission */
796-
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
797-
cfg |= CGX_SMUX_TX_CTL_L2P_BP_CONV;
798-
cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
799785

786+
if (enable) {
800787
/* Set pause time and interval */
801788
cgx_write(cgx, lmac_id, CGXX_SMUX_TX_PAUSE_PKT_TIME,
802789
DEFAULT_PAUSE_TIME);
@@ -813,21 +800,21 @@ static void cgx_lmac_pause_frm_config(void *cgxd, int lmac_id, bool enable)
813800
cfg &= ~0xFFFFULL;
814801
cgx_write(cgx, lmac_id, CGXX_GMP_GMI_TX_PAUSE_PKT_INTERVAL,
815802
cfg | (DEFAULT_PAUSE_TIME / 2));
816-
} else {
817-
/* ALL pause frames received are completely ignored */
818-
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
819-
cfg &= ~CGX_SMUX_RX_FRM_CTL_CTL_BCK;
820-
cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
803+
}
821804

822-
cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
823-
cfg &= ~CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
824-
cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
805+
/* ALL pause frames received are completely ignored */
806+
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
807+
cfg &= ~CGX_SMUX_RX_FRM_CTL_CTL_BCK;
808+
cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
825809

826-
/* Disable pause frames transmission */
827-
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
828-
cfg &= ~CGX_SMUX_TX_CTL_L2P_BP_CONV;
829-
cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
830-
}
810+
cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
811+
cfg &= ~CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
812+
cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
813+
814+
/* Disable pause frames transmission */
815+
cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
816+
cfg &= ~CGX_SMUX_TX_CTL_L2P_BP_CONV;
817+
cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
831818
}
832819

833820
void cgx_lmac_ptp_config(void *cgxd, int lmac_id, bool enable)

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

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -167,26 +167,6 @@ void rpm_lmac_pause_frm_config(void *rpmd, int lmac_id, bool enable)
167167
u64 cfg;
168168

169169
if (enable) {
170-
/* Enable 802.3 pause frame mode */
171-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
172-
cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_PFC_MODE;
173-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
174-
175-
/* Enable receive pause frames */
176-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
177-
cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
178-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
179-
180-
/* Enable forward pause to TX block */
181-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
182-
cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
183-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
184-
185-
/* Enable pause frames transmission */
186-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
187-
cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
188-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
189-
190170
/* Set pause time and interval */
191171
cfg = rpm_read(rpm, lmac_id,
192172
RPMX_MTI_MAC100X_CL01_PAUSE_QUANTA);
@@ -199,23 +179,22 @@ void rpm_lmac_pause_frm_config(void *rpmd, int lmac_id, bool enable)
199179
cfg &= ~0xFFFFULL;
200180
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_CL01_QUANTA_THRESH,
201181
cfg | (RPM_DEFAULT_PAUSE_TIME / 2));
182+
}
202183

203-
} else {
204-
/* ALL pause frames received are completely ignored */
205-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
206-
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
207-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
184+
/* ALL pause frames received are completely ignored */
185+
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
186+
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
187+
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
208188

209-
/* Disable forward pause to TX block */
210-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
211-
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
212-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
189+
/* Disable forward pause to TX block */
190+
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
191+
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
192+
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
213193

214-
/* Disable pause frames transmission */
215-
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
216-
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
217-
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
218-
}
194+
/* Disable pause frames transmission */
195+
cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
196+
cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
197+
rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
219198
}
220199

221200
int rpm_get_rx_stats(void *rpmd, int lmac_id, int idx, u64 *rx_stat)

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,6 @@ static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf,
296296
struct rvu_hwinfo *hw = rvu->hw;
297297
struct sdp_node_info *sdp_info;
298298
int pkind, pf, vf, lbkid, vfid;
299-
struct mac_ops *mac_ops;
300299
u8 cgx_id, lmac_id;
301300
bool from_vf;
302301
int err;
@@ -326,13 +325,6 @@ static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf,
326325
cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, pkind);
327326
rvu_npc_set_pkind(rvu, pkind, pfvf);
328327

329-
mac_ops = get_mac_ops(rvu_cgx_pdata(cgx_id, rvu));
330-
331-
/* By default we enable pause frames */
332-
if ((pcifunc & RVU_PFVF_FUNC_MASK) == 0)
333-
mac_ops->mac_enadis_pause_frm(rvu_cgx_pdata(cgx_id,
334-
rvu),
335-
lmac_id, true, true);
336328
break;
337329
case NIX_INTF_TYPE_LBK:
338330
vf = (pcifunc & RVU_PFVF_FUNC_MASK) - 1;

drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ int otx2_config_pause_frm(struct otx2_nic *pfvf)
269269
mutex_unlock(&pfvf->mbox.lock);
270270
return err;
271271
}
272+
EXPORT_SYMBOL(otx2_config_pause_frm);
272273

273274
int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
274275
{

drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,9 +1697,6 @@ int otx2_open(struct net_device *netdev)
16971697
if (pf->linfo.link_up && !(pf->pcifunc & RVU_PFVF_FUNC_MASK))
16981698
otx2_handle_link_event(pf);
16991699

1700-
/* Restore pause frame settings */
1701-
otx2_config_pause_frm(pf);
1702-
17031700
/* Install DMAC Filters */
17041701
if (pf->flags & OTX2_FLAG_DMACFLTR_SUPPORT)
17051702
otx2_dmacflt_reinstall_flows(pf);
@@ -2782,10 +2779,6 @@ static int otx2_probe(struct pci_dev *pdev, const struct pci_device_id *id)
27822779
/* Enable link notifications */
27832780
otx2_cgx_config_linkevents(pf, true);
27842781

2785-
/* Enable pause frames by default */
2786-
pf->flags |= OTX2_FLAG_RX_PAUSE_ENABLED;
2787-
pf->flags |= OTX2_FLAG_TX_PAUSE_ENABLED;
2788-
27892782
return 0;
27902783

27912784
err_pf_sriov_init:
@@ -2929,6 +2922,14 @@ static void otx2_remove(struct pci_dev *pdev)
29292922
if (pf->flags & OTX2_FLAG_RX_TSTAMP_ENABLED)
29302923
otx2_config_hw_rx_tstamp(pf, false);
29312924

2925+
/* Disable 802.3x pause frames */
2926+
if (pf->flags & OTX2_FLAG_RX_PAUSE_ENABLED ||
2927+
(pf->flags & OTX2_FLAG_TX_PAUSE_ENABLED)) {
2928+
pf->flags &= ~OTX2_FLAG_RX_PAUSE_ENABLED;
2929+
pf->flags &= ~OTX2_FLAG_TX_PAUSE_ENABLED;
2930+
otx2_config_pause_frm(pf);
2931+
}
2932+
29322933
cancel_work_sync(&pf->reset_task);
29332934
/* Disable link notifications */
29342935
otx2_cgx_config_linkevents(pf, false);

drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -702,10 +702,6 @@ static int otx2vf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
702702
if (err)
703703
goto err_unreg_netdev;
704704

705-
/* Enable pause frames by default */
706-
vf->flags |= OTX2_FLAG_RX_PAUSE_ENABLED;
707-
vf->flags |= OTX2_FLAG_TX_PAUSE_ENABLED;
708-
709705
return 0;
710706

711707
err_unreg_netdev:
@@ -740,6 +736,14 @@ static void otx2vf_remove(struct pci_dev *pdev)
740736

741737
vf = netdev_priv(netdev);
742738

739+
/* Disable 802.3x pause frames */
740+
if (vf->flags & OTX2_FLAG_RX_PAUSE_ENABLED ||
741+
(vf->flags & OTX2_FLAG_TX_PAUSE_ENABLED)) {
742+
vf->flags &= ~OTX2_FLAG_RX_PAUSE_ENABLED;
743+
vf->flags &= ~OTX2_FLAG_TX_PAUSE_ENABLED;
744+
otx2_config_pause_frm(vf);
745+
}
746+
743747
cancel_work_sync(&vf->reset_task);
744748
otx2_unregister_dl(vf);
745749
unregister_netdev(netdev);

0 commit comments

Comments
 (0)