]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: DCB X540 devices support max traffic class of 4
authorJohn Fastabend <john.r.fastabend@intel.com>
Tue, 27 Sep 2011 03:52:01 +0000 (03:52 +0000)
committerJoe Jin <joe.jin@oracle.com>
Thu, 17 May 2012 14:18:13 +0000 (22:18 +0800)
X540 devices can only support up to 4 traffic classes and
guarantee a "lossless" traffic class on some platforms.
This patch sets the X540 devices to initialize a max
traffic class value of 4 at probe time.

(cherry picked from commit 4de2a0224ae3c437e8a090b6ec8d304a7edff049)
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_type.h

index 60d7d8f3dab1af4f7d320bd53faa61067be38e94..240126b9964c9568dd8c583b893f54c780d0e6c9 100644 (file)
@@ -4989,17 +4989,32 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
        spin_lock_init(&adapter->fdir_perfect_lock);
 
 #ifdef CONFIG_IXGBE_DCB
+       switch (hw->mac.type) {
+       case ixgbe_mac_X540:
+               adapter->dcb_cfg.num_tcs.pg_tcs = X540_TRAFFIC_CLASS;
+               adapter->dcb_cfg.num_tcs.pfc_tcs = X540_TRAFFIC_CLASS;
+               break;
+       default:
+               adapter->dcb_cfg.num_tcs.pg_tcs = MAX_TRAFFIC_CLASS;
+               adapter->dcb_cfg.num_tcs.pfc_tcs = MAX_TRAFFIC_CLASS;
+               break;
+       }
+
        /* Configure DCB traffic classes */
        for (j = 0; j < MAX_TRAFFIC_CLASS; j++) {
                tc = &adapter->dcb_cfg.tc_config[j];
                tc->path[DCB_TX_CONFIG].bwg_id = 0;
                tc->path[DCB_TX_CONFIG].bwg_percent = 12 + (j & 1);
-               tc->path[DCB_TX_CONFIG].up_to_tc_bitmap = 1 << j;
                tc->path[DCB_RX_CONFIG].bwg_id = 0;
                tc->path[DCB_RX_CONFIG].bwg_percent = 12 + (j & 1);
-               tc->path[DCB_RX_CONFIG].up_to_tc_bitmap = 1 << j;
                tc->dcb_pfc = pfc_disabled;
        }
+
+       /* Initialize default user to priority mapping, UPx->TC0 */
+       tc = &adapter->dcb_cfg.tc_config[0];
+       tc->path[DCB_TX_CONFIG].up_to_tc_bitmap = 0xFF;
+       tc->path[DCB_RX_CONFIG].up_to_tc_bitmap = 0xFF;
+
        adapter->dcb_cfg.bw_percentage[DCB_TX_CONFIG][0] = 100;
        adapter->dcb_cfg.bw_percentage[DCB_RX_CONFIG][0] = 100;
        adapter->dcb_cfg.pfc_mode_enable = false;
@@ -7018,7 +7033,7 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
        }
 
        /* Hardware supports up to 8 traffic classes */
-       if (tc > MAX_TRAFFIC_CLASS ||
+       if (tc > adapter->dcb_cfg.num_tcs.pg_tcs ||
            (hw->mac.type == ixgbe_mac_82598EB && tc < MAX_TRAFFIC_CLASS))
                return -EINVAL;
 
index 43c6ad2810c8e0ce8dd4d5209d7d7b84f75c9342..f9c48501a7437e0b39cf34e95fb7f01deccab4f1 100644 (file)
 
 /* DCB registers */
 #define MAX_TRAFFIC_CLASS        8
+#define X540_TRAFFIC_CLASS       4
 #define IXGBE_RMCS      0x03D00
 #define IXGBE_DPMCS     0x07F40
 #define IXGBE_PDPMCS    0x0CD00