From: Andrew Rybchenko Date: Tue, 13 Oct 2020 13:45:23 +0000 (+0100) Subject: common/sfc_efx/base: add max number of Rx scatter buffers X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=abd9dc47e0826bde5f57f73873012c287169c762;p=dpdk.git common/sfc_efx/base: add max number of Rx scatter buffers Riverhead QDMA has limitation on maximum number of Rx scatter buffers to be used by a packet. If the limitation is violated, the datapath is dead. FW should ensure that it is OK, but drivers need to know the limitation anyway to check parameters when Rx queues are configured and MTU is set. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- diff --git a/drivers/common/sfc_efx/base/ef10_nic.c b/drivers/common/sfc_efx/base/ef10_nic.c index 81cd436424..df7db6a803 100644 --- a/drivers/common/sfc_efx/base/ef10_nic.c +++ b/drivers/common/sfc_efx/base/ef10_nic.c @@ -1156,6 +1156,9 @@ ef10_get_datapath_caps( else encp->enc_rx_disable_scatter_supported = B_FALSE; + /* No limit on maximum number of Rx scatter elements per packet. */ + encp->enc_rx_scatter_max = -1; + /* Check if the firmware supports packed stream mode */ if (CAP_FLAGS1(req, RX_PACKED_STREAM)) encp->enc_rx_packed_stream_supported = B_TRUE; diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index a245acfe0f..4b7beb209d 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -1555,6 +1555,8 @@ typedef struct efx_nic_cfg_s { /* Datapath firmware vport reconfigure support */ boolean_t enc_vport_reconfigure_supported; boolean_t enc_rx_disable_scatter_supported; + /* Maximum number of Rx scatter segments supported by HW */ + uint32_t enc_rx_scatter_max; boolean_t enc_allow_set_mac_with_installed_filters; boolean_t enc_enhanced_set_mac_supported; boolean_t enc_init_evq_v2_supported; diff --git a/drivers/common/sfc_efx/base/rhead_nic.c b/drivers/common/sfc_efx/base/rhead_nic.c index 66db68b384..92bc6fdfae 100644 --- a/drivers/common/sfc_efx/base/rhead_nic.c +++ b/drivers/common/sfc_efx/base/rhead_nic.c @@ -158,6 +158,9 @@ rhead_board_cfg( } encp->enc_rx_buf_align_end = end_padding; + /* FIXME: It should be extracted from design parameters (Bug 86844) */ + encp->enc_rx_scatter_max = 7; + /* * Riverhead stores a single global copy of VPD, not per-PF as on * Huntington. diff --git a/drivers/common/sfc_efx/base/siena_nic.c b/drivers/common/sfc_efx/base/siena_nic.c index 9c30e27f59..4137c1e245 100644 --- a/drivers/common/sfc_efx/base/siena_nic.c +++ b/drivers/common/sfc_efx/base/siena_nic.c @@ -177,6 +177,7 @@ siena_board_cfg( encp->enc_fw_assisted_tso_v2_enabled = B_FALSE; encp->enc_fw_assisted_tso_v2_n_contexts = 0; encp->enc_tso_v3_enabled = B_FALSE; + encp->enc_rx_scatter_max = -1; encp->enc_allow_set_mac_with_installed_filters = B_TRUE; encp->enc_rx_packed_stream_supported = B_FALSE; encp->enc_rx_var_packed_stream_supported = B_FALSE;