From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1F585A04B7; Tue, 13 Oct 2020 15:52:52 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F068F1DC12; Tue, 13 Oct 2020 15:46:33 +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 520321DB89 for ; Tue, 13 Oct 2020 15:46:05 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.144]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id F3F8120066 for ; Tue, 13 Oct 2020 13:46:03 +0000 (UTC) Received: from us4-mdac16-41.at1.mdlocal (unknown [10.110.48.12]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id F1097800A9 for ; Tue, 13 Oct 2020 13:46:03 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.7]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 8418A40079 for ; Tue, 13 Oct 2020 13:46:03 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (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 4DB794C006B for ; Tue, 13 Oct 2020 13:46:03 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Oct 2020 14:45:56 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 13 Oct 2020 14:45:56 +0100 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 09DDju5k006122 for ; Tue, 13 Oct 2020 14:45:56 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id B67971613AB for ; Tue, 13 Oct 2020 14:45:56 +0100 (BST) From: Andrew Rybchenko To: Date: Tue, 13 Oct 2020 14:45:45 +0100 Message-ID: <1602596753-32282-29-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> References: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25722.003 X-TM-AS-Result: No-1.558700-8.000000-10 X-TMASE-MatchedRID: Y44xtvjJ5ngfOjKSU0pCETIjK23O9D33Xs5nqGvDCfMda1Vk3RqxOPH1 /P3XLrHlVRUktA16OUAvFCLQgTvWvyL4vLWMX3pxqJSK+HSPY++FUOeR/MPu5gaYevV4zG3ZQBz oPKhLashk1QMds9nkrRBtTTe2YAcA188wdYJeJ+qSvRb8EMdYRauVOrDvB8LTBCzD0Dc8iUu+zC BFcwZbbbD/5sK/MDzJTov9vpiHYl2nBe7A3aCvpU+zv2ByYSDQUGKOMTReNj6o8aocg8ZmI6nwH gc6fuMkmEW4OYEzOt6uS1skjHW/QmauS2qhyDxUSvQm6xqmCPIisyg/lfGoZ1CaFwrbicq+2CPo pwhwO4uf6sWS8oqOHYqN5mErnj54HForOVdsRaWHZXNSWjgdUzmKihe1K2Ie4PRrWDwT3Uu5IEz bxzo0klbuCABTdWVsHY3CUAWn6LUfE8yM4pjsDwtuKBGekqUpnH7sbImOEBR+2Ht6QaCbVWDaKo n5nRUJ038FD2DOXI40XUqgjC/4D8yRb0KQpqEdSNQ5nFvDGHZFUWIk+s4UYujFuqa9lN1FBJLEJ q43qxovOSq+nxEQtagePGmIEwXO/4UC4n7D3uWJl6tigvYfL0uFvzEYSdV+ X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--1.558700-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25722.003 X-MDID: 1602596764-OALEyNOF0Ddo X-PPE-DISP: 1602596764;OALEyNOF0Ddo Subject: [dpdk-dev] [PATCH 28/36] common/sfc_efx/base: provide control to deliver RSS hash 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" When Rx queue is created, allow to specify if the driver would like to get RSS hash value calculated by the hardware. Use the flag to choose Rx prefix on Riverhead. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/ef10_rx.c | 45 +++++++++++++++++--------- drivers/common/sfc_efx/base/efx.h | 5 +++ drivers/common/sfc_efx/base/efx_rx.c | 19 +++++++++++ drivers/common/sfc_efx/base/rhead_rx.c | 9 +++--- 4 files changed, 59 insertions(+), 19 deletions(-) diff --git a/drivers/common/sfc_efx/base/ef10_rx.c b/drivers/common/sfc_efx/base/ef10_rx.c index ea5f514f18..1b4f3f0152 100644 --- a/drivers/common/sfc_efx/base/ef10_rx.c +++ b/drivers/common/sfc_efx/base/ef10_rx.c @@ -926,6 +926,10 @@ ef10_rx_qcreate( goto fail1; } erp->er_buf_size = type_data->ertd_default.ed_buf_size; + /* + * Ignore EFX_RXQ_FLAG_RSS_HASH since if RSS hash is calculated + * it is always delivered from HW in the pseudo-header. + */ break; #if EFSYS_OPT_RX_PACKED_STREAM case EFX_RXQ_TYPE_PACKED_STREAM: @@ -955,6 +959,11 @@ ef10_rx_qcreate( goto fail3; } erp->er_buf_size = type_data->ertd_packed_stream.eps_buf_size; + /* Packed stream pseudo header does not have RSS hash value */ + if (flags & EFX_RXQ_FLAG_RSS_HASH) { + rc = ENOTSUP; + goto fail4; + } break; #endif /* EFSYS_OPT_RX_PACKED_STREAM */ #if EFSYS_OPT_RX_ES_SUPER_BUFFER @@ -962,7 +971,7 @@ ef10_rx_qcreate( erpl = &ef10_essb_rx_prefix_layout; if (type_data == NULL) { rc = EINVAL; - goto fail4; + goto fail5; } params.es_bufs_per_desc = type_data->ertd_es_super_buffer.eessb_bufs_per_desc; @@ -972,11 +981,15 @@ ef10_rx_qcreate( type_data->ertd_es_super_buffer.eessb_buf_stride; params.hol_block_timeout = type_data->ertd_es_super_buffer.eessb_hol_block_timeout; + /* + * Ignore EFX_RXQ_FLAG_RSS_HASH since if RSS hash is calculated + * it is always delivered from HW in the pseudo-header. + */ break; #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ default: rc = ENOTSUP; - goto fail5; + goto fail6; } #if EFSYS_OPT_RX_PACKED_STREAM @@ -984,13 +997,13 @@ ef10_rx_qcreate( /* Check if datapath firmware supports packed stream mode */ if (encp->enc_rx_packed_stream_supported == B_FALSE) { rc = ENOTSUP; - goto fail6; + goto fail7; } /* Check if packed stream allows configurable buffer sizes */ if ((params.ps_buf_size != MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M) && (encp->enc_rx_var_packed_stream_supported == B_FALSE)) { rc = ENOTSUP; - goto fail7; + goto fail8; } } #else /* EFSYS_OPT_RX_PACKED_STREAM */ @@ -1001,17 +1014,17 @@ ef10_rx_qcreate( if (params.es_bufs_per_desc > 0) { if (encp->enc_rx_es_super_buffer_supported == B_FALSE) { rc = ENOTSUP; - goto fail8; + goto fail9; } if (!EFX_IS_P2ALIGNED(uint32_t, params.es_max_dma_len, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail9; + goto fail10; } if (!EFX_IS_P2ALIGNED(uint32_t, params.es_buf_stride, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail10; + goto fail11; } } #else /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ @@ -1031,7 +1044,7 @@ ef10_rx_qcreate( if ((rc = efx_mcdi_init_rxq(enp, ndescs, eep, label, index, esmp, ¶ms)) != 0) - goto fail11; + goto fail12; erp->er_eep = eep; erp->er_label = label; @@ -1044,29 +1057,31 @@ ef10_rx_qcreate( return (0); +fail12: + EFSYS_PROBE(fail12); +#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail11: EFSYS_PROBE(fail11); -#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail10: EFSYS_PROBE(fail10); fail9: EFSYS_PROBE(fail9); -fail8: - EFSYS_PROBE(fail8); #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ #if EFSYS_OPT_RX_PACKED_STREAM +fail8: + EFSYS_PROBE(fail8); fail7: EFSYS_PROBE(fail7); +#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail6: EFSYS_PROBE(fail6); -#endif /* EFSYS_OPT_RX_PACKED_STREAM */ +#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail5: EFSYS_PROBE(fail5); -#if EFSYS_OPT_RX_ES_SUPER_BUFFER -fail4: - EFSYS_PROBE(fail4); #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ #if EFSYS_OPT_RX_PACKED_STREAM +fail4: + EFSYS_PROBE(fail4); fail3: EFSYS_PROBE(fail3); fail2: diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index 4b7beb209d..406e96caf8 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -2948,6 +2948,11 @@ typedef enum efx_rxq_type_e { * Rx checksum offload results. */ #define EFX_RXQ_FLAG_INNER_CLASSES 0x2 +/* + * Request delivery of the RSS hash calculated by HW to be used by + * the driver. + */ +#define EFX_RXQ_FLAG_RSS_HASH 0x4 LIBEFX_API extern __checkReturn efx_rc_t diff --git a/drivers/common/sfc_efx/base/efx_rx.c b/drivers/common/sfc_efx/base/efx_rx.c index 3536b0eb07..d6b56fec48 100644 --- a/drivers/common/sfc_efx/base/efx_rx.c +++ b/drivers/common/sfc_efx/base/efx_rx.c @@ -889,11 +889,26 @@ efx_rx_qcreate_internal( ndescs, id, flags, eep, erp)) != 0) goto fail4; + /* Sanity check queue creation result */ + if (flags & EFX_RXQ_FLAG_RSS_HASH) { + const efx_rx_prefix_layout_t *erplp = &erp->er_prefix_layout; + const efx_rx_prefix_field_info_t *rss_hash_field; + + rss_hash_field = + &erplp->erpl_fields[EFX_RX_PREFIX_FIELD_RSS_HASH]; + if (rss_hash_field->erpfi_width_bits == 0) + goto fail5; + } + enp->en_rx_qcount++; *erpp = erp; return (0); +fail5: + EFSYS_PROBE(fail5); + + erxop->erxo_qdestroy(erp); fail4: EFSYS_PROBE(fail4); @@ -1717,6 +1732,10 @@ siena_rx_qcreate( switch (type) { case EFX_RXQ_TYPE_DEFAULT: erp->er_buf_size = type_data->ertd_default.ed_buf_size; + /* + * Ignore EFX_RXQ_FLAG_RSS_HASH since if RSS hash is calculated + * it is always delivered from HW in the pseudo-header. + */ break; default: diff --git a/drivers/common/sfc_efx/base/rhead_rx.c b/drivers/common/sfc_efx/base/rhead_rx.c index d3d7339b8c..b6f9d51fef 100644 --- a/drivers/common/sfc_efx/base/rhead_rx.c +++ b/drivers/common/sfc_efx/base/rhead_rx.c @@ -624,13 +624,14 @@ rhead_rx_qcreate( else params.disable_scatter = encp->enc_rx_disable_scatter_supported; + if (flags & EFX_RXQ_FLAG_RSS_HASH) { + fields_mask |= 1U << EFX_RX_PREFIX_FIELD_RSS_HASH; + fields_mask |= 1U << EFX_RX_PREFIX_FIELD_RSS_HASH_VALID; + } + /* * LENGTH is required in EF100 host interface, as receive events * do not include the packet length. - * NOTE: Required fields are hard-wired now. Future designs will - * want to allow the client (driver) code to have control over - * which fields are required or may be allow to request so-called - * default Rx prefix (which ID is equal to 0). */ fields_mask |= 1U << EFX_RX_PREFIX_FIELD_LENGTH; if ((rc = rhead_rx_choose_prefix_id(enp, fields_mask, &erpl)) != 0) -- 2.17.1