net/qede: fix speed capability

- Fix to use bitmapped values in NVM configuration for speed capability
  advertisement. This issue is specific to 25G NIC since it is capable
  of 25G and 10G speeds.

- Update feature list.

Fixes: 64c239b7f8 ("net/qede: fix advertising link speed capability")

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
This commit is contained in:
Harish Patil 2016-11-11 09:41:36 -08:00 committed by Thomas Monjalon
parent d722022737
commit 1ea56b80f9
7 changed files with 21 additions and 27 deletions

View File

@ -315,7 +315,7 @@ CONFIG_RTE_LIBRTE_PMD_BOND=y
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB_L1=n
# QLogic 25G/40G/100G PMD
# QLogic 10G/25G/40G/100G PMD
#
CONFIG_RTE_LIBRTE_QEDE_PMD=y
CONFIG_RTE_LIBRTE_QEDE_DEBUG_INIT=n

View File

@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
Speed capabilities = Y
Link status = Y
Link status event = Y
MTU update = Y

View File

@ -4,6 +4,7 @@
; Refer to default.ini for the full list of available PMD features.
;
[Features]
Speed capabilities = Y
Link status = Y
Link status event = Y
MTU update = Y

View File

@ -71,7 +71,7 @@ Non-supported Features
Supported QLogic Adapters
-------------------------
- QLogic FastLinQ QL4xxxx 25G/40G/100G CNAs.
- QLogic FastLinQ QL4xxxx 10G/25G/40G/100G CNAs.
Prerequisites
-------------

View File

@ -647,6 +647,7 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev,
struct qede_dev *qdev = eth_dev->data->dev_private;
struct ecore_dev *edev = &qdev->edev;
struct qed_link_output link;
uint32_t speed_cap = 0;
PMD_INIT_FUNC_TRACE(edev);
@ -681,7 +682,19 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev,
memset(&link, 0, sizeof(struct qed_link_output));
qdev->ops->common->get_link(edev, &link);
dev_info->speed_capa = rte_eth_speed_bitflag(link.adv_speed, 0);
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_1G)
speed_cap |= ETH_LINK_SPEED_1G;
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_10G)
speed_cap |= ETH_LINK_SPEED_10G;
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_25G)
speed_cap |= ETH_LINK_SPEED_25G;
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_40G)
speed_cap |= ETH_LINK_SPEED_40G;
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_50G)
speed_cap |= ETH_LINK_SPEED_50G;
if (link.adv_speed & NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_BB_100G)
speed_cap |= ETH_LINK_SPEED_100G;
dev_info->speed_capa = speed_cap;
}
/* return 0 means link status changed, -1 means not changed */

View File

@ -70,7 +70,7 @@ struct qed_link_output {
uint32_t advertised_caps; /* In ADVERTISED defs */
uint32_t lp_caps; /* In ADVERTISED defs */
uint32_t speed; /* In Mb/s */
uint32_t adv_speed; /* In Mb/s */
uint32_t adv_speed; /* Speed mask */
uint8_t duplex; /* In DUPLEX defs */
uint8_t port; /* In PORT defs */
bool autoneg;

View File

@ -488,7 +488,6 @@ static void qed_fill_link(struct ecore_hwfn *hwfn,
struct ecore_mcp_link_state link;
struct ecore_mcp_link_capabilities link_caps;
uint32_t media_type;
uint32_t adv_speed;
uint8_t change = 0;
memset(if_link, 0, sizeof(*if_link));
@ -516,28 +515,8 @@ static void qed_fill_link(struct ecore_hwfn *hwfn,
if_link->duplex = QEDE_DUPLEX_FULL;
/* Fill up the native advertised speed */
switch (params.speed.advertised_speeds) {
case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_10G:
adv_speed = 10000;
break;
case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_25G:
adv_speed = 25000;
break;
case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_40G:
adv_speed = 40000;
break;
case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_50G:
adv_speed = 50000;
break;
case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_BB_100G:
adv_speed = 100000;
break;
default:
DP_NOTICE(hwfn, false, "Unknown speed\n");
adv_speed = 0;
}
if_link->adv_speed = adv_speed;
/* Fill up the native advertised speed cap mask */
if_link->adv_speed = params.speed.advertised_speeds;
if (params.speed.autoneg)
if_link->supported_caps |= QEDE_SUPPORTED_AUTONEG;