From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 0A4D8A0AC5 for ; Sat, 4 May 2019 16:07:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CD84529AC; Sat, 4 May 2019 16:07:09 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id C9475B62; Sat, 4 May 2019 16:07:05 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 May 2019 07:07:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,430,1549958400"; d="scan'208";a="343397406" Received: from dpdk51.sh.intel.com ([10.67.110.245]) by fmsmga005.fm.intel.com with ESMTP; 04 May 2019 07:07:03 -0700 From: Qi Zhang To: wenzhuo.lu@intel.com, wei.zhao1@intel.com Cc: paul.m.stillwell.jr@intel.com, dev@dpdk.org, Qi Zhang , stable@dpdk.org Date: Sat, 4 May 2019 22:09:10 +0800 Message-Id: <20190504140910.8935-1-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.13.6 Subject: [dpdk-stable] [PATCH] net/iavf: enable more link speed X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Enable advanced link speed mode (VIRTCHNL_VF_CAP_ADV_LINK_SPEED) so iavf PMD can identify more link speed that reported by pf. Cc: stable@dpdk.org Signed-off-by: Qi Zhang --- drivers/net/iavf/base/virtchnl.h | 17 ++++++++++++++++- drivers/net/iavf/iavf.h | 2 +- drivers/net/iavf/iavf_ethdev.c | 21 +++++++++++++++------ drivers/net/iavf/iavf_vchnl.c | 4 ++-- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/drivers/net/iavf/base/virtchnl.h b/drivers/net/iavf/base/virtchnl.h index 13bfdb86b..10b65380c 100644 --- a/drivers/net/iavf/base/virtchnl.h +++ b/drivers/net/iavf/base/virtchnl.h @@ -258,6 +258,8 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource); #define VIRTCHNL_VF_OFFLOAD_ENCAP 0X00100000 #define VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM 0X00200000 #define VIRTCHNL_VF_OFFLOAD_RX_ENCAP_CSUM 0X00400000 +/* Define below the capability flags that are not offloads */ +#define VIRTCHNL_VF_CAP_ADV_LINK_SPEED 0x00000080 #define VF_BASE_MODE_OFFLOADS (VIRTCHNL_VF_OFFLOAD_L2 | \ VIRTCHNL_VF_OFFLOAD_VLAN | \ @@ -562,10 +564,23 @@ enum virtchnl_event_codes { struct virtchnl_pf_event { enum virtchnl_event_codes event; union { + /* If the PF driver does not support the new speed reporting + * capabilities then use link_event else use link_event_adv to + * get the speed and link information. The ability to understand + * new speeds is indicated by setting the capability flag + * VIRTCHNL_VF_CAP_ADV_LINK_SPEED in vf_cap_flags parameter + * in virtchnl_vf_resource struct and can be used to determine + * which link event struct to use below. + */ struct { enum virtchnl_link_speed link_speed; - bool link_status; + u8 link_status; } link_event; + struct { + /* link_speed provided in Mbps */ + u32 link_speed; + u8 link_status; + } link_event_adv; } event_data; int severity; diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h index e6e3e8d30..9a334e41c 100644 --- a/drivers/net/iavf/iavf.h +++ b/drivers/net/iavf/iavf.h @@ -95,7 +95,7 @@ struct iavf_info { /* Event from pf */ bool dev_closed; bool link_up; - enum virtchnl_link_speed link_speed; + uint32_t link_speed; struct iavf_vsi vsi; bool vf_reset; diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 7a0696ed7..bd9c5ecdf 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -584,24 +584,33 @@ iavf_dev_link_update(struct rte_eth_dev *dev, * when receive LINK_CHANGE evnet from PF by Virtchnnl. */ switch (vf->link_speed) { - case VIRTCHNL_LINK_SPEED_100MB: + case 10: + new_link.link_speed = ETH_SPEED_NUM_10M; + break; + case 100: new_link.link_speed = ETH_SPEED_NUM_100M; break; - case VIRTCHNL_LINK_SPEED_1GB: + case 1000: new_link.link_speed = ETH_SPEED_NUM_1G; break; - case VIRTCHNL_LINK_SPEED_10GB: + case 10000: new_link.link_speed = ETH_SPEED_NUM_10G; break; - case VIRTCHNL_LINK_SPEED_20GB: + case 20000: new_link.link_speed = ETH_SPEED_NUM_20G; break; - case VIRTCHNL_LINK_SPEED_25GB: + case 25000: new_link.link_speed = ETH_SPEED_NUM_25G; break; - case VIRTCHNL_LINK_SPEED_40GB: + case 40000: new_link.link_speed = ETH_SPEED_NUM_40G; break; + case 50000: + new_link.link_speed = ETH_SPEED_NUM_50G; + break; + case 100000: + new_link.link_speed = ETH_SPEED_NUM_100G; + break; default: new_link.link_speed = ETH_SPEED_NUM_NONE; break; diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c index 6381fb63c..da6401d35 100644 --- a/drivers/net/iavf/iavf_vchnl.c +++ b/drivers/net/iavf/iavf_vchnl.c @@ -153,7 +153,7 @@ iavf_handle_pf_event_msg(struct rte_eth_dev *dev, uint8_t *msg, case VIRTCHNL_EVENT_LINK_CHANGE: PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_LINK_CHANGE event"); vf->link_up = pf_msg->event_data.link_event.link_status; - vf->link_speed = pf_msg->event_data.link_event.link_speed; + vf->link_speed = pf_msg->event_data.link_event_adv.link_speed; iavf_dev_link_update(dev, 0); _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL); @@ -344,7 +344,7 @@ iavf_get_vf_resource(struct iavf_adapter *adapter) * add advanced/optional offload capabilities */ - caps = IAVF_BASIC_OFFLOAD_CAPS; + caps = IAVF_BASIC_OFFLOAD_CAPS | VIRTCHNL_VF_CAP_ADV_LINK_SPEED; args.in_args = (uint8_t *)∩︀ args.in_args_size = sizeof(caps); -- 2.13.6