[06/36] common/sfc_efx/base: add max number of Rx scatter buffers
Checks
Commit Message
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>
---
drivers/common/sfc_efx/base/ef10_nic.c | 3 +++
drivers/common/sfc_efx/base/efx.h | 2 ++
drivers/common/sfc_efx/base/rhead_nic.c | 3 +++
drivers/common/sfc_efx/base/siena_nic.c | 1 +
4 files changed, 9 insertions(+)
@@ -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;
@@ -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;
@@ -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.
@@ -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;