bnxt_en: Add UDP RSS support for 57X1X chips.
authorMichael Chan <michael.chan@broadcom.com>
Thu, 17 Nov 2016 02:13:09 +0000 (21:13 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Nov 2016 04:11:07 +0000 (23:11 -0500)
The newer chips have proper support for 4-tuple UDP RSS.

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 4db50e831524447ab47fd73227f2614fe6b96f2b..7401c903389479aa84d0c0ac5bcd7bea29d824b0 100644 (file)
@@ -3425,13 +3425,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) {
-               vnic->hash_type = VNIC_RSS_CFG_REQ_HASH_TYPE_IPV4 |
-                                 VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4 |
-                                 VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
-                                 VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV6;
-
-               req.hash_type = cpu_to_le32(vnic->hash_type);
-
+               req.hash_type = cpu_to_le32(bp->rss_hash_cfg);
                if (vnic->flags & BNXT_VNIC_RSS_FLAG) {
                        if (BNXT_CHIP_TYPE_NITRO_A0(bp))
                                max_rings = bp->rx_nr_rings - 1;
@@ -6940,6 +6934,19 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 #endif
        bnxt_set_dflt_rings(bp);
 
+       /* Default RSS hash cfg. */
+       bp->rss_hash_cfg = VNIC_RSS_CFG_REQ_HASH_TYPE_IPV4 |
+                          VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4 |
+                          VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
+                          VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV6;
+       if (!BNXT_CHIP_NUM_57X0X(bp->chip_num) &&
+           !BNXT_CHIP_TYPE_NITRO_A0(bp) &&
+           bp->hwrm_spec_code >= 0x10501) {
+               bp->flags |= BNXT_FLAG_UDP_RSS_CAP;
+               bp->rss_hash_cfg |= VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4 |
+                                   VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6;
+       }
+
        if (BNXT_PF(bp) && !BNXT_CHIP_TYPE_NITRO_A0(bp)) {
                dev->hw_features |= NETIF_F_NTUPLE;
                if (bnxt_rfs_capable(bp)) {
index 666bc0608ed7d2f3539e503fabb8dbc825796afd..47be7894c67bcea3e1f1002fcfc88a1992d10b22 100644 (file)
@@ -700,7 +700,6 @@ struct bnxt_vnic_info {
        u8              *uc_list;
 
        u16             *fw_grp_ids;
-       u16             hash_type;
        dma_addr_t      rss_table_dma_addr;
        __le16          *rss_table;
        dma_addr_t      rss_hash_key_dma_addr;
@@ -952,6 +951,7 @@ struct bnxt {
        #define BNXT_FLAG_RFS           0x100
        #define BNXT_FLAG_SHARED_RINGS  0x200
        #define BNXT_FLAG_PORT_STATS    0x400
+       #define BNXT_FLAG_UDP_RSS_CAP   0x800
        #define BNXT_FLAG_EEE_CAP       0x1000
        #define BNXT_FLAG_CHIP_NITRO_A0 0x1000000
 
@@ -1007,6 +1007,7 @@ struct bnxt {
        struct bnxt_ring_grp_info       *grp_info;
        struct bnxt_vnic_info   *vnic_info;
        int                     nr_vnics;
+       u32                     rss_hash_cfg;
 
        u8                      max_tc;
        struct bnxt_queue_info  q_info[BNXT_MAX_QUEUE];