Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ixgbe: DCB, X540 devices do not respond to pause frames

DCB enabled X540 devices are not responding to pause frames
due to a missing register set that was added for these
devices that did not exist in other devices.

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>

authored by

John Fastabend and committed by
Jeff Kirsher
45a5f720 e09ad236

+9 -2
+7 -2
drivers/net/ixgbe/ixgbe_dcb_82599.c
··· 301 301 IXGBE_WRITE_REG(hw, IXGBE_FCCFG, reg); 302 302 /* 303 303 * Enable Receive PFC 304 - * We will always honor XOFF frames we receive when 305 - * we are in PFC mode. 304 + * 82599 will always honor XOFF frames we receive when 305 + * we are in PFC mode however X540 only honors enabled 306 + * traffic classes. 306 307 */ 307 308 reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); 308 309 reg &= ~IXGBE_MFLCN_RFCE; 309 310 reg |= IXGBE_MFLCN_RPFCE | IXGBE_MFLCN_DPF; 311 + 312 + if (hw->mac.type == ixgbe_mac_X540) 313 + reg |= pfc_en << IXGBE_MFLCN_RPFCE_SHIFT; 314 + 310 315 IXGBE_WRITE_REG(hw, IXGBE_MFLCN, reg); 311 316 312 317 } else {
+2
drivers/net/ixgbe/ixgbe_type.h
··· 1728 1728 #define IXGBE_MFLCN_RPFCE 0x00000004 /* Receive Priority FC Enable */ 1729 1729 #define IXGBE_MFLCN_RFCE 0x00000008 /* Receive FC Enable */ 1730 1730 1731 + #define IXGBE_MFLCN_RPFCE_SHIFT 4 1732 + 1731 1733 /* Multiple Receive Queue Control */ 1732 1734 #define IXGBE_MRQC_RSSEN 0x00000001 /* RSS Enable */ 1733 1735 #define IXGBE_MRQC_MRQE_MASK 0xF /* Bits 3:0 */