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 <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
This commit is contained in:
Andrew Rybchenko 2020-10-13 14:45:23 +01:00 committed by Ferruh Yigit
parent 36d7927838
commit abd9dc47e0
4 changed files with 9 additions and 0 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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;