aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <michael.chan@broadcom.com>2018-08-05 16:51:51 -0400
committerDavid S. Miller <davem@davemloft.net>2018-08-05 20:08:26 -0400
commit50f011b63d8caab7f40de52ca6cf4807aea7a941 (patch)
treef0fba0f1d50ba770291d4bd84430351509da8581
parentbf82736da3c376c03a42c74ea6fa971e89740d7a (diff)
bnxt_en: Update RSS setup and GRO-HW logic according to the latest spec.
Set the default hash mode flag in HWRM_VNIC_RSS_CFG to signal to the firmware that the driver is compliant with the latest spec. With that, the firmware can return expanded RSS profile IDs that the driver checks to setup the proper gso_type for GRO-HW packets. But instead of checking for the new profile IDs, we check the IP_TYPE flag in TPA_START which is more straight forward than checking a list of profile IDs. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c3
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h4
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index e0e3b4b72c01..1714850df234 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1115,7 +1115,7 @@ static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
1115 tpa_info->hash_type = PKT_HASH_TYPE_L4; 1115 tpa_info->hash_type = PKT_HASH_TYPE_L4;
1116 tpa_info->gso_type = SKB_GSO_TCPV4; 1116 tpa_info->gso_type = SKB_GSO_TCPV4;
1117 /* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */ 1117 /* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */
1118 if (hash_type == 3) 1118 if (hash_type == 3 || TPA_START_IS_IPV6(tpa_start1))
1119 tpa_info->gso_type = SKB_GSO_TCPV6; 1119 tpa_info->gso_type = SKB_GSO_TCPV6;
1120 tpa_info->rss_hash = 1120 tpa_info->rss_hash =
1121 le32_to_cpu(tpa_start->rx_tpa_start_cmp_rss_hash); 1121 le32_to_cpu(tpa_start->rx_tpa_start_cmp_rss_hash);
@@ -3981,6 +3981,7 @@ static int bnxt_hwrm_vnic_set_rss(struct bnxt *bp, u16 vnic_id, bool set_rss)
3981 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_CFG, -1, -1); 3981 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_CFG, -1, -1);
3982 if (set_rss) { 3982 if (set_rss) {
3983 req.hash_type = cpu_to_le32(bp->rss_hash_cfg); 3983 req.hash_type = cpu_to_le32(bp->rss_hash_cfg);
3984 req.hash_mode_flags = VNIC_RSS_CFG_REQ_HASH_MODE_FLAGS_DEFAULT;
3984 if (vnic->flags & BNXT_VNIC_RSS_FLAG) { 3985 if (vnic->flags & BNXT_VNIC_RSS_FLAG) {
3985 if (BNXT_CHIP_TYPE_NITRO_A0(bp)) 3986 if (BNXT_CHIP_TYPE_NITRO_A0(bp))
3986 max_rings = bp->rx_nr_rings - 1; 3987 max_rings = bp->rx_nr_rings - 1;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index b44a75874a2f..7ea022df3526 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -326,6 +326,10 @@ struct rx_tpa_start_cmp_ext {
326 ((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) & \ 326 ((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) & \
327 RX_TPA_START_CMP_CFA_CODE) >> RX_TPA_START_CMPL_CFA_CODE_SHIFT) 327 RX_TPA_START_CMP_CFA_CODE) >> RX_TPA_START_CMPL_CFA_CODE_SHIFT)
328 328
329#define TPA_START_IS_IPV6(rx_tpa_start) \
330 (!!((rx_tpa_start)->rx_tpa_start_cmp_flags2 & \
331 cpu_to_le32(RX_TPA_START_CMP_FLAGS2_IP_TYPE)))
332
329struct rx_tpa_end_cmp { 333struct rx_tpa_end_cmp {
330 __le32 rx_tpa_end_cmp_len_flags_type; 334 __le32 rx_tpa_end_cmp_len_flags_type;
331 #define RX_TPA_END_CMP_TYPE (0x3f << 0) 335 #define RX_TPA_END_CMP_TYPE (0x3f << 0)