Commit 477e54eba4fd092704e50e65ade79463bd17fa85

Authored by Ben Hutchings
Committed by David S. Miller
1 parent 5d3a6fca95

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) <