Commit 477e54eba4fd092704e50e65ade79463bd17fa85
Committed by
David S. Miller
1 parent
5d3a6fca95
Exists in
master
and in
20 other branches
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>
Showing 2 changed files with 22 additions and 3 deletions Side-by-side Diff
drivers/net/sfc/falcon.c
... | ... | @@ -1581,8 +1581,14 @@ |
1581 | 1581 | EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_MAC_TH, data_xoff_thr); |
1582 | 1582 | EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XON_TX_TH, ctrl_xon_thr); |
1583 | 1583 | EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_TX_TH, ctrl_xoff_thr); |
1584 | - EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_INSRT_HDR, 1); | |
1585 | 1584 | EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 1); |
1585 | + | |
1586 | + /* Enable hash insertion. This is broken for the | |
1587 | + * 'Falcon' hash so also select Toeplitz TCP/IPv4 and | |
1588 | + * IPv4 hashes. */ | |
1589 | + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_INSRT_HDR, 1); | |
1590 | + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_HASH_ALG, 1); | |
1591 | + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_IP_HASH, 1); | |
1586 | 1592 | } |
1587 | 1593 | /* Always enable XOFF signal from RX FIFO. We enable |
1588 | 1594 | * or disable transmission of pause frames at the MAC. */ |
1589 | 1595 | |
... | ... | @@ -1656,8 +1662,12 @@ |
1656 | 1662 | |
1657 | 1663 | falcon_init_rx_cfg(efx); |
1658 | 1664 | |
1659 | - /* Set destination of both TX and RX Flush events */ | |
1660 | 1665 | if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) { |
1666 | + /* Set hash key for IPv4 */ | |
1667 | + memcpy(&temp, efx->rx_hash_key, sizeof(temp)); | |
1668 | + efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY); | |
1669 | + | |
1670 | + /* Set destination of both TX and RX Flush events */ | |
1661 | 1671 | EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0); |
1662 | 1672 | efx_writeo(efx, &temp, FR_BZ_DP_CTRL); |
1663 | 1673 | } |
drivers/net/sfc/siena.c
... | ... | @@ -327,9 +327,18 @@ |
327 | 327 | |
328 | 328 | efx_reado(efx, &temp, FR_AZ_RX_CFG); |
329 | 329 | EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_DESC_PUSH_EN, 0); |
330 | - EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_INSRT_HDR, 1); | |
331 | 330 | EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_INGR_EN, 1); |
331 | + /* Enable hash insertion. This is broken for the 'Falcon' hash | |
332 | + * if IPv6 hashing is also enabled, so also select Toeplitz | |
333 | + * TCP/IPv4 and IPv4 hashes. */ | |
334 | + EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_INSRT_HDR, 1); | |
335 | + EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_HASH_ALG, 1); | |
336 | + EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_IP_HASH, 1); | |
332 | 337 | efx_writeo(efx, &temp, FR_AZ_RX_CFG); |
338 | + | |
339 | + /* Set hash key for IPv4 */ | |
340 | + memcpy(&temp, efx->rx_hash_key, sizeof(temp)); | |
341 | + efx_writeo(efx, &temp, FR_BZ_RX_RSS_TKEY); | |
333 | 342 | |
334 | 343 | /* Enable IPv6 RSS */ |
335 | 344 | BUILD_BUG_ON(sizeof(efx->rx_hash_key) < |