common/sfc_efx/base: query RSS queue span limit on Riverhead
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 <ivan.malov@oktetlabs.ru> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> Reviewed-by: Andy Moreton <amoreton@xilinx.com>
This commit is contained in:
parent
6da67e706d
commit
777da15056
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user