Lines Matching defs:pfvf

10 static int otx2_check_pfc_config(struct otx2_nic *pfvf)
12 u8 tx_queues = pfvf->hw.tx_queues, prio;
13 u8 pfc_en = pfvf->pfc_en;
18 dev_warn(pfvf->dev,
28 int otx2_pfc_txschq_config(struct otx2_nic *pfvf)
33 pfc_en = pfvf->pfc_en;
40 if (!pfc_bit_set || !pfvf->pfc_alloc_status[prio])
45 err = otx2_txschq_config(pfvf, lvl, prio, true);
47 dev_err(pfvf->dev,
58 static int otx2_pfc_txschq_alloc_one(struct otx2_nic *pfvf, u8 prio)
65 req = otx2_mbox_alloc_msg_nix_txsch_alloc(&pfvf->mbox);
73 for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++)
76 rc = otx2_sync_mbox_msg(&pfvf->mbox);
81 otx2_mbox_get_rsp(&pfvf->mbox.mbox, 0, &req->hdr);
86 for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++) {
90 pfvf->pfc_schq_list[lvl][prio] = rsp->schq_list[lvl][0];
97 pfvf->pfc_schq_list[lvl][prio] = pfvf->hw.txschq_list[lvl][0];
99 pfvf->pfc_alloc_status[prio] = true;
103 int otx2_pfc_txschq_alloc(struct otx2_nic *pfvf)
105 u8 pfc_en = pfvf->pfc_en;
112 if (!pfc_bit_set || pfvf->pfc_alloc_status[prio])
116 err = otx2_pfc_txschq_alloc_one(pfvf, prio);
118 dev_err(pfvf->dev, "%s failed to allocate PFC TX schedulers\n", __func__);
126 static int otx2_pfc_txschq_stop_one(struct otx2_nic *pfvf, u8 prio)
131 for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++)
132 otx2_txschq_free_one(pfvf, lvl,
133 pfvf->pfc_schq_list[lvl][prio]);
135 pfvf->pfc_alloc_status[prio] = false;
139 static int otx2_pfc_update_sq_smq_mapping(struct otx2_nic *pfvf, int prio)
142 struct net_device *dev = pfvf->netdev;
147 if (pfvf->pfc_alloc_status[prio])
148 netif_tx_stop_all_queues(pfvf->netdev);
153 if (test_bit(CN10K_LMTST, &pfvf->hw.cap_flag)) {
154 cn10k_sq_aq = otx2_mbox_alloc_msg_nix_cn10k_aq_enq(&pfvf->mbox);
167 cn10k_sq_aq->sq.smq = otx2_get_smq_idx(pfvf, prio);
169 sq_aq = otx2_mbox_alloc_msg_nix_aq_enq(&pfvf->mbox);
182 sq_aq->sq.smq = otx2_get_smq_idx(pfvf, prio);
185 otx2_sync_mbox_msg(&pfvf->mbox);
188 if (pfvf->pfc_alloc_status[prio])
189 netif_tx_start_all_queues(pfvf->netdev);
197 int otx2_pfc_txschq_update(struct otx2_nic *pfvf)
199 bool if_up = netif_running(pfvf->netdev);
200 u8 pfc_en = pfvf->pfc_en, pfc_bit_set;
201 struct mbox *mbox = &pfvf->mbox;
209 if (!pfc_bit_set && pfvf->pfc_alloc_status[prio]) {
212 netif_tx_stop_all_queues(pfvf->netdev);
214 otx2_smq_flush(pfvf, pfvf->pfc_schq_list[NIX_TXSCH_LVL_SMQ][prio]);
216 netif_tx_start_all_queues(pfvf->netdev);
219 err = otx2_pfc_txschq_stop_one(pfvf, prio);
221 dev_err(pfvf->dev,
234 if (!pfc_bit_set || pfvf->pfc_alloc_status[prio])
238 err = otx2_pfc_txschq_alloc_one(pfvf, prio);
241 dev_err(pfvf->dev,
248 err = otx2_pfc_update_sq_smq_mapping(pfvf, prio);
251 dev_err(pfvf->dev, "%s failed PFC Tx schq sq:%d mapping", __func__, prio);
256 err = otx2_pfc_txschq_config(pfvf);
264 int otx2_pfc_txschq_stop(struct otx2_nic *pfvf)
269 pfc_en = pfvf->pfc_en;
272 if (!pfc_bit_set || !pfvf->pfc_alloc_status[prio])
276 err = otx2_pfc_txschq_stop_one(pfvf, prio);
278 dev_err(pfvf->dev, "%s failed to stop PFC TX schedulers\n", __func__);
286 int otx2_config_priority_flow_ctrl(struct otx2_nic *pfvf)
292 if (is_otx2_lbkvf(pfvf->pdev))
295 mutex_lock(&pfvf->mbox.lock);
296 req = otx2_mbox_alloc_msg_cgx_prio_flow_ctrl_cfg(&pfvf->mbox);
302 if (pfvf->pfc_en) {
309 req->pfc_en = pfvf->pfc_en;
311 if (!otx2_sync_mbox_msg(&pfvf->mbox)) {
313 otx2_mbox_get_rsp(&pfvf->mbox.mbox, 0, &req->hdr);
315 dev_warn(pfvf->dev,
321 mutex_unlock(&pfvf->mbox.lock);
325 void otx2_update_bpid_in_rqctx(struct otx2_nic *pfvf, int vlan_prio, int qidx,
328 bool if_up = netif_running(pfvf->netdev);
333 if (pfvf->queue_to_pfc_map[qidx] && pfc_enable) {
334 dev_warn(pfvf->dev,
336 pfvf->queue_to_pfc_map[qidx], qidx);
341 netif_tx_stop_all_queues(pfvf->netdev);
342 netif_carrier_off(pfvf->netdev);
345 pfvf->queue_to_pfc_map[qidx] = vlan_prio;
347 aq = otx2_mbox_alloc_msg_nix_aq_enq(&pfvf->mbox);
353 aq->cq.bpid = pfvf->bpid[vlan_prio];
361 otx2_sync_mbox_msg(&pfvf->mbox);
363 npa_aq = otx2_mbox_alloc_msg_npa_aq_enq(&pfvf->mbox);
368 npa_aq->aura.nix0_bpid = pfvf->bpid[vlan_prio];
375 otx2_sync_mbox_msg(&pfvf->mbox);
379 netif_carrier_on(pfvf->netdev);
380 netif_tx_start_all_queues(pfvf->netdev);
384 dev_warn(pfvf->dev,
391 struct otx2_nic *pfvf = netdev_priv(dev);
394 pfc->pfc_en = pfvf->pfc_en;
401 struct otx2_nic *pfvf = netdev_priv(dev);
405 old_pfc_en = pfvf->pfc_en;
406 pfvf->pfc_en = pfc->pfc_en;
408 if (pfvf->hw.tx_queues >= NIX_PF_PFC_PRIO_MAX)
414 err = otx2_check_pfc_config(pfvf);
416 pfvf->pfc_en = old_pfc_en;
421 err = otx2_config_priority_flow_ctrl(pfvf);
423 pfvf->pfc_en = old_pfc_en;
429 otx2_nix_config_bp(pfvf, true);
431 err = otx2_pfc_txschq_update(pfvf);
434 otx2_nix_config_bp(pfvf, false);
436 otx2_pfc_txschq_stop(pfvf);
437 pfvf->pfc_en = old_pfc_en;
438 otx2_config_priority_flow_ctrl(pfvf);
439 dev_err(pfvf->dev, "%s failed to update TX schedulers\n", __func__);
465 struct otx2_nic *pfvf = netdev_priv(dev);
467 pfvf->queue_to_pfc_map = devm_kzalloc(pfvf->dev, pfvf->hw.rx_queues,
469 if (!pfvf->queue_to_pfc_map)