]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bnxt_en: Update RSS setup and GRO-HW logic according to the latest spec.
authorMichael Chan <michael.chan@broadcom.com>
Sun, 5 Aug 2018 20:51:51 +0000 (16:51 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Aug 2018 00:08:26 +0000 (17:08 -0700)
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>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index e0e3b4b72c015de42440079d51e2b95d3f00034e..1714850df234d161b476390b3625e88398cbfe31 100644 (file)
@@ -1115,7 +1115,7 @@ static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
                tpa_info->hash_type = PKT_HASH_TYPE_L4;
                tpa_info->gso_type = SKB_GSO_TCPV4;
                /* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */
-               if (hash_type == 3)
+               if (hash_type == 3 || TPA_START_IS_IPV6(tpa_start1))
                        tpa_info->gso_type = SKB_GSO_TCPV6;
                tpa_info->rss_hash =
                        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)
        bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_CFG, -1, -1);
        if (set_rss) {
                req.hash_type = cpu_to_le32(bp->rss_hash_cfg);
+               req.hash_mode_flags = VNIC_RSS_CFG_REQ_HASH_MODE_FLAGS_DEFAULT;
                if (vnic->flags & BNXT_VNIC_RSS_FLAG) {
                        if (BNXT_CHIP_TYPE_NITRO_A0(bp))
                                max_rings = bp->rx_nr_rings - 1;
index b44a75874a2f51213657e441459cd784262484a7..7ea022df3526e53cf2b37b24e46281312d3c540c 100644 (file)
@@ -326,6 +326,10 @@ struct rx_tpa_start_cmp_ext {
        ((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) &   \
         RX_TPA_START_CMP_CFA_CODE) >> RX_TPA_START_CMPL_CFA_CODE_SHIFT)
 
+#define TPA_START_IS_IPV6(rx_tpa_start)                                \
+       (!!((rx_tpa_start)->rx_tpa_start_cmp_flags2 &           \
+           cpu_to_le32(RX_TPA_START_CMP_FLAGS2_IP_TYPE)))
+
 struct rx_tpa_end_cmp {
        __le32 rx_tpa_end_cmp_len_flags_type;
        #define RX_TPA_END_CMP_TYPE                             (0x3f << 0)