From patchwork Mon Jun 10 07:38:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 54603 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 08DDE1BF29; Mon, 10 Jun 2019 09:39:34 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id E56D11BE99 for ; Mon, 10 Jun 2019 09:38:58 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 088AC140058 for ; Mon, 10 Jun 2019 07:38:58 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 10 Jun 2019 00:38:51 -0700 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Mon, 10 Jun 2019 00:38:51 -0700 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x5A7coI4008853; Mon, 10 Jun 2019 08:38:50 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 25B581627D7; Mon, 10 Jun 2019 08:38:50 +0100 (BST) From: Andrew Rybchenko To: CC: Gautam Dawar Date: Mon, 10 Jun 2019 08:38:38 +0100 Message-ID: <1560152324-20538-24-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1560152324-20538-1-git-send-email-arybchenko@solarflare.com> References: <1560152324-20538-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24664.003 X-TM-AS-Result: No-2.929100-4.000000-10 X-TMASE-MatchedRID: OquRQqK4bvG6bGUitkk6tYS/TV9k6ppAi+LM40HvEjr3auHSPFNajIe+ CwLSDva2Du0z8LaZf3yZ0xXMuWZYFNoA6mgeU1rtqjZ865FPtpqUJUL9rlPx4tEsTITobgNENyJ PoNqwWLIpYtwcKJmmRlO9V994jC9DwdU14NatZIacVWc2a+/ju0tc8DbogbSED0EafLhpb0gS99 dUV0LYkuOrxWvuBMZu7CR1KwTNxSdhjejNb4SeB2WnA2xO92Up+kAbwAcaQfFWw5sMt9VCxON7x qD5/++ZQbq9uSe08OpWbn2uBjV4xgHFuf1kmWogRaPXfvn+kep9LQinZ4QefPcjNeVeWlqY+gtH j7OwNO2W79Uq8KMo9Uz/wcOHb2bGqGYUFOKhurQoIKfFuIeds1eyeqidy0ZiSjWXaFNWo97RIq4 mU0GbMWjrKElOTVbkWFZUY3B6E0DU8fVtbXthftpAu0sLxpSoQ8G+yYJYYdZRZDsGiXQioBjm28 f1HLY3 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.929100-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24664.003 X-MDID: 1560152338-w4ihaGNWQTOs Subject: [dpdk-dev] [PATCH 23/29] net/sfc/base: support data path with EVB module X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Gautam Dawar ef10_nic_init() allocates a vAdaptor for the physical port in current flow. In case of SR-IOV, this vAdaptor must be created for the PF as the vSwitch is allocated on the physical port. So, the call to efx_mcdi_vadaptor_alloc() should be avoided in ef10_nic_init() in SR-IOV flow. To achieve this, for SR-IOV use case, the vSwitch is created before NIC initialization and its handle is used to prevent vAdaptor allocation in ef10_nic_init(). This approach has been taken to minimize the changes in NIC initilization flow. This is also the case with Linux driver where vSwitch creation happens before NIC initialization. Also, when DMA queues need to be allocated for Tx/Rx functionality (MC_CMD_INIT_RXQ / MC_CMD_INIT_TXQ), the correct vPort is selected based on efx_vswitch_t property of efx_nic_t structure - vport corresponding to PF in case of SR-IOV use case and EVB_PORT_ID_ASSIGNED for physical port. Signed-off-by: Gautam Dawar Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/base/ef10_filter.c | 3 +-- drivers/net/sfc/base/ef10_nic.c | 18 ++++++++++++++---- drivers/net/sfc/base/ef10_rx.c | 4 ++-- drivers/net/sfc/base/ef10_tx.c | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/sfc/base/ef10_filter.c b/drivers/net/sfc/base/ef10_filter.c index 9c09a0d..e4f8de5 100644 --- a/drivers/net/sfc/base/ef10_filter.c +++ b/drivers/net/sfc/base/ef10_filter.c @@ -202,8 +202,7 @@ goto fail1; } - MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_PORT_ID, - EVB_PORT_ID_ASSIGNED); + MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_PORT_ID, enp->en_vport_id); MCDI_IN_SET_DWORD(req, FILTER_OP_EXT_IN_MATCH_FIELDS, match_flags); if (spec->efs_dmaq_id == EFX_FILTER_SPEC_RX_DMAQ_ID_DROP) { diff --git a/drivers/net/sfc/base/ef10_nic.c b/drivers/net/sfc/base/ef10_nic.c index 0cf9ddd..a647daa 100644 --- a/drivers/net/sfc/base/ef10_nic.c +++ b/drivers/net/sfc/base/ef10_nic.c @@ -233,8 +233,6 @@ MC_CMD_VADAPTOR_ALLOC_OUT_LEN); efx_rc_t rc; - EFSYS_ASSERT3U(enp->en_vport_id, ==, EVB_PORT_ID_NULL); - req.emr_cmd = MC_CMD_VADAPTOR_ALLOC; req.emr_in_buf = payload; req.emr_in_length = MC_CMD_VADAPTOR_ALLOC_IN_LEN; @@ -2517,9 +2515,21 @@ { uint32_t i; efx_rc_t rc; + boolean_t do_vadaptor_free = B_TRUE; - (void) efx_mcdi_vadaptor_free(enp, enp->en_vport_id); - enp->en_vport_id = 0; +#if EFSYS_OPT_EVB + if (enp->en_vswitchp != NULL) { + /* + * For SR-IOV the vAdaptor is freed with the vswitch, + * so do not free it here. + */ + do_vadaptor_free = B_FALSE; + } +#endif + if (do_vadaptor_free != B_FALSE) { + (void) efx_mcdi_vadaptor_free(enp, enp->en_vport_id); + enp->en_vport_id = EVB_PORT_ID_NULL; + } /* Unlink piobufs from extra VIs in WC mapping */ if (enp->en_arch.ef10.ena_piobuf_count > 0) { diff --git a/drivers/net/sfc/base/ef10_rx.c b/drivers/net/sfc/base/ef10_rx.c index 27514c1..10eace4 100644 --- a/drivers/net/sfc/base/ef10_rx.c +++ b/drivers/net/sfc/base/ef10_rx.c @@ -106,7 +106,7 @@ INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES, want_outer_classes, INIT_RXQ_EXT_IN_FLAG_NO_CONT_EV, no_cont_ev); MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_OWNER_ID, 0); - MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_PORT_ID, EVB_PORT_ID_ASSIGNED); + MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_PORT_ID, enp->en_vport_id); if (es_bufs_per_desc > 0) { MCDI_IN_SET_DWORD(req, @@ -233,7 +233,7 @@ req.emr_out_length = MC_CMD_RSS_CONTEXT_ALLOC_OUT_LEN; MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_UPSTREAM_PORT_ID, - EVB_PORT_ID_ASSIGNED); + enp->en_vport_id); MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_TYPE, context_type); /* diff --git a/drivers/net/sfc/base/ef10_tx.c b/drivers/net/sfc/base/ef10_tx.c index 6a90816..90f4803 100644 --- a/drivers/net/sfc/base/ef10_tx.c +++ b/drivers/net/sfc/base/ef10_tx.c @@ -82,7 +82,7 @@ INIT_TXQ_IN_FLAG_TIMESTAMP, 0); MCDI_IN_SET_DWORD(req, INIT_TXQ_IN_OWNER_ID, 0); - MCDI_IN_SET_DWORD(req, INIT_TXQ_IN_PORT_ID, EVB_PORT_ID_ASSIGNED); + MCDI_IN_SET_DWORD(req, INIT_TXQ_IN_PORT_ID, enp->en_vport_id); dma_addr = MCDI_IN2(req, efx_qword_t, INIT_TXQ_IN_DMA_ADDR); addr = EFSYS_MEM_ADDR(esmp);