From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0076.outbound.protection.outlook.com [104.47.37.76]) by dpdk.org (Postfix) with ESMTP id 8EA081AFFF for ; Fri, 8 Jun 2018 02:51:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oyhFqBbE4JA62h+jXa1x8nu4ix5ZwYQ0sX8vrFsh31k=; b=R1bbyalc2FRAP/UpeTeFaHevMIdpm3Ki2pZi12MYYF3PtVk5N+aBZwxilJFbAsAHo5c4GNfkA+bAlKCeFDeoYAolKvsqMJNx7awthdV0LUw95Qyv4ksUryLD0hkh57/+3jCgQMO0Rl/N6COj3lLpJGnUwW2jzGrEeVQb4mP1TzY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by SN1PR07MB4031.namprd07.prod.outlook.com (2603:10b6:802:2b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.841.16; Fri, 8 Jun 2018 00:51:25 +0000 From: Rasesh Mody To: stable@dpdk.org Cc: Harish Patil , yliu@fridaylinux.org, Dept-EngDPDKDev@cavium.com, Rasesh Mody Date: Thu, 7 Jun 2018 17:51:10 -0700 Message-Id: <1528419074-18954-1-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BYAPR01CA0014.prod.exchangelabs.com (2603:10b6:a02:80::27) To SN1PR07MB4031.namprd07.prod.outlook.com (2603:10b6:802:2b::14) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(2017052603328)(7153060)(7193020); SRVR:SN1PR07MB4031; X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB4031; 3:r3GWgFactR7zBI0w9VOCj1Ft1rkN0F7bArQQo0CSUDZNHPZ24FKyY3/OXHNKuJ1bHSSd7HPGBwE3vyEMbnq2vO21Y6Qa8xeMBxVVXKZhUTmzxqOKgd/MU8kv1s0pLbOBxJdKjfO1s7o4cnkiozVysw8DQUDCT2YwCO+aQkx8wooRNiDX0LVBilE0jyRID0FydAH1HRS6N69hDX/bHDsTXX+M8vs9+F6FUeqpwqP/TT1eb22/peJhawmuCBUPyXOq; 25:Kw6+EJstKzFLYqnygDy/3lATh5P8ic4IBvnmeZhtjkEVM1ax0iCS1OTv8bvijc1twgiivs6VWt5dlsUIyzzLFjbstTiRIyKBk2wyN9rO4pz2ETTdrKJfC+9AIQZfYyB9tMZ7V12K1tNAfqsWakENY34fzg4Twnp+NVx/pZsBgnBoxQrz56eMPs8jHvbksTLCnj3pZxHaS/SG2pWQ478Ssara7G7/AqZeFy58stxgtGsfCgMR6g7sKnJqQohtE0KX1cc5YSsOwNyl7pSQSYPdjtKKP/TM9OlHQ0N/R1qMoViXAtppH4NvjO4YWHGe8/aSnfIonGjlJKUJrRT6neY7Iw==; 31:KsHeNUpMNqMMfUsMjmv7Q+uv/gyVIwXOUBB4W2xw3iLu1/UxPP46Y2okTVlOgaqWgS0hIJBt2JIUkn6R2+m1ePBhOlXMYS+WBCO4W5cCxjjVvo7VEml0Z+iDpGK7tKwW6XSo3CztjmlLj0UkBDaRYbEUgKv434UYroMZAEjJUod/rh4v3ixmKF9A5ChjaE8edxh6NGQPotP/OyGPzf7MEZZfMz7AjOoiwH9b4Sp7wO0= X-MS-TrafficTypeDiagnostic: SN1PR07MB4031: X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB4031; 20:Rmm52ZjcHSeFacoIxF1C+Q0Oa78IySWxY53I43ZIbSjQb5Rsu/lK8PTXRhWnOMApkwY8hLp8OL+BHcJiywC9vmwz8Rm77YP6JjnyVn0E2/jn6wQCA0BTqlZjDsnyX5YsgAtDyzgqHWxfPGdPcd6aFX+Ncy20RfwxI9AQST1ErtjQ2O1lFZmTRXbElwe5J9lspw70irj1FtNZgtZHmPGH/N6kZ9maqdwd1kgR5ECJvUp0mEtyN0Gx0WRxLZ5orLwodJniiYtO+KzcuLSK8QiYp2YquKbAL/r9UE29dLbTz0rCu1bqf6Waajn5y4Dn2ZaKotiAe4rjWPZNzF5yNRXj8WQYKDMj9K0k9W4iA3QglRhAAzC9YNu0xI8HkYG0TccKjTG8BWjq368w2TTxrD6Uhb8TCe9s1CL4/gew4Ocv8HSaB/314t+NQ5/0A8F9qEgM8VrGLEbKb4ToFapGhl0uSqC/zYBfz4vazb9Bm0mayq6BU7YCdqI1d67DY+dJ7q/H; 4:nrPtWrWJwkCLfnuTVeQWJJlW8jAhikqexpZFr6xbO9XfZezLMHidyMIlBq6tfa/0WALJGw8msPPOw8sCk+Jw0trUhuRdenfcEd0K/sZM63Cg643TuNr0xbNrfvfg+6tVQSynHyhDilgI6ZTBnUanJKy16+UOgPCHyNG71jAsixtv27J+hsPn3wJtvFPwrporbyEKfTMBwk7M/KhhxCaSGKYcSd69g89/g7IYBtfxC2jrFSGwVkUe+bmJompbqw7x6ZGBFuvTVyE31gFOIl0c4g== 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)(3002001)(3231254)(944501410)(52105095)(10201501046)(93006095)(93001095)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:SN1PR07MB4031; BCL:0; PCL:0; RULEID:; SRVR:SN1PR07MB4031; X-Forefront-PRVS: 06973FFAD3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(366004)(39860400002)(346002)(396003)(376002)(199004)(189003)(25786009)(81166006)(55016002)(50226002)(6116002)(3846002)(50466002)(81156014)(21086003)(16586007)(486006)(53936002)(7736002)(72206003)(305945005)(8936002)(2616005)(26005)(476003)(48376002)(316002)(956004)(44832011)(7696005)(52116002)(54906003)(86362001)(97736004)(186003)(16526019)(51416003)(386003)(106356001)(5660300001)(6916009)(2906002)(4720700003)(69596002)(8676002)(47776003)(59450400001)(68736007)(2361001)(6666003)(2351001)(66066001)(4326008)(36756003)(478600001)(107886003)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR07MB4031; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR07MB4031; 23:k7/LRQZ7wfhVYoR4Yk3QOnlQ5GHkNPbHuGY9S/ciB?= =?us-ascii?Q?VrWif2+vbUI8pyiXw7vJModBo2wJqPyREBBjN+WthpR3dmDCVSnTD/H5v8NZ?= =?us-ascii?Q?7d6XGefY7RU+NPVcXiPcJ0eE10kQlGL7DCuOX1fIV8ut+/VKwltU4I1pKtSR?= =?us-ascii?Q?4sFgao9bpLO3U8K7jCqrxnmhLng/9f5xkM8dA06IVf/hUu9PO7qZwfJtM7dp?= =?us-ascii?Q?R5oNP9jy0xucVtKzYUluTxuxojCwcbhoyIrTc2n3sKiivXE3BtDJG6AUibqy?= =?us-ascii?Q?JuY1zOvVf5mkOQoNFvhHgxFrdRUF+N8gFjomtLVljuPLAJIqwM93x3wFZPvn?= =?us-ascii?Q?SN6T3ogV80U8toeW7kN3K6S4NtrP0HIHk8fs1DwktGZDqfIsNq0/40XtnSFy?= =?us-ascii?Q?GKbPd9ZBzCLBRR1xIe7dFgLgWi31WUgz9q8EEX9b71HWhMApxI5OzpF8OFhA?= =?us-ascii?Q?EVPAzXtD58KuuZ9owwQWEF5rUs7mPQzLxbapBDhX2b96nE6c+gg1KOlZAC5k?= =?us-ascii?Q?szcbBvSwQ48pbR+LG9oCIxY4cGHfepbukbRu+Xji/NzCMjhPuHwjpK7rxG3w?= =?us-ascii?Q?7EfMVNXnoND6LOhljzeDJGUmZimr2UxZMI+/ijo5CWPrjeyCs+Uz7mNy2VPg?= =?us-ascii?Q?dNqSXaqifEtCYLejyp3pbKZ7xtdaKLmiwL7e6I+1RMJKOA1wNqX2V4H/UqY7?= =?us-ascii?Q?nmu74kD/pJv1xjvcx+7uv42jMUHZnzmS8Q+xh7XF+yLqeZxYZyDhy5Z0038S?= =?us-ascii?Q?+BtFPpFaOiE5Hj/qa+wx4CxS0uBqxLV+Obz0koAMPRgyjOyT0hgJ/ryQC5Rt?= =?us-ascii?Q?aDH264RN/z6mZLL6+SANpeD7VY1h2x7TO00qgXEfDtdL7nmrohrD2rEzSHyr?= =?us-ascii?Q?Knrr46uyGWjVHqx1/9Jtem1c3Lnf8VY4tSEgWyZwD8SHt5sK35/UlTLhIaon?= =?us-ascii?Q?X5vnnFQQAmbRUaSvrekJbV5iXLatGeRvzscDtNjgmUTkr/MnZlfkPifPQTpW?= =?us-ascii?Q?N3yF3BM0KUDHbGqbpqTXd2VjSbWI6jMttohkEh8QOKPWz0tKH8EfcyMhB2oB?= =?us-ascii?Q?aVKuhzwIHe3IIJXKQ/VloJWo7zukoti4mBhC5XxmXq5nRBFee64ptmlACylR?= =?us-ascii?Q?J9KjnBmEZNb23nAx13dCeiU0UX4NYn2C4oo47dw23EdrMtwPib/lJ3uQ0Pdg?= =?us-ascii?Q?mBI7dIDFs3CaYvVFtGd59T/m5GblEqyEivCvZhd0r06PHExU4psnArE/C9DR?= =?us-ascii?Q?udSfMOvj8IwYQafPPUgvOTzAABpSdRJySgrUDb2lGBcaw4AA3/SFHyM/3rZE?= =?us-ascii?Q?1zyiUtKH1reguEtKayRYFcN4DCdZPYcxvAcV/cUiF/2?= X-Microsoft-Antispam-Message-Info: l2VuPqoAK6JxfpeBOVYhiadnMJWfK33hIkKBbQbZ5OFNrrCBzGFSzPMkcBi9Ym0FTJt+QP/Iary5DLE7wPApQQTOjP3rB0TVobtJgNxPGQAAafCatLTbRLpSH+rmZRr3l5lPcFYuKefnGLZjn/t3gViGOh+0qH4jTOPDK5jweY1ZSSvYhhiLtu+6X1rqO2PP X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB4031; 6:is2Givm2J+Fm8YwoGt3TrQ/DCpriBaNWy5iTYZ/j8Iap5HK0Mmp6TD51C+kIZzyi+iadQn9jTkryaSix9/n5N4mHgBhiL5aMGRtaXFvOBFjzilAiF/hrQ3Z1L+/ZYFmV6ZiPzaOq6NfrlVCZkWjWNjiaJi86g1fJkYqAKUJ5tK5lfQdBr2Ny2tibFDg+zPbqjzKvS8mClZq4UNmepbkLl7KVJlWKB8F8ctdUw6DhNRLQWmr4oB8w9PYbSpJpYgfB9//+4JuItMXHgzbW92NAjxFHH4ap13EsJd76GlgOsayNjk79OS66IzF0Zwn4nOTXGLYxBPHh3KIpJxbHJJQ2L0g3opAHaGVBoSdNKQ3EvhQezhE9/A0Humi8maoW0h9r1G4ZQNwwlQxDEkXPLCSdZBnWca9nbeKzK2/OEoRMOdD6Z1YZEGD7+1xBdX+Pg4NEj5aSe8cEozIprlYCaJdFaQ==; 5:oOyC2pOTVRKLbMtHBdESJVa95Vgnlvvxbz3JHEG99cDnAgJiaNhJfd+3aDdTCHa+XCFdNmA5L1DqrU1jmkmJf10+BqGmBWm0rv3oX7Qu3iSMu+yRl7hm8D1rfUaQsH+q5cPz93Y4RS8Wgbn7iz4M+eopz7ctxspE2ISGSNkseA0=; 24:3s8puxkeRybcyVoJu7fFb6mLblPlLij23kPY9qVme1PqDkmWx8CCstYsCaFV6HuaJXBO/3KpR9d/H5ux4s4M/I2MdUnfwg3HP9ZScxEh2dk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB4031; 7:5+EcH3Xk/0X9i3wUbMdshTixH44mhUetZ7Gp2SqNVb/Uxzea3QQN38aRqDBlEpcrJGSByByFkqQ0NKjCTtW5RRatFX7FoxsZ137H4MQXZYxDbzcAXg8PSvARbGV2Qv9gdld8tlJk5IQheO7h6uiIyadctlB/iJHLTs+TiAE+Za1M6AbN/ibZ2dmFRCi1E/fmFXuHk6M1aKpPe3eSpCnE0/uo4kU+fT29cBIFtIWkYsG4ry+sOw4gitJvLkvDFo1e X-MS-Office365-Filtering-Correlation-Id: ec98a2e2-4f02-474f-475c-08d5ccd9f67f X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2018 00:51:25.4826 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ec98a2e2-4f02-474f-475c-08d5ccd9f67f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB4031 Subject: [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence 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, 08 Jun 2018 00:51:29 -0000 From: Harish Patil [ upstream commit dd28bc8c6ef4da1a38e1589d69856936e91889f1 ] Few adjustments are required to effectively handle VF vport create/delete sequence. The problem is exposed by recent ethdev TX offload changes which requires port to be in down state before applying TX offloads. - Move vport creation from dev_init() to dev_configure() - Force to stop vport if it was already started due to previous run (restart case) - Move link state enable/disable to dev_init() and dev_close() respectively. - For MTU change, recreate vport with new MTU value and restore old config. This is necessary since VF MTU value can be changed only upon vport creation. Fixes: ec94dbc57362 ("qede: add base driver") Signed-off-by: Harish Patil Signed-off-by: Rasesh Mody --- drivers/net/qede/qede_ethdev.c | 141 ++++++++++++++++++++-------------------- drivers/net/qede/qede_ethdev.h | 3 +- drivers/net/qede/qede_rxtx.c | 4 ++ 3 files changed, 78 insertions(+), 70 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 5eec12a..15b6c27 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -443,55 +443,59 @@ static void qede_reset_queue_stats(struct qede_dev *qdev, bool xstats) } static int -qede_start_vport(struct qede_dev *qdev, uint16_t mtu) +qede_stop_vport(struct ecore_dev *edev) { - struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); - struct ecore_sp_vport_start_params params; struct ecore_hwfn *p_hwfn; + uint8_t vport_id; int rc; int i; - memset(¶ms, 0, sizeof(params)); - params.vport_id = 0; - params.mtu = mtu; - /* @DPDK - Disable FW placement */ - params.zero_placement_offset = 1; + vport_id = 0; for_each_hwfn(edev, i) { p_hwfn = &edev->hwfns[i]; - params.concrete_fid = p_hwfn->hw_info.concrete_fid; - params.opaque_fid = p_hwfn->hw_info.opaque_fid; - rc = ecore_sp_vport_start(p_hwfn, ¶ms); + rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid, + vport_id); if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Start V-PORT failed %d\n", rc); + DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc); return rc; } } - ecore_reset_vport_stats(edev); - if (IS_PF(edev)) - qede_reset_queue_stats(qdev, true); - DP_INFO(edev, "VPORT started with MTU = %u\n", mtu); + + DP_INFO(edev, "vport stopped\n"); return 0; } static int -qede_stop_vport(struct ecore_dev *edev) +qede_start_vport(struct qede_dev *qdev, uint16_t mtu) { + struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); + struct ecore_sp_vport_start_params params; struct ecore_hwfn *p_hwfn; - uint8_t vport_id; int rc; int i; - vport_id = 0; + if (qdev->vport_started) + qede_stop_vport(edev); + + memset(¶ms, 0, sizeof(params)); + params.vport_id = 0; + params.mtu = mtu; + /* @DPDK - Disable FW placement */ + params.zero_placement_offset = 1; for_each_hwfn(edev, i) { p_hwfn = &edev->hwfns[i]; - rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid, - vport_id); + params.concrete_fid = p_hwfn->hw_info.concrete_fid; + params.opaque_fid = p_hwfn->hw_info.opaque_fid; + rc = ecore_sp_vport_start(p_hwfn, ¶ms); if (rc != ECORE_SUCCESS) { - DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc); + DP_ERR(edev, "Start V-PORT failed %d\n", rc); return rc; } } + ecore_reset_vport_stats(edev); + qdev->vport_started = true; + DP_INFO(edev, "VPORT started with MTU = %u\n", mtu); return 0; } @@ -1101,6 +1105,8 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask) DP_INFO(edev, "No offloads are supported with VLAN Q-in-Q" " and classification is based on outer tag only\n"); + qdev->vlan_offload_mask = mask; + DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n", mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter); @@ -1176,13 +1182,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) PMD_INIT_FUNC_TRACE(edev); - /* Update MTU only if it has changed */ - if (qdev->mtu != qdev->new_mtu) { - if (qede_update_mtu(eth_dev, qdev->new_mtu)) - goto err; - qdev->mtu = qdev->new_mtu; - } - /* Configure TPA parameters */ if (rxmode->enable_lro) { if (qede_enable_tpa(eth_dev, true)) @@ -1196,6 +1195,9 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) if (qede_start_queues(eth_dev)) goto err; + if (IS_PF(edev)) + qede_reset_queue_stats(qdev, true); + /* Newer SR-IOV PF driver expects RX/TX queues to be started before * enabling RSS. Hence RSS configuration is deferred upto this point. * Also, we would like to retain similar behavior in PF case, so we @@ -1209,9 +1211,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev) if (qede_activate_vport(eth_dev, true)) goto err; - /* Bring-up the link */ - qede_dev_set_link_state(eth_dev, true); - /* Update link status */ qede_link_update(eth_dev, 0); @@ -1246,9 +1245,6 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev) /* Disable traffic */ ecore_hw_stop_fastpath(edev); /* TBD - loop */ - /* Bring the link down */ - qede_dev_set_link_state(eth_dev, false); - DP_INFO(edev, "Device is stopped\n"); } @@ -1375,20 +1371,11 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev) if (qede_check_fdir_support(eth_dev)) return -ENOTSUP; - /* Deallocate resources if held previously. It is needed only if the - * queue count has been changed from previous configuration. If its - * going to change then it means RX/TX queue setup will be called - * again and the fastpath pointers will be reinitialized there. - */ - if (qdev->num_tx_queues != eth_dev->data->nb_tx_queues || - qdev->num_rx_queues != eth_dev->data->nb_rx_queues) { - qede_dealloc_fp_resc(eth_dev); - /* Proceed with updated queue count */ - qdev->num_tx_queues = eth_dev->data->nb_tx_queues; - qdev->num_rx_queues = eth_dev->data->nb_rx_queues; - if (qede_alloc_fp_resc(qdev)) - return -ENOMEM; - } + qede_dealloc_fp_resc(eth_dev); + qdev->num_tx_queues = eth_dev->data->nb_tx_queues; + qdev->num_rx_queues = eth_dev->data->nb_rx_queues; + if (qede_alloc_fp_resc(qdev)) + return -ENOMEM; /* If jumbo enabled adjust MTU */ if (eth_dev->data->dev_conf.rxmode.jumbo_frame) @@ -1396,19 +1383,9 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev) eth_dev->data->dev_conf.rxmode.max_rx_pkt_len - ETHER_HDR_LEN - ETHER_CRC_LEN; - /* VF's MTU has to be set using vport-start where as - * PF's MTU can be updated via vport-update. - */ - if (IS_VF(edev)) { - if (qede_start_vport(qdev, eth_dev->data->mtu)) - return -1; - } else { - if (qede_update_mtu(eth_dev, eth_dev->data->mtu)) - return -1; - } - + if (qede_start_vport(qdev, eth_dev->data->mtu)) + return -1; qdev->mtu = eth_dev->data->mtu; - qdev->new_mtu = qdev->mtu; /* Enable VLAN offloads by default */ ret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK | @@ -1621,12 +1598,15 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev) qede_dev_stop(eth_dev); qede_stop_vport(edev); + qdev->vport_started = false; qede_fdir_dealloc_resc(eth_dev); qede_dealloc_fp_resc(eth_dev); eth_dev->data->nb_rx_queues = 0; eth_dev->data->nb_tx_queues = 0; + /* Bring the link down */ + qede_dev_set_link_state(eth_dev, false); qdev->ops->common->slowpath_stop(edev); qdev->ops->common->remove(edev); rte_intr_disable(&pci_dev->intr_handle); @@ -2325,8 +2305,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) int i; PMD_INIT_FUNC_TRACE(edev); - if (IS_VF(edev)) - return -ENOTSUP; qede_dev_info_get(dev, &dev_info); max_rx_pkt_len = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; frame_size = max_rx_pkt_len + QEDE_ETH_OVERHEAD; @@ -2353,7 +2331,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) restart = true; } rte_delay_ms(1000); - qdev->new_mtu = mtu; + qede_start_vport(qdev, mtu); /* Recreate vport */ + qdev->mtu = mtu; + /* Fix up RX buf size for all queues of the port */ for_each_rss(i) { fp = &qdev->fp_array[i]; @@ -2367,17 +2347,33 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) rx_buf_size = frame_size; rx_buf_size = QEDE_CEIL_TO_CACHE_LINE_SIZE(rx_buf_size); fp->rxq->rx_buf_size = rx_buf_size; - DP_INFO(edev, "buf_size adjusted to %u\n", rx_buf_size); + DP_INFO(edev, "RX buffer size %u\n", rx_buf_size); } } if (max_rx_pkt_len > ETHER_MAX_LEN) dev->data->dev_conf.rxmode.jumbo_frame = 1; else dev->data->dev_conf.rxmode.jumbo_frame = 0; + + /* Restore config lost due to vport stop */ + 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; } + /* update max frame size */ dev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len; /* Reassign back */ @@ -2973,6 +2969,9 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf) do_once = false; } + /* Bring-up the link */ + qede_dev_set_link_state(eth_dev, true); + adapter->num_tx_queues = 0; adapter->num_rx_queues = 0; SLIST_INIT(&adapter->fdir_info.fdir_list_head); @@ -2980,10 +2979,14 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf) SLIST_INIT(&adapter->uc_list_head); SLIST_INIT(&adapter->mc_list_head); adapter->mtu = ETHER_MTU; - adapter->new_mtu = ETHER_MTU; - if (!is_vf) - if (qede_start_vport(adapter, adapter->mtu)) - return -1; + adapter->vport_started = false; + + /* VF tunnel offloads is enabled by default in PF driver */ + adapter->vxlan.enable = true; + adapter->vxlan.num_filters = 0; + adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC | + ETH_TUNNEL_FILTER_IVLAN; + adapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT; DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", adapter->primary_mac.addr_bytes[0], diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h index 8f21b33..2145aa6 100644 --- a/drivers/net/qede/qede_ethdev.h +++ b/drivers/net/qede/qede_ethdev.h @@ -184,7 +184,6 @@ struct qede_dev { struct ecore_sb_info *sb_array; struct qede_fastpath *fp_array; uint16_t mtu; - uint16_t new_mtu; bool enable_tx_switching; bool rss_enable; struct rte_eth_rss_conf rss_conf; @@ -207,6 +206,8 @@ struct qede_dev { struct qede_fdir_info fdir_info; bool vlan_strip_flg; char drv_ver[QEDE_PMD_DRV_VER_STR_SIZE]; + bool vport_started; + int vlan_offload_mask; void *ethdev; }; diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index e61612d..69c84af 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -417,6 +417,8 @@ int qede_alloc_fp_resc(struct qede_dev *qdev) for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) { fp = &qdev->fp_array[sb_idx]; + if (!fp) + continue; fp->sb_info = rte_calloc("sb", 1, sizeof(struct ecore_sb_info), RTE_CACHE_LINE_SIZE); if (!fp->sb_info) { @@ -448,6 +450,8 @@ void qede_dealloc_fp_resc(struct rte_eth_dev *eth_dev) for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) { fp = &qdev->fp_array[sb_idx]; + if (!fp) + continue; DP_INFO(edev, "Free sb_info index 0x%x\n", fp->sb_info->igu_sb_id); if (fp->sb_info) { -- 1.7.10.3