]> git.droids-corp.org - dpdk.git/commitdiff
net/qede: fix speed capability
authorHarish Patil <harish.patil@qlogic.com>
Fri, 11 Nov 2016 17:41:36 +0000 (09:41 -0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Sat, 12 Nov 2016 21:27:09 +0000 (22:27 +0100)
- 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: 64c239b7f8b7 ("net/qede: fix advertising link speed capability")
Signed-off-by: Harish Patil <harish.patil@qlogic.com>
config/common_base
doc/guides/nics/features/qede.ini
doc/guides/nics/features/qede_vf.ini
doc/guides/nics/qede.rst
drivers/net/qede/qede_ethdev.c
drivers/net/qede/qede_if.h
drivers/net/qede/qede_main.c

index 21d18f80ecfd65e33d1537f250742913224b9511..4bff83af7b3880aa5ddbcfcf3cd120f1aabce56a 100644 (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
index 1f3c3f683d08c7a54f9ab8c4b10fd15b13db8bb8..7d75030a92ddb44aedca21ba57fdaa36d32a50c0 100644 (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
index 1c0f228f8b9eecb63f636d53721850c9168d3a77..acb1b99114d8525a3c5d03256adadf43cafb7781 100644 (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
index b6f54fd1340c2361e8b4880b4f864763d11d7d3a..d22ecdd97e679b0f1eeb5e63db56875738c62e50 100644 (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
 -------------
index 59129f25c329f7546753efc9de94bb1adf3f16a9..d106dd0fb43995cdd80d116064fd79c0bc042cc2 100644 (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 */
index 49363491159fb6d5daeebbd358fd05a09379e7e1..2131fe2a9d2672b01fcd2c765821714a3206529d 100644 (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;
index d2e476c7a438068ba252a9e6073cda2f62c00264..ab22409a1f2c75a12e194d00e707a6d0e9ee86bc 100644 (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;