Commit c3804289 authored by David S. Miller's avatar David S. Miller

Merge branch 'qed-fixes'

Sudarsana Reddy Kalluru says:

====================
qed*: dcbx fix series.

The series contains several small fixes for qed* dcbx module.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c0338aff c5e801da
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "qed_dcbx.h" #include "qed_dcbx.h"
#include "qed_hsi.h" #include "qed_hsi.h"
#include "qed_sp.h" #include "qed_sp.h"
#include "qed_sriov.h"
#ifdef CONFIG_DCB #ifdef CONFIG_DCB
#include <linux/qed/qed_eth_if.h> #include <linux/qed/qed_eth_if.h>
#endif #endif
...@@ -945,6 +946,9 @@ static int qed_dcbx_query_params(struct qed_hwfn *p_hwfn, ...@@ -945,6 +946,9 @@ static int qed_dcbx_query_params(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt; struct qed_ptt *p_ptt;
int rc; int rc;
if (IS_VF(p_hwfn->cdev))
return -EINVAL;
p_ptt = qed_ptt_acquire(p_hwfn); p_ptt = qed_ptt_acquire(p_hwfn);
if (!p_ptt) if (!p_ptt)
return -EBUSY; return -EBUSY;
...@@ -984,6 +988,7 @@ qed_dcbx_set_pfc_data(struct qed_hwfn *p_hwfn, ...@@ -984,6 +988,7 @@ qed_dcbx_set_pfc_data(struct qed_hwfn *p_hwfn,
if (p_params->pfc.prio[i]) if (p_params->pfc.prio[i])
pfc_map |= BIT(i); pfc_map |= BIT(i);
*pfc &= ~DCBX_PFC_PRI_EN_BITMAP_MASK;
*pfc |= (pfc_map << DCBX_PFC_PRI_EN_BITMAP_SHIFT); *pfc |= (pfc_map << DCBX_PFC_PRI_EN_BITMAP_SHIFT);
DP_VERBOSE(p_hwfn, QED_MSG_DCB, "pfc = 0x%x\n", *pfc); DP_VERBOSE(p_hwfn, QED_MSG_DCB, "pfc = 0x%x\n", *pfc);
...@@ -1058,24 +1063,33 @@ qed_dcbx_set_app_data(struct qed_hwfn *p_hwfn, ...@@ -1058,24 +1063,33 @@ qed_dcbx_set_app_data(struct qed_hwfn *p_hwfn,
for (i = 0; i < DCBX_MAX_APP_PROTOCOL; i++) { for (i = 0; i < DCBX_MAX_APP_PROTOCOL; i++) {
entry = &p_app->app_pri_tbl[i].entry; entry = &p_app->app_pri_tbl[i].entry;
*entry = 0;
if (ieee) { if (ieee) {
*entry &= ~DCBX_APP_SF_IEEE_MASK; *entry &= ~(DCBX_APP_SF_IEEE_MASK | DCBX_APP_SF_MASK);
switch (p_params->app_entry[i].sf_ieee) { switch (p_params->app_entry[i].sf_ieee) {
case QED_DCBX_SF_IEEE_ETHTYPE: case QED_DCBX_SF_IEEE_ETHTYPE:
*entry |= ((u32)DCBX_APP_SF_IEEE_ETHTYPE << *entry |= ((u32)DCBX_APP_SF_IEEE_ETHTYPE <<
DCBX_APP_SF_IEEE_SHIFT); DCBX_APP_SF_IEEE_SHIFT);
*entry |= ((u32)DCBX_APP_SF_ETHTYPE <<
DCBX_APP_SF_SHIFT);
break; break;
case QED_DCBX_SF_IEEE_TCP_PORT: case QED_DCBX_SF_IEEE_TCP_PORT:
*entry |= ((u32)DCBX_APP_SF_IEEE_TCP_PORT << *entry |= ((u32)DCBX_APP_SF_IEEE_TCP_PORT <<
DCBX_APP_SF_IEEE_SHIFT); DCBX_APP_SF_IEEE_SHIFT);
*entry |= ((u32)DCBX_APP_SF_PORT <<
DCBX_APP_SF_SHIFT);
break; break;
case QED_DCBX_SF_IEEE_UDP_PORT: case QED_DCBX_SF_IEEE_UDP_PORT:
*entry |= ((u32)DCBX_APP_SF_IEEE_UDP_PORT << *entry |= ((u32)DCBX_APP_SF_IEEE_UDP_PORT <<
DCBX_APP_SF_IEEE_SHIFT); DCBX_APP_SF_IEEE_SHIFT);
*entry |= ((u32)DCBX_APP_SF_PORT <<
DCBX_APP_SF_SHIFT);
break; break;
case QED_DCBX_SF_IEEE_TCP_UDP_PORT: case QED_DCBX_SF_IEEE_TCP_UDP_PORT:
*entry |= ((u32)DCBX_APP_SF_IEEE_TCP_UDP_PORT << *entry |= ((u32)DCBX_APP_SF_IEEE_TCP_UDP_PORT <<
DCBX_APP_SF_IEEE_SHIFT); DCBX_APP_SF_IEEE_SHIFT);
*entry |= ((u32)DCBX_APP_SF_PORT <<
DCBX_APP_SF_SHIFT);
break; break;
} }
} else { } else {
...@@ -1181,6 +1195,7 @@ int qed_dcbx_get_config_params(struct qed_hwfn *p_hwfn, ...@@ -1181,6 +1195,7 @@ int qed_dcbx_get_config_params(struct qed_hwfn *p_hwfn,
return -ENOMEM; return -ENOMEM;
} }
memset(dcbx_info, 0, sizeof(*dcbx_info));
rc = qed_dcbx_query_params(p_hwfn, dcbx_info, QED_DCBX_OPERATIONAL_MIB); rc = qed_dcbx_query_params(p_hwfn, dcbx_info, QED_DCBX_OPERATIONAL_MIB);
if (rc) { if (rc) {
kfree(dcbx_info); kfree(dcbx_info);
...@@ -1218,6 +1233,7 @@ static struct qed_dcbx_get *qed_dcbnl_get_dcbx(struct qed_hwfn *hwfn, ...@@ -1218,6 +1233,7 @@ static struct qed_dcbx_get *qed_dcbnl_get_dcbx(struct qed_hwfn *hwfn,
return NULL; return NULL;
} }
memset(dcbx_info, 0, sizeof(*dcbx_info));
if (qed_dcbx_query_params(hwfn, dcbx_info, type)) { if (qed_dcbx_query_params(hwfn, dcbx_info, type)) {
kfree(dcbx_info); kfree(dcbx_info);
return NULL; return NULL;
......
...@@ -2520,7 +2520,8 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level, ...@@ -2520,7 +2520,8 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level,
edev->ops->register_ops(cdev, &qede_ll_ops, edev); edev->ops->register_ops(cdev, &qede_ll_ops, edev);
#ifdef CONFIG_DCB #ifdef CONFIG_DCB
qede_set_dcbnl_ops(edev->ndev); if (!IS_VF(edev))
qede_set_dcbnl_ops(edev->ndev);
#endif #endif
INIT_DELAYED_WORK(&edev->sp_task, qede_sp_task); INIT_DELAYED_WORK(&edev->sp_task, qede_sp_task);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment