From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40044.outbound.protection.outlook.com [40.107.4.44]) by dpdk.org (Postfix) with ESMTP id CD8E52965 for ; Fri, 27 Jul 2018 04:10:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hyyuAzReXeSEovdFcvZm9g73V5XGFimko2pq+Fpop4E=; b=SqDvsF78MMIGJT6BiQe+vOqprmqMFe74/ebtiPOhWxfliPvpvd5dAkRuDCiWQK1tbRjWyZOn0h/D/lh93TVzw0ynVrl1AUDLro4VNzbJYhyVGlg22/d6Nh50QazjULCSwCbD4+BVofYtmslQAjy07ugVbRytoJCjOmvyxwtjH70= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by HE1PR0501MB2041.eurprd05.prod.outlook.com (2603:10a6:3:35::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.21; Fri, 27 Jul 2018 02:10:42 +0000 From: Yongseok Koh To: Rasesh Mody Cc: dpdk stable Date: Thu, 26 Jul 2018 19:08:57 -0700 Message-Id: <20180727021019.37388-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: DM6PR08CA0022.namprd08.prod.outlook.com (2603:10b6:5:80::35) To HE1PR0501MB2041.eurprd05.prod.outlook.com (2603:10a6:3:35::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: de9319a8-7148-4753-db6c-08d5f366287b X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0501MB2041; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 3:cj0Em/SKFhXskV/0+qwW6HjtytU8MVgzojr46WJzvx/z6+B2tibuX0ZhgBHzsLFwd7JzXVYRJMSDEpwA7HunVYPEd1Bx2VZJD9pEbGg3+znb6181EnAKUq6zc4ZzneOV2iAFZ3WzBC1l7IPUYp5+O1cheu/xjb23ZG22nR26DRXUQBtpPZ7O07NDgMbIaWIsotYVA9OW/5S9XQpdKeng0tIHjj4WbX9tInhjU3GBXwy9EmALI5nW/I1EzICFs/p4; 25:Y+sUpJvMVJFLPBToImFAAvQXzBip6/xITKTdvKTpURPwg2oAAM7WgfG7TBr8LWaoMM3WiR8Mt4iBUoT8EAbqjWAn3nz7G8BU23Ju89hA8TPP0kdt4KbT9jvzwZUobzgceZG8ZjUqPQPzGexjYtqYCkaNz0WpKio78pUcpbOJqYg8/BHUSODeMaEPWNcANEnSgRzrQJOU01O/l0gTylSiTZajhViUFTTkxuI0wVuWqL+P6+sF3Zfyp1kUs1McyVPiWbGPyHnYLr5AQi71PsgvZyFjPMgYnirbncMQOKlx/NYydkfsKZLRAKinn7vsO80Obje0dEJP+iW1gtJyVr/4lg==; 31:10ZpalMP6H6nSuPmvPQF9nHA9jXcwkspluem7r5uWGlMBo8VkF8Z4DRDcCQvYqKcvX0fPkgu1+Qi6iUlwuxLS6wnykmmGDr9gf3pR6ZYlKU+T308AZdppqsdrTI8cWMxhJgrVDxeTmRYhL4VOzp/JE5TPOFBOxfP3DYO1e/gSS5tyy3WBz3R0tPyg6chTSEVBcBrUd5ieTZ0EzFjusuTAEietvjaKawz55yNMfPLiNc= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2041: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 20:pcyYRWgFhfTcFGTNHoGcf58Fa/SgNl5IZ4uxByEmUsgCgHKKTT7IC14oKugISDq3J4JxoY+Cw86Igl6hDkuIw7eQufWf+PYfrMeUslITXnrBHCBOoM1NU1bALOfTydHnDfCBVaUfb/IQ3xesoa05gdBR1rW1qO6zJihzXh7JF0jEy7sMydS8lhT8k54HerSLbhb0HILMDA3agysztHfcsxfvICPbSgfvgke1997KdPHYLt3td4OKigNFBL7C7vwQtDlRCpnOlPC5OO4DQRtlrIQ/3mEVzkpQqoSw86j5YcZ5Y1WODzUrwc4WLLtkP4pnXSuTfFXqkvq5vedWwsYLSsKedUc8/gQY3xsG2eenOzzXidWSQX4/ortvriZ9BRzrBqb7A2tFhuGNIXuUouS6R79t20SVWsVk5GIbxmQP0mDUztLmXox+v69VEf2+ZDnhJjxxHvVRIS0Hf2Ez7RfCHZY5u/iFyV8ctU50GLiOQ1cRivjGekk3kpLR5G1av+3X; 4:FZRmY5elARcHADmYtU9voqOcY56n+sDFy1l2PXD8Flv3Iyf2yew8LOApje0qkRlyf5mfihdcA/V9c3jI81EOI42t+cg3XbMlW5q8jQpZWtoYgvtMv6XKlFglRhInbTGbwPrithYpNnYDX1hO+JBE3LMtWUzKCbaoLBEvMm+CuNsgtPDK/DSGUObxseBbkfgBT/K9It4VPTLmBY00fyHFiWzQD/BtYpS7uutqY7ltzzeD8KRmHwEhgWS4wNJdPqVSrTFWxSbHaap7pA9FnOLYAA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011)(7699016); SRVR:HE1PR0501MB2041; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0501MB2041; X-Forefront-PRVS: 07467C4D33 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39860400002)(136003)(376002)(396003)(346002)(69234005)(28163001)(189003)(199004)(6306002)(55016002)(53376002)(36756003)(4326008)(10710500007)(2906002)(105586002)(26005)(2616005)(25786009)(956004)(486006)(21086003)(386003)(966005)(2420400007)(106356001)(51416003)(7736002)(86362001)(53546011)(575784001)(50466002)(15650500001)(16526019)(48376002)(1076002)(52116002)(8936002)(5660300001)(7110500001)(3846002)(16586007)(66066001)(81166006)(68736007)(316002)(69596002)(7696005)(6116002)(14444005)(97736004)(53936002)(476003)(81156014)(50226002)(6666003)(47776003)(6916009)(186003)(1720100001)(8676002)(305945005)(478600001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2041; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2041; 23:Qa2wmkEt8++aLpdd1ucELUZRNsZqLk8+CSx/Sz2?= =?us-ascii?Q?TxgurMYZRfXI3uFk1Mb5niT30HayEXCh0BzWyW3o5+VcWgNFZCx6TqeiqtLM?= =?us-ascii?Q?X0YbE4jJbQLfllrCTGgkoSXNIdzTlg7npK7aZZfBdvWsWNx2A8ctXdwqzKEZ?= =?us-ascii?Q?K7uZ2LbaLRkE2exeKzBVmWAW1lclyKMN7S2MQkHcB8vuvk4obNJHxbFmtFn2?= =?us-ascii?Q?FtjuzI0f3coowQwAAl0HrNbpPbhipL/7i3I19FjKw2fZTyz9l16XCgs78FlP?= =?us-ascii?Q?8Hvgn/mSf5mYNeKPZ034FTxK7eqxg4gUhbeytUUxYTkUwYnMbwiRzcdDErc1?= =?us-ascii?Q?yIATrP8V+49oWWf8mEvGEFnJe/DVuVm0YfERHU6a/OlpU1HpS5Mt2/PUwF5c?= =?us-ascii?Q?3dGVqHuPLUNJDenRvzlvAHS85gQBtXTJuBsaJW5sTzwsXzZI62uhPeKcVCr2?= =?us-ascii?Q?ZR9n5DcBA37INf+1rQLRDlh270n+TVWBOHs6yw8ICIF7YbSUPA9iRRQEX2Ku?= =?us-ascii?Q?ZVgVb/3xK4+jQNYti+KSAwC6Am7So5lDUuy6prGSqKjX280gRbSxr/Lredmo?= =?us-ascii?Q?e1ud+pMq5cORMHgAkBs+k7eI8GUCkkI4kaKAJJZsC28cAwO5wgFvFYmex97k?= =?us-ascii?Q?EBRgcxfS/JjqqxAUWpUveGUTluLPHnQc6UHbndEE8Iq2/SznX6sZ+EOoTuWr?= =?us-ascii?Q?LRNxL8nIaQEKKrv9NjwJvyUWrK4dmvBBFcrbCB1lo72hyn9ML4c5PHeVFXZp?= =?us-ascii?Q?N+X+ktqXjskv9cWrFckcmr0btsWXHOhZdW1OkaN615XhPVwpWhVEOiBY503H?= =?us-ascii?Q?Bi2zEHIItHx6eQkXfxi9C52LGtaZdkSWCIwfTbkjP/vCfX+EpCZKGGv3FuzG?= =?us-ascii?Q?igDziNuo3yggs5+cl+CAjZeDZGPdKbLnPzTtaDRwcsFMae/KEcyG3Sae4vkR?= =?us-ascii?Q?3l7g+crxkGUNk7rG8ZdqorQ1CG1XVP7ppeNVgcYZzZDS2poJ09S23ySVosxH?= =?us-ascii?Q?ULka7cAXlmB4ojrcS5petY3IrMfuUf5jRT/azysqeslwt+gkStXyewPG0Wd9?= =?us-ascii?Q?gNmLdz+LZuf3nKyjuLm97GVdA9I2QSUgfOj8pZzo/SKcrpqOVdVm4+ohkurX?= =?us-ascii?Q?EzgdaeCXeC6JM5VBqV0SyzoWS/+rwzFTlryOTQeWWZHDlR+FZO3GRtqWFu9G?= =?us-ascii?Q?gEd+ut6ph4Fmg7DPv08nVWb+BGfjnsv/U7LYmZR5Y5i3lCRsQUOKi1XmyPGU?= =?us-ascii?Q?C89Muf/W/pYprf+oV6Y4MzN/8czy1c9na9DrWvjVH/99g58dY/sp/fg2i87+?= =?us-ascii?Q?EiHEEb3mwOecpOxyelZsDi/mIkMzxfBuN5AHQzYXnunKUQlJm57bjNgTrejl?= =?us-ascii?Q?I7dnrdkQFW6N/DQ3SaclJopW207i/Q9jUKNdByqqGjc1HBFDOHoBoWTgQ1Sb?= =?us-ascii?Q?snbuUIlc6SqOIO2Jxrp9B5wWWMQY1UTSQ2/H7jCBt8wNRs78jVXBR?= X-Microsoft-Antispam-Message-Info: ufruMxJ/xSgWH2xXvke4ejyqkOaDjPTX1i2jNumm97RoQIHHXi9bxawJnQRiBG2+Jqy0zEGDcSVOl09TVurPoEWLCJ62uYBK9FukcrWFyk9ywAJpkzXMv+WsCQyIc0WFeW0lLNnSdNVX7pvEuYSnN3kVtx9l098VlDcMi6BNR0TYR0IIssoLV1zpRNSURMlIIaCSb5XqT+qWEXOF93sUtoHSrKmeLr+7TDRjahOPVfaFz8iHeQpvHHeQtTbguwhW5HAUE5X5l15e7/80RaPQjbhi2AMSZWZ+4qaJO7bXNyBpHyQzQ23FL1g+YgdNfSrTXriWNGa6YP62kjgPBkQsVBBd1yajr0yjSmtobXvlpqk= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 6:2zUP1HpBFPKGzV2lk9tVOKlS/0AqiA/QMlmbpWQXkoS2LQrEpreKQmp1jZn8Yrjog0dyhz7rF0BLyR0Bb+84lPVJkTmhYUz6tfPxv0q7R1E3jypMCXgS5Ooxu8cwboQjfE5bEXnKCci6MEMfEmb1AtQ1614g+/0TZ4ulp5Bm9t4RB27Bmn5G7ZzF21eYUrk0Tka9S9KkEP4H3bJns0B3rZQGwgzGNxhSN7XTqZA3Qrgslq7C8x8tlMT7RjW+La0nZUZFgXyHtQUw+g7P/ec1mg+tixeQg2xzF8kfPEjYJs29GoxXyEOyYUmVVXxOr88NwR88V8UM7cKh0jxn2SucVM4M1SAPYuWPWTuZ7MuX9RgJoO3JeblBjhJ4T4S+wXaBOUAF/UhQXV5QpqTuOsCzX5OmfNtsrzFrg7mZFj+1+xE4+dwcHTRxUi7ppR8xqaCCiHVP+joT/G7QXLQyPd/YDA==; 5:datWcQma3Y9+x0ycI6GfuecOcAtiDjY9FWZNO8vUod+58foLuAScCx/aRS3fn5+3pNfiyMe/anibuezuJjA4v2sQ5dIiMkxQPCvWvBCsj2RMJPSzQWHHb7L/30XHTiJxrRq4Mxzw4M6qDggKOyqY+7UHqHBXSOX2+VsKy4AfaxI=; 7:fI5/Ntj8KrYgpSrw6NJWeToXvOLFMU2CTkJVWEvFg6B6YBQnraYxPiWKi0e1bAz2FNQpTxbSSeFSSFMrrHc0liEfDl9YNB21WhkbOd42HNqIZE+7RzTZQgkdM3YJYs25D2I6kPi8PxvWN5iKcKbX/+3YnMcq9B37/sr0ebbmcl9gbYnMaetpA/txICh8B7+uqgNX9nm2VaYkQAgkUdOAtFFYZbw/Xqpfzm4S3WIiRz8kuoLyeWWhs2a4lbD3LTIO SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2018 02:10:42.4837 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: de9319a8-7148-4753-db6c-08d5f366287b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2041 Subject: [dpdk-stable] patch 'net/qede: fix VF MTU update' has been queued to LTS release 17.11.4 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: , X-List-Received-Date: Fri, 27 Jul 2018 02:10:47 -0000 Hi, FYI, your patch has been queued to LTS release 17.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/28/18. So please shout if anyone has objections. Thanks. Yongseok --- >>From 5ca5cdc9b0f682b7614156f182982d268cf0c5b1 Mon Sep 17 00:00:00 2001 From: Rasesh Mody Date: Tue, 22 May 2018 16:16:03 -0700 Subject: [PATCH] net/qede: fix VF MTU update [ upstream commit d121a6b5f781525f65257920e97c1f033229f5e8 ] This patch fixes VF MTU update to work without having to restart the vport and there by not requiring port re-configuration. It adds a VF MTU Update TLV to achieve the same. Firmware can handle VF MTU update by just pausing the vport. Fixes: dd28bc8c6ef4 ("net/qede: fix VF port creation sequence") Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_sriov.c | 44 +++++++++++++ drivers/net/qede/base/ecore_vf.c | 33 ++++++++++ drivers/net/qede/base/ecore_vf.h | 9 +++ drivers/net/qede/base/ecore_vfpf_if.h | 16 +++++ drivers/net/qede/qede_ethdev.c | 120 ++++++++++++++++++++-------------- drivers/net/qede/qede_ethdev.h | 1 + 6 files changed, 175 insertions(+), 48 deletions(-) diff --git a/drivers/net/qede/base/ecore_sriov.c b/drivers/net/qede/base/ecore_sriov.c index 68f40f8a0..1c885e1cc 100644 --- a/drivers/net/qede/base/ecore_sriov.c +++ b/drivers/net/qede/base/ecore_sriov.c @@ -61,6 +61,8 @@ const char *ecore_channel_tlvs_string[] = { "CHANNEL_TLV_COALESCE_UPDATE", "CHANNEL_TLV_QID", "CHANNEL_TLV_COALESCE_READ", + "CHANNEL_TLV_BULLETIN_UPDATE_MAC", + "CHANNEL_TLV_UPDATE_MTU", "CHANNEL_TLV_MAX" }; @@ -2854,6 +2856,45 @@ out: length, status); } +static enum _ecore_status_t +ecore_iov_vf_pf_update_mtu(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + struct ecore_vf_info *p_vf) +{ + struct ecore_iov_vf_mbx *mbx = &p_vf->vf_mbx; + struct ecore_sp_vport_update_params params; + enum _ecore_status_t rc = ECORE_SUCCESS; + struct vfpf_update_mtu_tlv *p_req; + u8 status = PFVF_STATUS_SUCCESS; + + /* Valiate PF can send such a request */ + if (!p_vf->vport_instance) { + DP_VERBOSE(p_hwfn, ECORE_MSG_IOV, + "No VPORT instance available for VF[%d], failing MTU update\n", + p_vf->abs_vf_id); + status = PFVF_STATUS_FAILURE; + goto send_status; + } + + p_req = &mbx->req_virt->update_mtu; + + OSAL_MEMSET(¶ms, 0, sizeof(params)); + params.opaque_fid = p_vf->opaque_fid; + params.vport_id = p_vf->vport_id; + params.mtu = p_req->mtu; + rc = ecore_sp_vport_update(p_hwfn, ¶ms, ECORE_SPQ_MODE_EBLOCK, + OSAL_NULL); + + if (rc) + status = PFVF_STATUS_FAILURE; +send_status: + ecore_iov_prepare_resp(p_hwfn, p_ptt, p_vf, + CHANNEL_TLV_UPDATE_MTU, + sizeof(struct pfvf_def_resp_tlv), + status); + return rc; +} + void *ecore_iov_search_list_tlvs(struct ecore_hwfn *p_hwfn, void *p_tlvs_list, u16 req_type) { @@ -4136,6 +4177,9 @@ void ecore_iov_process_mbx_req(struct ecore_hwfn *p_hwfn, case CHANNEL_TLV_COALESCE_READ: ecore_iov_vf_pf_get_coalesce(p_hwfn, p_ptt, p_vf); break; + case CHANNEL_TLV_UPDATE_MTU: + ecore_iov_vf_pf_update_mtu(p_hwfn, p_ptt, p_vf); + break; } } else if (ecore_iov_tlv_supported(mbx->first_tlv.tl.type)) { /* If we've received a message from a VF we consider malicious diff --git a/drivers/net/qede/base/ecore_vf.c b/drivers/net/qede/base/ecore_vf.c index 8a08911a3..334db6b97 100644 --- a/drivers/net/qede/base/ecore_vf.c +++ b/drivers/net/qede/base/ecore_vf.c @@ -1628,6 +1628,39 @@ exit: return rc; } +enum _ecore_status_t +ecore_vf_pf_update_mtu(struct ecore_hwfn *p_hwfn, u16 mtu) +{ + struct ecore_vf_iov *p_iov = p_hwfn->vf_iov_info; + struct vfpf_update_mtu_tlv *p_req; + struct pfvf_def_resp_tlv *p_resp; + enum _ecore_status_t rc; + + if (!mtu) + return ECORE_INVAL; + + /* clear mailbox and prep header tlv */ + p_req = ecore_vf_pf_prep(p_hwfn, CHANNEL_TLV_UPDATE_MTU, + sizeof(*p_req)); + p_req->mtu = mtu; + DP_VERBOSE(p_hwfn, ECORE_MSG_IOV, + "Requesting MTU update to %d\n", mtu); + + /* add list termination tlv */ + ecore_add_tlv(&p_iov->offset, + CHANNEL_TLV_LIST_END, + sizeof(struct channel_list_end_tlv)); + + p_resp = &p_iov->pf2vf_reply->default_resp; + rc = ecore_send_msg2pf(p_hwfn, &p_resp->hdr.status, sizeof(*p_resp)); + if (p_resp->hdr.status == PFVF_STATUS_NOT_SUPPORTED) + rc = ECORE_INVAL; + + ecore_vf_pf_req_end(p_hwfn, rc); + + return rc; +} + u16 ecore_vf_get_igu_sb_id(struct ecore_hwfn *p_hwfn, u16 sb_id) { diff --git a/drivers/net/qede/base/ecore_vf.h b/drivers/net/qede/base/ecore_vf.h index de2758cbd..e5555bb1e 100644 --- a/drivers/net/qede/base/ecore_vf.h +++ b/drivers/net/qede/base/ecore_vf.h @@ -319,5 +319,14 @@ void ecore_vf_set_vf_start_tunn_update_param(struct ecore_tunnel_info *p_tun); u32 ecore_vf_hw_bar_size(struct ecore_hwfn *p_hwfn, enum BAR_ID bar_id); + +/** + * @brief - ecore_vf_pf_update_mtu Update MTU for VF. + * + * @param p_hwfn + * @param - mtu + */ +enum _ecore_status_t +ecore_vf_pf_update_mtu(struct ecore_hwfn *p_hwfn, u16 mtu); #endif #endif /* __ECORE_VF_H__ */ diff --git a/drivers/net/qede/base/ecore_vfpf_if.h b/drivers/net/qede/base/ecore_vfpf_if.h index c6af9caf7..08b1f2484 100644 --- a/drivers/net/qede/base/ecore_vfpf_if.h +++ b/drivers/net/qede/base/ecore_vfpf_if.h @@ -531,6 +531,18 @@ struct pfvf_read_coal_resp_tlv { u8 padding[6]; }; +struct vfpf_bulletin_update_mac_tlv { + struct vfpf_first_tlv first_tlv; + u8 mac[ETH_ALEN]; + u8 padding[2]; +}; + +struct vfpf_update_mtu_tlv { + struct vfpf_first_tlv first_tlv; + u16 mtu; + u8 padding[6]; +}; + union vfpf_tlvs { struct vfpf_first_tlv first_tlv; struct vfpf_acquire_tlv acquire; @@ -545,6 +557,8 @@ union vfpf_tlvs { struct vfpf_update_tunn_param_tlv tunn_param_update; struct vfpf_update_coalesce update_coalesce; struct vfpf_read_coal_req_tlv read_coal_req; + struct vfpf_bulletin_update_mac_tlv bulletin_update_mac; + struct vfpf_update_mtu_tlv update_mtu; struct tlv_buffer_size tlv_buf_size; }; @@ -675,6 +689,8 @@ enum { CHANNEL_TLV_COALESCE_UPDATE, CHANNEL_TLV_QID, CHANNEL_TLV_COALESCE_READ, + CHANNEL_TLV_BULLETIN_UPDATE_MAC, + CHANNEL_TLV_UPDATE_MTU, CHANNEL_TLV_MAX, /* Required for iterating over vport-update tlvs. diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 7462f1ad7..c63b4d5c9 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -597,37 +597,6 @@ int qede_enable_tpa(struct rte_eth_dev *eth_dev, bool flg) return 0; } -/* Update MTU via vport-update without doing port restart. - * The vport must be deactivated before calling this API. - */ -int qede_update_mtu(struct rte_eth_dev *eth_dev, uint16_t mtu) -{ - struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); - struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); - struct ecore_sp_vport_update_params params; - struct ecore_hwfn *p_hwfn; - int rc; - int i; - - memset(¶ms, 0, sizeof(struct ecore_sp_vport_update_params)); - params.vport_id = 0; - params.mtu = mtu; - params.vport_id = 0; - for_each_hwfn(edev, i) { - p_hwfn = &edev->hwfns[i]; - params.opaque_fid = p_hwfn->hw_info.opaque_fid; - rc = ecore_sp_vport_update(p_hwfn, ¶ms, - ECORE_SPQ_MODE_EBLOCK, NULL); - if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Failed to update MTU\n"); - return -1; - } - } - DP_INFO(edev, "MTU updated to %u\n", mtu); - - return 0; -} - static void qede_set_ucast_cmn_params(struct ecore_filter_ucast *ucast) { memset(ucast, 0, sizeof(struct ecore_filter_ucast)); @@ -1182,6 +1151,12 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) PMD_INIT_FUNC_TRACE(edev); + /* Update MTU only if it has changed */ + if (eth_dev->data->mtu != qdev->mtu) { + if (qede_update_mtu(eth_dev, qdev->mtu)) + goto err; + } + /* Configure TPA parameters */ if (rxmode->enable_lro) { if (qede_enable_tpa(eth_dev, true)) @@ -1932,6 +1907,72 @@ qede_set_mc_addr_list(struct rte_eth_dev *eth_dev, struct ether_addr *mc_addrs, return qede_add_mcast_filters(eth_dev, mc_addrs, mc_addrs_num); } +/* Update MTU via vport-update without doing port restart. + * The vport must be deactivated before calling this API. + */ +int qede_update_mtu(struct rte_eth_dev *eth_dev, uint16_t mtu) +{ + struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); + struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); + struct ecore_hwfn *p_hwfn; + int rc; + int i; + + if (IS_PF(edev)) { + struct ecore_sp_vport_update_params params; + + memset(¶ms, 0, sizeof(struct ecore_sp_vport_update_params)); + params.vport_id = 0; + params.mtu = mtu; + params.vport_id = 0; + for_each_hwfn(edev, i) { + p_hwfn = &edev->hwfns[i]; + params.opaque_fid = p_hwfn->hw_info.opaque_fid; + rc = ecore_sp_vport_update(p_hwfn, ¶ms, + ECORE_SPQ_MODE_EBLOCK, NULL); + if (rc != ECORE_SUCCESS) + goto err; + } + } else { + for_each_hwfn(edev, i) { + p_hwfn = &edev->hwfns[i]; + rc = ecore_vf_pf_update_mtu(p_hwfn, mtu); + if (rc == ECORE_INVAL) { + DP_INFO(edev, "VF MTU Update TLV not supported\n"); + /* Recreate vport */ + rc = qede_start_vport(qdev, mtu); + if (rc != ECORE_SUCCESS) + goto err; + + /* Restore config lost due to vport stop */ + qede_mac_addr_set(eth_dev, &qdev->primary_mac); + + if (eth_dev->data->promiscuous) + qede_promiscuous_enable(eth_dev); + else + qede_promiscuous_disable(eth_dev); + + if (eth_dev->data->all_multicast) + qede_allmulticast_enable(eth_dev); + else + qede_allmulticast_disable(eth_dev); + + qede_vlan_offload_set(eth_dev, + qdev->vlan_offload_mask); + } else if (rc != ECORE_SUCCESS) { + goto err; + } + } + } + DP_INFO(edev, "%s MTU updated to %u\n", IS_PF(edev) ? "PF" : "VF", mtu); + + return 0; + +err: + DP_ERR(edev, "Failed to update MTU\n"); + return -1; +} + static int qede_flow_ctrl_set(struct rte_eth_dev *eth_dev, struct rte_eth_fc_conf *fc_conf) { @@ -2337,7 +2378,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) qede_mac_addr_remove(dev, 0); } rte_delay_ms(1000); - qede_start_vport(qdev, mtu); /* Recreate vport */ qdev->mtu = mtu; /* Fix up RX buf size for all queues of the port */ @@ -2361,22 +2401,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) else dev->data->dev_conf.rxmode.jumbo_frame = 0; - /* Restore config lost due to vport stop */ - if (IS_PF(edev)) - qede_mac_addr_set(dev, &qdev->primary_mac); - - if (dev->data->promiscuous) - qede_promiscuous_enable(dev); - else - qede_promiscuous_disable(dev); - - if (dev->data->all_multicast) - qede_allmulticast_enable(dev); - else - qede_allmulticast_disable(dev); - - qede_vlan_offload_set(dev, qdev->vlan_offload_mask); - if (!dev->data->dev_started && restart) { qede_dev_start(dev); dev->data->dev_started = 1; diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h index 2145aa6d7..cc1a409f6 100644 --- a/drivers/net/qede/qede_ethdev.h +++ b/drivers/net/qede/qede_ethdev.h @@ -34,6 +34,7 @@ #include "base/nvm_cfg.h" #include "base/ecore_sp_commands.h" #include "base/ecore_l2.h" +#include "base/ecore_vf.h" #include "qede_logs.h" #include "qede_if.h" -- 2.11.0