Skip to content

Commit 8c7da63

Browse files
muralipolicharla-brcmdavem330
authored andcommitted
bgmac: configure MTU and add support for frames beyond 8192 byte size
Change DMA descriptor length to handle jumbo frames beyond 8192 bytes. Also update jumbo frame max size to include FCS, the DMA packet length received includes FCS. Signed-off-by: Murali Krishna Policharla <[email protected]> Reviewed-by: Arun Parameswaran <[email protected]> Reviewed-by: Ray Jui <[email protected]> Signed-off-by: Vladimir Oltean <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ab41ca3 commit 8c7da63

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

drivers/net/ethernet/broadcom/bgmac.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,14 @@ static int bgmac_set_mac_address(struct net_device *net_dev, void *addr)
12481248
return 0;
12491249
}
12501250

1251+
static int bgmac_change_mtu(struct net_device *net_dev, int mtu)
1252+
{
1253+
struct bgmac *bgmac = netdev_priv(net_dev);
1254+
1255+
bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + mtu);
1256+
return 0;
1257+
}
1258+
12511259
static const struct net_device_ops bgmac_netdev_ops = {
12521260
.ndo_open = bgmac_open,
12531261
.ndo_stop = bgmac_stop,
@@ -1256,6 +1264,7 @@ static const struct net_device_ops bgmac_netdev_ops = {
12561264
.ndo_set_mac_address = bgmac_set_mac_address,
12571265
.ndo_validate_addr = eth_validate_addr,
12581266
.ndo_do_ioctl = phy_do_ioctl_running,
1267+
.ndo_change_mtu = bgmac_change_mtu,
12591268
};
12601269

12611270
/**************************************************
@@ -1530,6 +1539,9 @@ int bgmac_enet_probe(struct bgmac *bgmac)
15301539
net_dev->hw_features = net_dev->features;
15311540
net_dev->vlan_features = net_dev->features;
15321541

1542+
/* Omit FCS from max MTU size */
1543+
net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN;
1544+
15331545
err = register_netdev(bgmac->net_dev);
15341546
if (err) {
15351547
dev_err(bgmac->dev, "Cannot register net device\n");

drivers/net/ethernet/broadcom/bgmac.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@
351351
#define BGMAC_DESC_CTL0_IOC 0x20000000 /* IRQ on complete */
352352
#define BGMAC_DESC_CTL0_EOF 0x40000000 /* End of frame */
353353
#define BGMAC_DESC_CTL0_SOF 0x80000000 /* Start of frame */
354-
#define BGMAC_DESC_CTL1_LEN 0x00001FFF
354+
#define BGMAC_DESC_CTL1_LEN 0x00003FFF
355355

356356
#define BGMAC_PHY_NOREGS BRCM_PSEUDO_PHY_ADDR
357357
#define BGMAC_PHY_MASK 0x1F
@@ -366,7 +366,8 @@
366366
#define BGMAC_RX_FRAME_OFFSET 30 /* There are 2 unused bytes between header and real data */
367367
#define BGMAC_RX_BUF_OFFSET (NET_SKB_PAD + NET_IP_ALIGN - \
368368
BGMAC_RX_FRAME_OFFSET)
369-
#define BGMAC_RX_MAX_FRAME_SIZE 1536 /* Copied from b44/tg3 */
369+
/* Jumbo frame size with FCS */
370+
#define BGMAC_RX_MAX_FRAME_SIZE 9724
370371
#define BGMAC_RX_BUF_SIZE (BGMAC_RX_FRAME_OFFSET + BGMAC_RX_MAX_FRAME_SIZE)
371372
#define BGMAC_RX_ALLOC_SIZE (SKB_DATA_ALIGN(BGMAC_RX_BUF_SIZE + BGMAC_RX_BUF_OFFSET) + \
372373
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))

0 commit comments

Comments
 (0)