summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2018-07-25 12:29:58 +0300
committerIngo Molnar <mingo@kernel.org>2018-07-25 12:29:58 +0300
commit4765096f4f7829d933354ddffedfad32cf063467 (patch)
treee8ab2bfc2062324911de12d034f5d4f222c480b6 /drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
parentaf0fffd9300b97d8875aa745bc78e2f6fdb3c1f0 (diff)
parentf3d133ee0a17d5694c6f21873eec9863e11fa423 (diff)
downloadlinux-4765096f4f7829d933354ddffedfad32cf063467.tar.xz
Merge branch 'sched/urgent' into sched/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/cavium/octeon/octeon_mgmt.c')
-rw-r--r--drivers/net/ethernet/cavium/octeon/octeon_mgmt.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
index 3f6afb54a5eb..bb43ddb7539e 100644
--- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
+++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
@@ -643,13 +643,21 @@ static int octeon_mgmt_set_mac_address(struct net_device *netdev, void *addr)
static int octeon_mgmt_change_mtu(struct net_device *netdev, int new_mtu)
{
struct octeon_mgmt *p = netdev_priv(netdev);
- int size_without_fcs = new_mtu + OCTEON_MGMT_RX_HEADROOM;
+ int max_packet = new_mtu + ETH_HLEN + ETH_FCS_LEN;
netdev->mtu = new_mtu;
- cvmx_write_csr(p->agl + AGL_GMX_RX_FRM_MAX, size_without_fcs);
+ /* HW lifts the limit if the frame is VLAN tagged
+ * (+4 bytes per each tag, up to two tags)
+ */
+ cvmx_write_csr(p->agl + AGL_GMX_RX_FRM_MAX, max_packet);
+ /* Set the hardware to truncate packets larger than the MTU. The jabber
+ * register must be set to a multiple of 8 bytes, so round up. JABBER is
+ * an unconditional limit, so we need to account for two possible VLAN
+ * tags.
+ */
cvmx_write_csr(p->agl + AGL_GMX_RX_JABBER,
- (size_without_fcs + 7) & 0xfff8);
+ (max_packet + 7 + VLAN_HLEN * 2) & 0xfff8);
return 0;
}