Skip to content

Commit cac6f69

Browse files
Sudarsana Reddy Kallurudavem330
authored andcommitted
qed: Add support for Unified Fabric Port.
This patch adds driver changes for supporting the Unified Fabric Port (UFP). This is a new paritioning mode wherein MFW provides the set of parameters to be used by the device such as traffic class, outer-vlan tag value, priority type etc. Drivers receives this info via notifications from mfw and configures the hardware accordingly. Signed-off-by: Sudarsana Reddy Kalluru <[email protected]> Signed-off-by: Ariel Elior <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b51bdfb commit cac6f69

File tree

14 files changed

+283
-27
lines changed

14 files changed

+283
-27
lines changed

drivers/net/ethernet/qlogic/qed/qed.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,24 @@ enum qed_mf_mode_bit {
474474
QED_MF_DSCP_TO_TC_MAP,
475475
};
476476

477+
enum qed_ufp_mode {
478+
QED_UFP_MODE_ETS,
479+
QED_UFP_MODE_VNIC_BW,
480+
QED_UFP_MODE_UNKNOWN
481+
};
482+
483+
enum qed_ufp_pri_type {
484+
QED_UFP_PRI_OS,
485+
QED_UFP_PRI_VNIC,
486+
QED_UFP_PRI_UNKNOWN
487+
};
488+
489+
struct qed_ufp_info {
490+
enum qed_ufp_pri_type pri_type;
491+
enum qed_ufp_mode mode;
492+
u8 tc;
493+
};
494+
477495
enum BAR_ID {
478496
BAR_ID_0, /* used for GRC */
479497
BAR_ID_1 /* Used for doorbells */
@@ -582,6 +600,8 @@ struct qed_hwfn {
582600

583601
struct qed_dcbx_info *p_dcbx_info;
584602

603+
struct qed_ufp_info ufp_info;
604+
585605
struct qed_dmae_info dmae_info;
586606

587607
/* QM init */

drivers/net/ethernet/qlogic/qed/qed_dcbx.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,16 @@ qed_dcbx_process_tlv(struct qed_hwfn *p_hwfn,
274274
u32 pri_tc_tbl, int count, u8 dcbx_version)
275275
{
276276
enum dcbx_protocol_type type;
277+
bool enable, ieee, eth_tlv;
277278
u8 tc, priority_map;
278-
bool enable, ieee;
279279
u16 protocol_id;
280280
int priority;
281281
int i;
282282

283283
DP_VERBOSE(p_hwfn, QED_MSG_DCB, "Num APP entries = %d\n", count);
284284

285285
ieee = (dcbx_version == DCBX_CONFIG_VERSION_IEEE);
286+
eth_tlv = false;
286287
/* Parse APP TLV */
287288
for (i = 0; i < count; i++) {
288289
protocol_id = QED_MFW_GET_FIELD(p_tbl[i].entry,
@@ -304,13 +305,22 @@ qed_dcbx_process_tlv(struct qed_hwfn *p_hwfn,
304305
* indication, but we only got here if there was an
305306
* app tlv for the protocol, so dcbx must be enabled.
306307
*/
307-
enable = !(type == DCBX_PROTOCOL_ETH);
308+
if (type == DCBX_PROTOCOL_ETH) {
309+
enable = false;
310+
eth_tlv = true;
311+
} else {
312+
enable = true;
313+
}
308314

309315
qed_dcbx_update_app_info(p_data, p_hwfn, enable,
310316
priority, tc, type);
311317
}
312318
}
313319

320+
/* If Eth TLV is not detected, use UFP TC as default TC */
321+
if (test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits) && !eth_tlv)
322+
p_data->arr[DCBX_PROTOCOL_ETH].tc = p_hwfn->ufp_info.tc;
323+
314324
/* Update ramrod protocol data and hw_info fields
315325
* with default info when corresponding APP TLV's are not detected.
316326
* The enabled field has a different logic for ethernet as only for

drivers/net/ethernet/qlogic/qed/qed_dev.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,6 +1499,11 @@ static int qed_hw_init_pf(struct qed_hwfn *p_hwfn,
14991499
STORE_RT_REG(p_hwfn, NIG_REG_LLH_FUNC_TAG_EN_RT_OFFSET, 1);
15001500
STORE_RT_REG(p_hwfn, NIG_REG_LLH_FUNC_TAG_VALUE_RT_OFFSET,
15011501
p_hwfn->hw_info.ovlan);
1502+
1503+
DP_VERBOSE(p_hwfn, NETIF_MSG_HW,
1504+
"Configuring LLH_FUNC_FILTER_HDR_SEL\n");
1505+
STORE_RT_REG(p_hwfn, NIG_REG_LLH_FUNC_FILTER_HDR_SEL_RT_OFFSET,
1506+
1);
15021507
}
15031508

15041509
/* Enable classification by MAC if needed */
@@ -1635,6 +1640,7 @@ int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params)
16351640
bool b_default_mtu = true;
16361641
struct qed_hwfn *p_hwfn;
16371642
int rc = 0, mfw_rc, i;
1643+
u16 ether_type;
16381644

16391645
if ((p_params->int_mode == QED_INT_MODE_MSI) && (cdev->num_hwfns > 1)) {
16401646
DP_NOTICE(cdev, "MSI mode is not supported for CMT devices\n");
@@ -1668,16 +1674,22 @@ int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params)
16681674
if (rc)
16691675
return rc;
16701676

1671-
if (IS_PF(cdev) && test_bit(QED_MF_8021AD_TAGGING,
1672-
&cdev->mf_bits)) {
1677+
if (IS_PF(cdev) && (test_bit(QED_MF_8021Q_TAGGING,
1678+
&cdev->mf_bits) ||
1679+
test_bit(QED_MF_8021AD_TAGGING,
1680+
&cdev->mf_bits))) {
1681+
if (test_bit(QED_MF_8021Q_TAGGING, &cdev->mf_bits))
1682+
ether_type = ETH_P_8021Q;
1683+
else
1684+
ether_type = ETH_P_8021AD;
16731685
STORE_RT_REG(p_hwfn, PRS_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1674-
ETH_P_8021AD);
1686+
ether_type);
16751687
STORE_RT_REG(p_hwfn, NIG_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1676-
ETH_P_8021AD);
1688+
ether_type);
16771689
STORE_RT_REG(p_hwfn, PBF_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1678-
ETH_P_8021AD);
1690+
ether_type);
16791691
STORE_RT_REG(p_hwfn, DORQ_REG_TAG1_ETHERTYPE_RT_OFFSET,
1680-
ETH_P_8021AD);
1692+
ether_type);
16811693
}
16821694

16831695
qed_fill_load_req_params(&load_req_params,
@@ -2659,6 +2671,12 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
26592671
case NVM_CFG1_GLOB_MF_MODE_MF_ALLOWED:
26602672
cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS);
26612673
break;
2674+
case NVM_CFG1_GLOB_MF_MODE_UFP:
2675+
cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS) |
2676+
BIT(QED_MF_LLH_PROTO_CLSS) |
2677+
BIT(QED_MF_UFP_SPECIFIC) |
2678+
BIT(QED_MF_8021Q_TAGGING);
2679+
break;
26622680
case NVM_CFG1_GLOB_MF_MODE_BD:
26632681
cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS) |
26642682
BIT(QED_MF_LLH_PROTO_CLSS) |
@@ -2879,6 +2897,8 @@ qed_get_hw_info(struct qed_hwfn *p_hwfn,
28792897
qed_mcp_cmd_port_init(p_hwfn, p_ptt);
28802898

28812899
qed_get_eee_caps(p_hwfn, p_ptt);
2900+
2901+
qed_mcp_read_ufp_config(p_hwfn, p_ptt);
28822902
}
28832903

28842904
if (qed_mcp_is_init(p_hwfn)) {

drivers/net/ethernet/qlogic/qed/qed_fcoe.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,9 @@ qed_sp_fcoe_conn_offload(struct qed_hwfn *p_hwfn,
313313
p_data->d_id.addr_mid = p_conn->d_id.addr_mid;
314314
p_data->d_id.addr_lo = p_conn->d_id.addr_lo;
315315
p_data->flags = p_conn->flags;
316+
if (test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits))
317+
SET_FIELD(p_data->flags,
318+
FCOE_CONN_OFFLOAD_RAMROD_DATA_B_SINGLE_VLAN, 1);
316319
p_data->def_q_idx = p_conn->def_q_idx;
317320

318321
return qed_spq_post(p_hwfn, p_ent, NULL);

drivers/net/ethernet/qlogic/qed/qed_hsi.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11993,6 +11993,16 @@ struct public_port {
1199311993
#define EEE_REMOTE_TW_TX_OFFSET 0
1199411994
#define EEE_REMOTE_TW_RX_MASK 0xffff0000
1199511995
#define EEE_REMOTE_TW_RX_OFFSET 16
11996+
11997+
u32 oem_cfg_port;
11998+
#define OEM_CFG_CHANNEL_TYPE_MASK 0x00000003
11999+
#define OEM_CFG_CHANNEL_TYPE_OFFSET 0
12000+
#define OEM_CFG_CHANNEL_TYPE_VLAN_PARTITION 0x1
12001+
#define OEM_CFG_CHANNEL_TYPE_STAGGED 0x2
12002+
#define OEM_CFG_SCHED_TYPE_MASK 0x0000000C
12003+
#define OEM_CFG_SCHED_TYPE_OFFSET 2
12004+
#define OEM_CFG_SCHED_TYPE_ETS 0x1
12005+
#define OEM_CFG_SCHED_TYPE_VNIC_BW 0x2
1199612006
};
1199712007

1199812008
struct public_func {
@@ -12069,6 +12079,23 @@ struct public_func {
1206912079
#define DRV_ID_DRV_INIT_HW_MASK 0x80000000
1207012080
#define DRV_ID_DRV_INIT_HW_SHIFT 31
1207112081
#define DRV_ID_DRV_INIT_HW_FLAG (1 << DRV_ID_DRV_INIT_HW_SHIFT)
12082+
12083+
u32 oem_cfg_func;
12084+
#define OEM_CFG_FUNC_TC_MASK 0x0000000F
12085+
#define OEM_CFG_FUNC_TC_OFFSET 0
12086+
#define OEM_CFG_FUNC_TC_0 0x0
12087+
#define OEM_CFG_FUNC_TC_1 0x1
12088+
#define OEM_CFG_FUNC_TC_2 0x2
12089+
#define OEM_CFG_FUNC_TC_3 0x3
12090+
#define OEM_CFG_FUNC_TC_4 0x4
12091+
#define OEM_CFG_FUNC_TC_5 0x5
12092+
#define OEM_CFG_FUNC_TC_6 0x6
12093+
#define OEM_CFG_FUNC_TC_7 0x7
12094+
12095+
#define OEM_CFG_FUNC_HOST_PRI_CTRL_MASK 0x00000030
12096+
#define OEM_CFG_FUNC_HOST_PRI_CTRL_OFFSET 4
12097+
#define OEM_CFG_FUNC_HOST_PRI_CTRL_VNIC 0x1
12098+
#define OEM_CFG_FUNC_HOST_PRI_CTRL_OS 0x2
1207212099
};
1207312100

1207412101
struct mcp_mac {
@@ -12495,6 +12522,7 @@ enum MFW_DRV_MSG_TYPE {
1249512522
MFW_DRV_MSG_BW_UPDATE10,
1249612523
MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE,
1249712524
MFW_DRV_MSG_BW_UPDATE11,
12525+
MFW_DRV_MSG_OEM_CFG_UPDATE,
1249812526
MFW_DRV_MSG_MAX
1249912527
};
1250012528

drivers/net/ethernet/qlogic/qed/qed_ll2.c

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,10 @@ static int qed_sp_ll2_rx_queue_start(struct qed_hwfn *p_hwfn,
919919
p_ramrod->drop_ttl0_flg = p_ll2_conn->input.rx_drop_ttl0_flg;
920920
p_ramrod->inner_vlan_stripping_en =
921921
p_ll2_conn->input.rx_vlan_removal_en;
922+
923+
if (test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits) &&
924+
p_ll2_conn->input.conn_type == QED_LL2_TYPE_FCOE)
925+
p_ramrod->report_outer_vlan = 1;
922926
p_ramrod->queue_id = p_ll2_conn->queue_id;
923927
p_ramrod->main_func_queue = p_ll2_conn->main_func_queue ? 1 : 0;
924928

@@ -1493,11 +1497,12 @@ int qed_ll2_establish_connection(void *cxt, u8 connection_handle)
14931497
qed_ll2_establish_connection_ooo(p_hwfn, p_ll2_conn);
14941498

14951499
if (p_ll2_conn->input.conn_type == QED_LL2_TYPE_FCOE) {
1500+
if (!test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits))
1501+
qed_llh_add_protocol_filter(p_hwfn, p_ptt,
1502+
ETH_P_FCOE, 0,
1503+
QED_LLH_FILTER_ETHERTYPE);
14961504
qed_llh_add_protocol_filter(p_hwfn, p_ptt,
1497-
0x8906, 0,
1498-
QED_LLH_FILTER_ETHERTYPE);
1499-
qed_llh_add_protocol_filter(p_hwfn, p_ptt,
1500-
0x8914, 0,
1505+
ETH_P_FIP, 0,
15011506
QED_LLH_FILTER_ETHERTYPE);
15021507
}
15031508

@@ -1653,11 +1658,16 @@ qed_ll2_prepare_tx_packet_set_bd(struct qed_hwfn *p_hwfn,
16531658

16541659
start_bd = (struct core_tx_bd *)qed_chain_produce(p_tx_chain);
16551660
if (QED_IS_IWARP_PERSONALITY(p_hwfn) &&
1656-
p_ll2->input.conn_type == QED_LL2_TYPE_OOO)
1661+
p_ll2->input.conn_type == QED_LL2_TYPE_OOO) {
16571662
start_bd->nw_vlan_or_lb_echo =
16581663
cpu_to_le16(IWARP_LL2_IN_ORDER_TX_QUEUE);
1659-
else
1664+
} else {
16601665
start_bd->nw_vlan_or_lb_echo = cpu_to_le16(pkt->vlan);
1666+
if (test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits) &&
1667+
p_ll2->input.conn_type == QED_LL2_TYPE_FCOE)
1668+
pkt->remove_stag = true;
1669+
}
1670+
16611671
SET_FIELD(start_bd->bitfield1, CORE_TX_BD_L4_HDR_OFFSET_W,
16621672
cpu_to_le16(pkt->l4_hdr_offset_w));
16631673
SET_FIELD(start_bd->bitfield1, CORE_TX_BD_TX_DST, tx_dest);
@@ -1668,6 +1678,9 @@ qed_ll2_prepare_tx_packet_set_bd(struct qed_hwfn *p_hwfn,
16681678
SET_FIELD(bd_data, CORE_TX_BD_DATA_IP_CSUM, !!(pkt->enable_ip_cksum));
16691679
SET_FIELD(bd_data, CORE_TX_BD_DATA_L4_CSUM, !!(pkt->enable_l4_cksum));
16701680
SET_FIELD(bd_data, CORE_TX_BD_DATA_IP_LEN, !!(pkt->calc_ip_len));
1681+
SET_FIELD(bd_data, CORE_TX_BD_DATA_DISABLE_STAG_INSERTION,
1682+
!!(pkt->remove_stag));
1683+
16711684
start_bd->bd_data.as_bitfield = cpu_to_le16(bd_data);
16721685
DMA_REGPAIR_LE(start_bd->addr, pkt->first_frag);
16731686
start_bd->nbytes = cpu_to_le16(pkt->first_frag_len);
@@ -1884,11 +1897,12 @@ int qed_ll2_terminate_connection(void *cxt, u8 connection_handle)
18841897
qed_ooo_release_all_isles(p_hwfn, p_hwfn->p_ooo_info);
18851898

18861899
if (p_ll2_conn->input.conn_type == QED_LL2_TYPE_FCOE) {
1900+
if (!test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits))
1901+
qed_llh_remove_protocol_filter(p_hwfn, p_ptt,
1902+
ETH_P_FCOE, 0,
1903+
QED_LLH_FILTER_ETHERTYPE);
18871904
qed_llh_remove_protocol_filter(p_hwfn, p_ptt,
1888-
0x8906, 0,
1889-
QED_LLH_FILTER_ETHERTYPE);
1890-
qed_llh_remove_protocol_filter(p_hwfn, p_ptt,
1891-
0x8914, 0,
1905+
ETH_P_FIP, 0,
18921906
QED_LLH_FILTER_ETHERTYPE);
18931907
}
18941908

@@ -2360,7 +2374,8 @@ static int qed_ll2_stop(struct qed_dev *cdev)
23602374
return -EINVAL;
23612375
}
23622376

2363-
static int qed_ll2_start_xmit(struct qed_dev *cdev, struct sk_buff *skb)
2377+
static int qed_ll2_start_xmit(struct qed_dev *cdev, struct sk_buff *skb,
2378+
unsigned long xmit_flags)
23642379
{
23652380
struct qed_ll2_tx_pkt_info pkt;
23662381
const skb_frag_t *frag;
@@ -2405,6 +2420,9 @@ static int qed_ll2_start_xmit(struct qed_dev *cdev, struct sk_buff *skb)
24052420
pkt.first_frag = mapping;
24062421
pkt.first_frag_len = skb->len;
24072422
pkt.cookie = skb;
2423+
if (test_bit(QED_MF_UFP_SPECIFIC, &cdev->mf_bits) &&
2424+
test_bit(QED_LL2_XMIT_FLAGS_FIP_DISCOVERY, &xmit_flags))
2425+
pkt.remove_stag = true;
24082426

24092427
rc = qed_ll2_prepare_tx_packet(&cdev->hwfns[0], cdev->ll2->handle,
24102428
&pkt, 1);

drivers/net/ethernet/qlogic/qed/qed_mcp.c

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include <linux/string.h>
4141
#include <linux/etherdevice.h>
4242
#include "qed.h"
43+
#include "qed_cxt.h"
4344
#include "qed_dcbx.h"
4445
#include "qed_hsi.h"
4546
#include "qed_hw.h"
@@ -1486,6 +1487,80 @@ static void qed_mcp_update_stag(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
14861487
&resp, &param);
14871488
}
14881489

1490+
void qed_mcp_read_ufp_config(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1491+
{
1492+
struct public_func shmem_info;
1493+
u32 port_cfg, val;
1494+
1495+
if (!test_bit(QED_MF_UFP_SPECIFIC, &p_hwfn->cdev->mf_bits))
1496+
return;
1497+
1498+
memset(&p_hwfn->ufp_info, 0, sizeof(p_hwfn->ufp_info));
1499+
port_cfg = qed_rd(p_hwfn, p_ptt, p_hwfn->mcp_info->port_addr +
1500+
offsetof(struct public_port, oem_cfg_port));
1501+
val = (port_cfg & OEM_CFG_CHANNEL_TYPE_MASK) >>
1502+
OEM_CFG_CHANNEL_TYPE_OFFSET;
1503+
if (val != OEM_CFG_CHANNEL_TYPE_STAGGED)
1504+
DP_NOTICE(p_hwfn, "Incorrect UFP Channel type %d\n", val);
1505+
1506+
val = (port_cfg & OEM_CFG_SCHED_TYPE_MASK) >> OEM_CFG_SCHED_TYPE_OFFSET;
1507+
if (val == OEM_CFG_SCHED_TYPE_ETS) {
1508+
p_hwfn->ufp_info.mode = QED_UFP_MODE_ETS;
1509+
} else if (val == OEM_CFG_SCHED_TYPE_VNIC_BW) {
1510+
p_hwfn->ufp_info.mode = QED_UFP_MODE_VNIC_BW;
1511+
} else {
1512+
p_hwfn->ufp_info.mode = QED_UFP_MODE_UNKNOWN;
1513+
DP_NOTICE(p_hwfn, "Unknown UFP scheduling mode %d\n", val);
1514+
}
1515+
1516+
qed_mcp_get_shmem_func(p_hwfn, p_ptt, &shmem_info, MCP_PF_ID(p_hwfn));
1517+
val = (port_cfg & OEM_CFG_FUNC_TC_MASK) >> OEM_CFG_FUNC_TC_OFFSET;
1518+
p_hwfn->ufp_info.tc = (u8)val;
1519+
val = (port_cfg & OEM_CFG_FUNC_HOST_PRI_CTRL_MASK) >>
1520+
OEM_CFG_FUNC_HOST_PRI_CTRL_OFFSET;
1521+
if (val == OEM_CFG_FUNC_HOST_PRI_CTRL_VNIC) {
1522+
p_hwfn->ufp_info.pri_type = QED_UFP_PRI_VNIC;
1523+
} else if (val == OEM_CFG_FUNC_HOST_PRI_CTRL_OS) {
1524+
p_hwfn->ufp_info.pri_type = QED_UFP_PRI_OS;
1525+
} else {
1526+
p_hwfn->ufp_info.pri_type = QED_UFP_PRI_UNKNOWN;
1527+
DP_NOTICE(p_hwfn, "Unknown Host priority control %d\n", val);
1528+
}
1529+
1530+
DP_NOTICE(p_hwfn,
1531+
"UFP shmem config: mode = %d tc = %d pri_type = %d\n",
1532+
p_hwfn->ufp_info.mode,
1533+
p_hwfn->ufp_info.tc, p_hwfn->ufp_info.pri_type);
1534+
}
1535+
1536+
static int
1537+
qed_mcp_handle_ufp_event(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1538+
{
1539+
qed_mcp_read_ufp_config(p_hwfn, p_ptt);
1540+
1541+
if (p_hwfn->ufp_info.mode == QED_UFP_MODE_VNIC_BW) {
1542+
p_hwfn->qm_info.ooo_tc = p_hwfn->ufp_info.tc;
1543+
p_hwfn->hw_info.offload_tc = p_hwfn->ufp_info.tc;
1544+
1545+
qed_qm_reconf(p_hwfn, p_ptt);
1546+
} else if (p_hwfn->ufp_info.mode == QED_UFP_MODE_ETS) {
1547+
/* Merge UFP TC with the dcbx TC data */
1548+
qed_dcbx_mib_update_event(p_hwfn, p_ptt,
1549+
QED_DCBX_OPERATIONAL_MIB);
1550+
} else {
1551+
DP_ERR(p_hwfn, "Invalid sched type, discard the UFP config\n");
1552+
return -EINVAL;
1553+
}
1554+
1555+
/* update storm FW with negotiation results */
1556+
qed_sp_pf_update_ufp(p_hwfn);
1557+
1558+
/* update stag pcp value */
1559+
qed_sp_pf_update_stag(p_hwfn);
1560+
1561+
return 0;
1562+
}
1563+
14891564
int qed_mcp_handle_events(struct qed_hwfn *p_hwfn,
14901565
struct qed_ptt *p_ptt)
14911566
{
@@ -1529,6 +1604,9 @@ int qed_mcp_handle_events(struct qed_hwfn *p_hwfn,
15291604
qed_dcbx_mib_update_event(p_hwfn, p_ptt,
15301605
QED_DCBX_OPERATIONAL_MIB);
15311606
break;
1607+
case MFW_DRV_MSG_OEM_CFG_UPDATE:
1608+
qed_mcp_handle_ufp_event(p_hwfn, p_ptt);
1609+
break;
15321610
case MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE:
15331611
qed_mcp_handle_transceiver_change(p_hwfn, p_ptt);
15341612
break;

0 commit comments

Comments
 (0)