Skip to content

Commit 66cee75

Browse files
committed
Merge branch 'net-ethernet-ti-am65-cpsw-allow-for-mtu-values'
Sanjuán García, Jorge says: ==================== net: ethernet: ti: am65-cpsw: Allow for MTU values The am65-cpsw-nuss driver has a fixed definition for the maximum ethernet frame length of 1522 bytes (AM65_CPSW_MAX_PACKET_SIZE). This limits the switch ports to only operate at a maximum MTU of 1500 bytes. When combining this CPSW switch with a DSA switch connected to one of its ports this limitation shows up. The extra 8 bytes the DSA subsystem adds internally to the ethernet frame create resulting frames bigger than 1522 bytes (1518 for non VLAN + 8 for DSA stuff) so they get dropped by the switch. One of the issues with the the am65-cpsw-nuss driver is that the network device max_mtu was being set to the same fixed value defined for the max total frame length (1522 bytes). This makes the DSA subsystem believe that the MTU of the interface can be set to 1508 bytes to make room for the extra 8 bytes of the DSA headers. However, all packages created assuming the 1500 bytes payload get dropped by the switch as oversized. This series offers a solution to this problem. The max_mtu advertised on the network device and the actual max frame size configured on the switch registers are made consistent by letting the extra room needed for the ethernet headers and the frame checksum (22 bytes including VLAN). ==================== Link: https://lore.kernel.org/r/20240105085530.14070-1-jorge.sanjuangarcia@duagon.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents e3fe8d2 + 64e47d8 commit 66cee75

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

drivers/net/ethernet/ti/am65-cpsw-nuss.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
#define AM65_CPSW_MAX_PORTS 8
5757

5858
#define AM65_CPSW_MIN_PACKET_SIZE VLAN_ETH_ZLEN
59-
#define AM65_CPSW_MAX_PACKET_SIZE (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)
59+
#define AM65_CPSW_MAX_PACKET_SIZE 2024
6060

6161
#define AM65_CPSW_REG_CTL 0x004
6262
#define AM65_CPSW_REG_STAT_PORT_EN 0x014
@@ -2244,7 +2244,8 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common *common, u32 port_idx)
22442244
eth_hw_addr_set(port->ndev, port->slave.mac_addr);
22452245

22462246
port->ndev->min_mtu = AM65_CPSW_MIN_PACKET_SIZE;
2247-
port->ndev->max_mtu = AM65_CPSW_MAX_PACKET_SIZE;
2247+
port->ndev->max_mtu = AM65_CPSW_MAX_PACKET_SIZE -
2248+
(VLAN_ETH_HLEN + ETH_FCS_LEN);
22482249
port->ndev->hw_features = NETIF_F_SG |
22492250
NETIF_F_RXCSUM |
22502251
NETIF_F_HW_CSUM |

0 commit comments

Comments
 (0)