Merge branch 'fix-pfc-related-issues'
Suman Ghosh says: ==================== Fix PFC related issues This patchset fixes multiple PFC related issues related to Octeon. Patch #1: octeontx2-pf: Fix PFC TX scheduler free Patch #2: octeontx2-af: CN10KB: fix PFC configuration Patch #3: octeonxt2-pf: Fix backpressure config for multiple PFC priorities to work simultaneously ==================== Link: https://lore.kernel.org/r/20230824081032.436432-1-sumang@marvell.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
ac975af5a7
@ -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;
|
||||
|
@ -804,6 +804,7 @@ void otx2_txschq_free_one(struct otx2_nic *pfvf, u16 lvl, u16 schq)
|
||||
|
||||
mutex_unlock(&pfvf->mbox.lock);
|
||||
}
|
||||
EXPORT_SYMBOL(otx2_txschq_free_one);
|
||||
|
||||
void otx2_txschq_stop(struct otx2_nic *pfvf)
|
||||
{
|
||||
|
@ -70,7 +70,7 @@ static int otx2_pfc_txschq_alloc_one(struct otx2_nic *pfvf, u8 prio)
|
||||
* link config level. These rest of the scheduler can be
|
||||
* same as hw.txschq_list.
|
||||
*/
|
||||
for (lvl = 0; lvl < pfvf->hw.txschq_link_cfg_lvl; lvl++)
|
||||
for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++)
|
||||
req->schq[lvl] = 1;
|
||||
|
||||
rc = otx2_sync_mbox_msg(&pfvf->mbox);
|
||||
@ -83,7 +83,7 @@ static int otx2_pfc_txschq_alloc_one(struct otx2_nic *pfvf, u8 prio)
|
||||
return PTR_ERR(rsp);
|
||||
|
||||
/* Setup transmit scheduler list */
|
||||
for (lvl = 0; lvl < pfvf->hw.txschq_link_cfg_lvl; lvl++) {
|
||||
for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++) {
|
||||
if (!rsp->schq[lvl])
|
||||
return -ENOSPC;
|
||||
|
||||
@ -125,19 +125,12 @@ int otx2_pfc_txschq_alloc(struct otx2_nic *pfvf)
|
||||
|
||||
static int otx2_pfc_txschq_stop_one(struct otx2_nic *pfvf, u8 prio)
|
||||
{
|
||||
struct nix_txsch_free_req *free_req;
|
||||
int lvl;
|
||||
|
||||
mutex_lock(&pfvf->mbox.lock);
|
||||
/* free PFC TLx nodes */
|
||||
free_req = otx2_mbox_alloc_msg_nix_txsch_free(&pfvf->mbox);
|
||||
if (!free_req) {
|
||||
mutex_unlock(&pfvf->mbox.lock);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
free_req->flags = TXSCHQ_FREE_ALL;
|
||||
otx2_sync_mbox_msg(&pfvf->mbox);
|
||||
mutex_unlock(&pfvf->mbox.lock);
|
||||
for (lvl = 0; lvl <= pfvf->hw.txschq_link_cfg_lvl; lvl++)
|
||||
otx2_txschq_free_one(pfvf, lvl,
|
||||
pfvf->pfc_schq_list[lvl][prio]);
|
||||
|
||||
pfvf->pfc_alloc_status[prio] = false;
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user