mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-11 09:02:35 +00:00
ixgbevf: Enable jumbo frame support for X540 VF
The X540 controller allows jumbo frame setup on a per VF basis. Enable use of jumbo frames when the VF device belongs to the X540 controller. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
e9f9807262
commit
69bfbec47d
2 changed files with 19 additions and 2 deletions
|
@ -65,6 +65,8 @@ typedef u32 ixgbe_link_speed;
|
||||||
#define IXGBE_RXCTRL_DMBYPS 0x00000002 /* Descriptor Monitor Bypass */
|
#define IXGBE_RXCTRL_DMBYPS 0x00000002 /* Descriptor Monitor Bypass */
|
||||||
#define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */
|
#define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */
|
||||||
#define IXGBE_RXDCTL_VME 0x40000000 /* VLAN mode enable */
|
#define IXGBE_RXDCTL_VME 0x40000000 /* VLAN mode enable */
|
||||||
|
#define IXGBE_RXDCTL_RLPMLMASK 0x00003FFF /* Only supported on the X540 */
|
||||||
|
#define IXGBE_RXDCTL_RLPML_EN 0x00008000
|
||||||
|
|
||||||
/* DCA Control */
|
/* DCA Control */
|
||||||
#define IXGBE_DCA_TXCTRL_TX_WB_RO_EN (1 << 11) /* Tx Desc writeback RO bit */
|
#define IXGBE_DCA_TXCTRL_TX_WB_RO_EN (1 << 11) /* Tx Desc writeback RO bit */
|
||||||
|
|
|
@ -51,7 +51,7 @@ char ixgbevf_driver_name[] = "ixgbevf";
|
||||||
static const char ixgbevf_driver_string[] =
|
static const char ixgbevf_driver_string[] =
|
||||||
"Intel(R) 82599 Virtual Function";
|
"Intel(R) 82599 Virtual Function";
|
||||||
|
|
||||||
#define DRV_VERSION "1.0.19-k0"
|
#define DRV_VERSION "1.1.0-k0"
|
||||||
const char ixgbevf_driver_version[] = DRV_VERSION;
|
const char ixgbevf_driver_version[] = DRV_VERSION;
|
||||||
static char ixgbevf_copyright[] =
|
static char ixgbevf_copyright[] =
|
||||||
"Copyright (c) 2009 - 2010 Intel Corporation.";
|
"Copyright (c) 2009 - 2010 Intel Corporation.";
|
||||||
|
@ -1665,6 +1665,11 @@ static int ixgbevf_up_complete(struct ixgbevf_adapter *adapter)
|
||||||
j = adapter->rx_ring[i].reg_idx;
|
j = adapter->rx_ring[i].reg_idx;
|
||||||
rxdctl = IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(j));
|
rxdctl = IXGBE_READ_REG(hw, IXGBE_VFRXDCTL(j));
|
||||||
rxdctl |= IXGBE_RXDCTL_ENABLE;
|
rxdctl |= IXGBE_RXDCTL_ENABLE;
|
||||||
|
if (hw->mac.type == ixgbe_mac_X540_vf) {
|
||||||
|
rxdctl &= ~IXGBE_RXDCTL_RLPMLMASK;
|
||||||
|
rxdctl |= ((netdev->mtu + ETH_HLEN + ETH_FCS_LEN) |
|
||||||
|
IXGBE_RXDCTL_RLPML_EN);
|
||||||
|
}
|
||||||
IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(j), rxdctl);
|
IXGBE_WRITE_REG(hw, IXGBE_VFRXDCTL(j), rxdctl);
|
||||||
ixgbevf_rx_desc_queue_enable(adapter, i);
|
ixgbevf_rx_desc_queue_enable(adapter, i);
|
||||||
}
|
}
|
||||||
|
@ -3217,10 +3222,16 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p)
|
||||||
static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
|
static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
|
||||||
{
|
{
|
||||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||||
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
||||||
|
int max_possible_frame = MAXIMUM_ETHERNET_VLAN_SIZE;
|
||||||
|
u32 msg[2];
|
||||||
|
|
||||||
|
if (adapter->hw.mac.type == ixgbe_mac_X540_vf)
|
||||||
|
max_possible_frame = IXGBE_MAX_JUMBO_FRAME_SIZE;
|
||||||
|
|
||||||
/* MTU < 68 is an error and causes problems on some kernels */
|
/* MTU < 68 is an error and causes problems on some kernels */
|
||||||
if ((new_mtu < 68) || (max_frame > MAXIMUM_ETHERNET_VLAN_SIZE))
|
if ((new_mtu < 68) || (max_frame > max_possible_frame))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
hw_dbg(&adapter->hw, "changing MTU from %d to %d\n",
|
hw_dbg(&adapter->hw, "changing MTU from %d to %d\n",
|
||||||
|
@ -3228,6 +3239,10 @@ static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
|
||||||
/* must set new MTU before calling down or up */
|
/* must set new MTU before calling down or up */
|
||||||
netdev->mtu = new_mtu;
|
netdev->mtu = new_mtu;
|
||||||
|
|
||||||
|
msg[0] = IXGBE_VF_SET_LPE;
|
||||||
|
msg[1] = max_frame;
|
||||||
|
hw->mbx.ops.write_posted(hw, msg, 2);
|
||||||
|
|
||||||
if (netif_running(netdev))
|
if (netif_running(netdev))
|
||||||
ixgbevf_reinit_locked(adapter);
|
ixgbevf_reinit_locked(adapter);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue