common/sfc_efx/base: add max number of Rx scatter buffers
authorAndrew Rybchenko <arybchenko@solarflare.com>
Tue, 13 Oct 2020 13:45:23 +0000 (14:45 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 16 Oct 2020 17:48:17 +0000 (19:48 +0200)
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
drivers/common/sfc_efx/base/efx.h
drivers/common/sfc_efx/base/rhead_nic.c
drivers/common/sfc_efx/base/siena_nic.c

index 81cd436..df7db6a 100644 (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;
index a245acf..4b7beb2 100644 (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;
index 66db68b..92bc6fd 100644 (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.
index 9c30e27..4137c1e 100644 (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;