From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8F982A00C5; Tue, 1 Feb 2022 09:50:48 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 10FEC426F3; Tue, 1 Feb 2022 09:50:15 +0100 (CET) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 6C75640685 for ; Tue, 1 Feb 2022 09:50:06 +0100 (CET) Received: from bree.oktetlabs.ru (bree.oktetlabs.ru [192.168.34.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPS id D3F5241; Tue, 1 Feb 2022 11:50:05 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru D3F5241 Authentication-Results: shelob.oktetlabs.ru/D3F5241; dkim=none; dkim-atps=neutral From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Andy Moreton Subject: [PATCH 2/8] common/sfc_efx/base: query RSS queue span limit on Riverhead Date: Tue, 1 Feb 2022 11:49:56 +0300 Message-Id: <20220201085002.320102-3-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220201085002.320102-1-ivan.malov@oktetlabs.ru> References: <20220201085002.320102-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Riverhead boards, clients can query the limit on how many queues an RSS context may address. Put the capability to use. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/ef10_nic.c | 14 ++++++++++++-- drivers/common/sfc_efx/base/ef10_rx.c | 3 ++- drivers/common/sfc_efx/base/efx.h | 7 +++++++ drivers/common/sfc_efx/base/siena_nic.c | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/common/sfc_efx/base/ef10_nic.c b/drivers/common/sfc_efx/base/ef10_nic.c index 355d274470..d9f7c0f362 100644 --- a/drivers/common/sfc_efx/base/ef10_nic.c +++ b/drivers/common/sfc_efx/base/ef10_nic.c @@ -1051,14 +1051,14 @@ ef10_get_datapath_caps( efx_nic_cfg_t *encp = &(enp->en_nic_cfg); efx_mcdi_req_t req; EFX_MCDI_DECLARE_BUF(payload, MC_CMD_GET_CAPABILITIES_IN_LEN, - MC_CMD_GET_CAPABILITIES_V7_OUT_LEN); + MC_CMD_GET_CAPABILITIES_V9_OUT_LEN); efx_rc_t rc; req.emr_cmd = MC_CMD_GET_CAPABILITIES; req.emr_in_buf = payload; req.emr_in_length = MC_CMD_GET_CAPABILITIES_IN_LEN; req.emr_out_buf = payload; - req.emr_out_length = MC_CMD_GET_CAPABILITIES_V7_OUT_LEN; + req.emr_out_length = MC_CMD_GET_CAPABILITIES_V9_OUT_LEN; efx_mcdi_execute_quiet(enp, &req); @@ -1466,6 +1466,16 @@ ef10_get_datapath_caps( encp->enc_mae_admin = B_FALSE; #endif /* EFSYS_OPT_MAE */ +#if EFSYS_OPT_RX_SCALE + if (req.emr_out_length_used >= MC_CMD_GET_CAPABILITIES_V9_OUT_LEN) { + encp->enc_rx_scale_indirection_max_nqueues = + MCDI_OUT_DWORD(req, + GET_CAPABILITIES_V9_OUT_RSS_MAX_INDIRECTION_QUEUES); + } else { + encp->enc_rx_scale_indirection_max_nqueues = EFX_MAXRSS; + } +#endif /* EFSYS_OPT_RX_SCALE */ + #undef CAP_FLAGS1 #undef CAP_FLAGS2 #undef CAP_FLAGS3 diff --git a/drivers/common/sfc_efx/base/ef10_rx.c b/drivers/common/sfc_efx/base/ef10_rx.c index a658e0dba2..3b041b962e 100644 --- a/drivers/common/sfc_efx/base/ef10_rx.c +++ b/drivers/common/sfc_efx/base/ef10_rx.c @@ -18,6 +18,7 @@ efx_mcdi_rss_context_alloc( __in uint32_t num_queues, __out uint32_t *rss_contextp) { + const efx_nic_cfg_t *encp = efx_nic_cfg_get(enp); efx_mcdi_req_t req; EFX_MCDI_DECLARE_BUF(payload, MC_CMD_RSS_CONTEXT_ALLOC_IN_LEN, MC_CMD_RSS_CONTEXT_ALLOC_OUT_LEN); @@ -25,7 +26,7 @@ efx_mcdi_rss_context_alloc( uint32_t context_type; efx_rc_t rc; - if (num_queues > EFX_MAXRSS) { + if (num_queues > encp->enc_rx_scale_indirection_max_nqueues) { rc = EINVAL; goto fail1; } diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index 96769935c0..f875487b89 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -1495,6 +1495,13 @@ typedef struct efx_nic_cfg_s { uint32_t enc_rx_buf_align_start; uint32_t enc_rx_buf_align_end; #if EFSYS_OPT_RX_SCALE + /* + * The limit on how many queues an RSS indirection table can address. + * + * Indirection table entries are offsets relative to a base queue ID. + * This means that the maximum offset has to be less than this value. + */ + uint32_t enc_rx_scale_indirection_max_nqueues; uint32_t enc_rx_scale_max_exclusive_contexts; /* * Mask of supported hash algorithms. diff --git a/drivers/common/sfc_efx/base/siena_nic.c b/drivers/common/sfc_efx/base/siena_nic.c index e42599131a..5f6d298d3f 100644 --- a/drivers/common/sfc_efx/base/siena_nic.c +++ b/drivers/common/sfc_efx/base/siena_nic.c @@ -119,6 +119,8 @@ siena_board_cfg( encp->enc_rx_push_align = 1; #if EFSYS_OPT_RX_SCALE + encp->enc_rx_scale_indirection_max_nqueues = EFX_MAXRSS; + /* There is one RSS context per function */ encp->enc_rx_scale_max_exclusive_contexts = 1; -- 2.30.2