mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-24 07:39:33 +07:00
ixgbe: Enable Jumbo Frames on the X540 10Gigabit Controller
The X540 controller supports jumbo frames in SR-IOV mode. Allow configuration of jumbo frames either in the PF driver or on behalf of a VF. 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
55ae22d08f
commit
e9f9807262
@ -3077,6 +3077,14 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter,
|
|||||||
ixgbe_configure_srrctl(adapter, ring);
|
ixgbe_configure_srrctl(adapter, ring);
|
||||||
ixgbe_configure_rscctl(adapter, ring);
|
ixgbe_configure_rscctl(adapter, ring);
|
||||||
|
|
||||||
|
/* If operating in IOV mode set RLPML for X540 */
|
||||||
|
if ((adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) &&
|
||||||
|
hw->mac.type == ixgbe_mac_X540) {
|
||||||
|
rxdctl &= ~IXGBE_RXDCTL_RLPMLMASK;
|
||||||
|
rxdctl |= ((ring->netdev->mtu + ETH_HLEN +
|
||||||
|
ETH_FCS_LEN + VLAN_HLEN) | IXGBE_RXDCTL_RLPML_EN);
|
||||||
|
}
|
||||||
|
|
||||||
if (hw->mac.type == ixgbe_mac_82598EB) {
|
if (hw->mac.type == ixgbe_mac_82598EB) {
|
||||||
/*
|
/*
|
||||||
* enable cache line friendly hardware writes:
|
* enable cache line friendly hardware writes:
|
||||||
@ -5441,8 +5449,14 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
|
|||||||
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
||||||
|
|
||||||
/* 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 > IXGBE_MAX_JUMBO_FRAME_SIZE))
|
if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED &&
|
||||||
return -EINVAL;
|
hw->mac.type != ixgbe_mac_X540) {
|
||||||
|
if ((new_mtu < 68) || (max_frame > MAXIMUM_ETHERNET_VLAN_SIZE))
|
||||||
|
return -EINVAL;
|
||||||
|
} else {
|
||||||
|
if ((new_mtu < 68) || (max_frame > IXGBE_MAX_JUMBO_FRAME_SIZE))
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
e_info(probe, "changing MTU from %d to %d\n", netdev->mtu, new_mtu);
|
e_info(probe, "changing MTU from %d to %d\n", netdev->mtu, new_mtu);
|
||||||
/* must set new MTU before calling down or up */
|
/* must set new MTU before calling down or up */
|
||||||
|
@ -110,6 +110,33 @@ static int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid,
|
|||||||
return adapter->hw.mac.ops.set_vfta(&adapter->hw, vid, vf, (bool)add);
|
return adapter->hw.mac.ops.set_vfta(&adapter->hw, vid, vf, (bool)add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf)
|
||||||
|
{
|
||||||
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
|
int new_mtu = msgbuf[1];
|
||||||
|
u32 max_frs;
|
||||||
|
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
||||||
|
|
||||||
|
/* Only X540 supports jumbo frames in IOV mode */
|
||||||
|
if (adapter->hw.mac.type != ixgbe_mac_X540)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* MTU < 68 is an error and causes problems on some kernels */
|
||||||
|
if ((new_mtu < 68) || (max_frame > IXGBE_MAX_JUMBO_FRAME_SIZE)) {
|
||||||
|
e_err(drv, "VF mtu %d out of range\n", new_mtu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
max_frs = (IXGBE_READ_REG(hw, IXGBE_MAXFRS) &
|
||||||
|
IXGBE_MHADD_MFS_MASK) >> IXGBE_MHADD_MFS_SHIFT;
|
||||||
|
if (max_frs < new_mtu) {
|
||||||
|
max_frs = new_mtu << IXGBE_MHADD_MFS_SHIFT;
|
||||||
|
IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
|
||||||
|
}
|
||||||
|
|
||||||
|
e_info(hw, "VF requests change max MTU to %d\n", new_mtu);
|
||||||
|
}
|
||||||
|
|
||||||
static void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe)
|
static void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe)
|
||||||
{
|
{
|
||||||
u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
|
u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
|
||||||
@ -302,7 +329,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
|
|||||||
hash_list, vf);
|
hash_list, vf);
|
||||||
break;
|
break;
|
||||||
case IXGBE_VF_SET_LPE:
|
case IXGBE_VF_SET_LPE:
|
||||||
WARN_ON((msgbuf[0] & 0xFFFF) == IXGBE_VF_SET_LPE);
|
ixgbe_set_vf_lpe(adapter, msgbuf);
|
||||||
break;
|
break;
|
||||||
case IXGBE_VF_SET_VLAN:
|
case IXGBE_VF_SET_VLAN:
|
||||||
add = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK)
|
add = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK)
|
||||||
|
@ -1680,6 +1680,8 @@
|
|||||||
#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
|
||||||
|
|
||||||
#define IXGBE_FCTRL_SBP 0x00000002 /* Store Bad Packet */
|
#define IXGBE_FCTRL_SBP 0x00000002 /* Store Bad Packet */
|
||||||
#define IXGBE_FCTRL_MPE 0x00000100 /* Multicast Promiscuous Ena*/
|
#define IXGBE_FCTRL_MPE 0x00000100 /* Multicast Promiscuous Ena*/
|
||||||
|
Loading…
Reference in New Issue
Block a user