Skip to content

Commit b51bdfb

Browse files
Sudarsana Reddy Kallurudavem330
authored andcommitted
qed: Add support for multi function mode with 802.1ad tagging.
The patch adds support for new Multi function mode wherein the traffic classification is done based on the 802.1ad tagging and the outer vlan tag provided by the management firmware. 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 27bf96e commit b51bdfb

File tree

2 files changed

+49
-20
lines changed

2 files changed

+49
-20
lines changed

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

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,6 +1668,18 @@ int qed_hw_init(struct qed_dev *cdev, struct qed_hw_init_params *p_params)
16681668
if (rc)
16691669
return rc;
16701670

1671+
if (IS_PF(cdev) && test_bit(QED_MF_8021AD_TAGGING,
1672+
&cdev->mf_bits)) {
1673+
STORE_RT_REG(p_hwfn, PRS_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1674+
ETH_P_8021AD);
1675+
STORE_RT_REG(p_hwfn, NIG_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1676+
ETH_P_8021AD);
1677+
STORE_RT_REG(p_hwfn, PBF_REG_TAG_ETHERTYPE_0_RT_OFFSET,
1678+
ETH_P_8021AD);
1679+
STORE_RT_REG(p_hwfn, DORQ_REG_TAG1_ETHERTYPE_RT_OFFSET,
1680+
ETH_P_8021AD);
1681+
}
1682+
16711683
qed_fill_load_req_params(&load_req_params,
16721684
p_params->p_drv_load_params);
16731685
rc = qed_mcp_load_req(p_hwfn, p_hwfn->p_main_ptt,
@@ -2630,39 +2642,51 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
26302642
link->pause.autoneg,
26312643
p_caps->default_eee, p_caps->eee_lpi_timer);
26322644

2633-
/* Read Multi-function information from shmem */
2634-
addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
2635-
offsetof(struct nvm_cfg1, glob) +
2636-
offsetof(struct nvm_cfg1_glob, generic_cont0);
2645+
if (IS_LEAD_HWFN(p_hwfn)) {
2646+
struct qed_dev *cdev = p_hwfn->cdev;
26372647

2638-
generic_cont0 = qed_rd(p_hwfn, p_ptt, addr);
2648+
/* Read Multi-function information from shmem */
2649+
addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
2650+
offsetof(struct nvm_cfg1, glob) +
2651+
offsetof(struct nvm_cfg1_glob, generic_cont0);
26392652

2640-
mf_mode = (generic_cont0 & NVM_CFG1_GLOB_MF_MODE_MASK) >>
2641-
NVM_CFG1_GLOB_MF_MODE_OFFSET;
2653+
generic_cont0 = qed_rd(p_hwfn, p_ptt, addr);
26422654

2643-
switch (mf_mode) {
2644-
case NVM_CFG1_GLOB_MF_MODE_MF_ALLOWED:
2645-
p_hwfn->cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS);
2646-
break;
2647-
case NVM_CFG1_GLOB_MF_MODE_NPAR1_0:
2648-
p_hwfn->cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
2655+
mf_mode = (generic_cont0 & NVM_CFG1_GLOB_MF_MODE_MASK) >>
2656+
NVM_CFG1_GLOB_MF_MODE_OFFSET;
2657+
2658+
switch (mf_mode) {
2659+
case NVM_CFG1_GLOB_MF_MODE_MF_ALLOWED:
2660+
cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS);
2661+
break;
2662+
case NVM_CFG1_GLOB_MF_MODE_BD:
2663+
cdev->mf_bits = BIT(QED_MF_OVLAN_CLSS) |
2664+
BIT(QED_MF_LLH_PROTO_CLSS) |
2665+
BIT(QED_MF_8021AD_TAGGING);
2666+
break;
2667+
case NVM_CFG1_GLOB_MF_MODE_NPAR1_0:
2668+
cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
26492669
BIT(QED_MF_LLH_PROTO_CLSS) |
26502670
BIT(QED_MF_LL2_NON_UNICAST) |
26512671
BIT(QED_MF_INTER_PF_SWITCH);
2652-
break;
2653-
case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
2654-
p_hwfn->cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
2672+
break;
2673+
case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
2674+
cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
26552675
BIT(QED_MF_LLH_PROTO_CLSS) |
26562676
BIT(QED_MF_LL2_NON_UNICAST);
2657-
if (QED_IS_BB(p_hwfn->cdev))
2658-
p_hwfn->cdev->mf_bits |= BIT(QED_MF_NEED_DEF_PF);
2659-
break;
2677+
if (QED_IS_BB(p_hwfn->cdev))
2678+
cdev->mf_bits |= BIT(QED_MF_NEED_DEF_PF);
2679+
break;
2680+
}
2681+
2682+
DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
2683+
cdev->mf_bits);
26602684
}
26612685

26622686
DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
26632687
p_hwfn->cdev->mf_bits);
26642688

2665-
/* Read Multi-function information from shmem */
2689+
/* Read device capabilities information from shmem */
26662690
addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
26672691
offsetof(struct nvm_cfg1, glob) +
26682692
offsetof(struct nvm_cfg1_glob, device_capabilities);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,11 @@ int qed_sp_pf_start(struct qed_hwfn *p_hwfn,
346346

347347
p_ramrod->outer_tag_config.outer_tag.tci =
348348
cpu_to_le16(p_hwfn->hw_info.ovlan);
349+
if (test_bit(QED_MF_8021AD_TAGGING, &p_hwfn->cdev->mf_bits)) {
350+
p_ramrod->outer_tag_config.outer_tag.tpid = ETH_P_8021AD;
351+
p_ramrod->outer_tag_config.enable_stag_pri_change = 1;
352+
}
353+
349354

350355
/* Place EQ address in RAMROD */
351356
DMA_REGPAIR_LE(p_ramrod->event_ring_pbl_addr,

0 commit comments

Comments
 (0)