mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 14:41:39 +00:00
sfc: Use Toeplitz IPv4 hash for RSS and hash insertion
Insertion of the Falcon hash is unreliable. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5d3a6fca95
commit
477e54eba4
@ -1581,8 +1581,14 @@ static void falcon_init_rx_cfg(struct efx_nic *efx)
|
|||||||
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_MAC_TH, data_xoff_thr);
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_MAC_TH, data_xoff_thr);
|
||||||
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XON_TX_TH, ctrl_xon_thr);
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XON_TX_TH, ctrl_xon_thr);
|
||||||
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_TX_TH, ctrl_xoff_thr);
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_TX_TH, ctrl_xoff_thr);
|
||||||
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_INSRT_HDR, 1);
|
|
||||||
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 1);
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 1);
|
||||||
|
|
||||||
|
/* Enable hash insertion. This is broken for the
|
||||||
|
* 'Falcon' hash so also select Toeplitz TCP/IPv4 and
|
||||||
|
* IPv4 hashes. */
|
||||||
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_INSRT_HDR, 1);
|
||||||
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_ALG, 1);
|
||||||
|
EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_IP_HASH, 1);
|
||||||
}
|
}
|
||||||
/* Always enable XOFF signal from RX FIFO. We enable
|
/* Always enable XOFF signal from RX FIFO. We enable
|
||||||
* or disable transmission of pause frames at the MAC. */
|
* or disable transmission of pause frames at the MAC. */
|
||||||
@ -1656,8 +1662,12 @@ static int falcon_init_nic(struct efx_nic *efx)
|
|||||||
|
|
||||||
falcon_init_rx_cfg(efx);
|
falcon_init_rx_cfg(efx);
|
||||||
|
|
||||||
/* Set destination of both TX and RX Flush events */
|
|
||||||
if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) {
|
if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) {
|
||||||
|
/* Set hash key for IPv4 */
|
||||||
|
memcpy(&temp, efx->rx_hash_key, sizeof(temp));
|
||||||
|
efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY);
|
||||||
|
|
||||||
|
/* Set destination of both TX and RX Flush events */
|
||||||
EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0);
|
EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0);
|
||||||
efx_writeo(efx, &temp, FR_BZ_DP_CTRL);
|
efx_writeo(efx, &temp, FR_BZ_DP_CTRL);
|
||||||
}
|
}
|
||||||
|
@ -327,10 +327,19 @@ static int siena_init_nic(struct efx_nic *efx)
|
|||||||
|
|
||||||
efx_reado(efx, &temp, FR_AZ_RX_CFG);
|
efx_reado(efx, &temp, FR_AZ_RX_CFG);
|
||||||
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_DESC_PUSH_EN, 0);
|
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_DESC_PUSH_EN, 0);
|
||||||
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_INSRT_HDR, 1);
|
|
||||||
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_INGR_EN, 1);
|
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_INGR_EN, 1);
|
||||||
|
/* Enable hash insertion. This is broken for the 'Falcon' hash
|
||||||
|
* if IPv6 hashing is also enabled, so also select Toeplitz
|
||||||
|
* TCP/IPv4 and IPv4 hashes. */
|
||||||
|
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_INSRT_HDR, 1);
|
||||||
|
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_ALG, 1);
|
||||||
|
EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_IP_HASH, 1);
|
||||||
efx_writeo(efx, &temp, FR_AZ_RX_CFG);
|
efx_writeo(efx, &temp, FR_AZ_RX_CFG);
|
||||||
|
|
||||||
|
/* Set hash key for IPv4 */
|
||||||
|
memcpy(&temp, efx->rx_hash_key, sizeof(temp));
|
||||||
|
efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY);
|
||||||
|
|
||||||
/* Enable IPv6 RSS */
|
/* Enable IPv6 RSS */
|
||||||
BUILD_BUG_ON(sizeof(efx->rx_hash_key) <
|
BUILD_BUG_ON(sizeof(efx->rx_hash_key) <
|
||||||
2 * sizeof(temp) + FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH / 8 ||
|
2 * sizeof(temp) + FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH / 8 ||
|
||||||
|
Loading…
Reference in New Issue
Block a user