Commit de5841e1 authored by Clément Léger's avatar Clément Léger Committed by Jakub Kicinski

net: ocelot: add support for ndo_change_mtu

This commit adds support for changing MTU for the ocelot register based
interface. For ocelot, JUMBO frame size can be set up to 25000 bytes
but has been set to 9000 which is a saner value and allows for maximum
gain of performance with FDMA.
Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarClément Léger <clement.leger@bootlin.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b471a71e
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#define OCELOT_PTP_QUEUE_SZ 128 #define OCELOT_PTP_QUEUE_SZ 128
#define OCELOT_JUMBO_MTU 9000
struct ocelot_port_tc { struct ocelot_port_tc {
bool block_shared; bool block_shared;
unsigned long offload_cnt; unsigned long offload_cnt;
......
...@@ -764,10 +764,23 @@ static int ocelot_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) ...@@ -764,10 +764,23 @@ static int ocelot_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
return phy_mii_ioctl(dev->phydev, ifr, cmd); return phy_mii_ioctl(dev->phydev, ifr, cmd);
} }
static int ocelot_change_mtu(struct net_device *dev, int new_mtu)
{
struct ocelot_port_private *priv = netdev_priv(dev);
struct ocelot_port *ocelot_port = &priv->port;
struct ocelot *ocelot = ocelot_port->ocelot;
ocelot_port_set_maxlen(ocelot, priv->chip_port, new_mtu);
WRITE_ONCE(dev->mtu, new_mtu);
return 0;
}
static const struct net_device_ops ocelot_port_netdev_ops = { static const struct net_device_ops ocelot_port_netdev_ops = {
.ndo_open = ocelot_port_open, .ndo_open = ocelot_port_open,
.ndo_stop = ocelot_port_stop, .ndo_stop = ocelot_port_stop,
.ndo_start_xmit = ocelot_port_xmit, .ndo_start_xmit = ocelot_port_xmit,
.ndo_change_mtu = ocelot_change_mtu,
.ndo_set_rx_mode = ocelot_set_rx_mode, .ndo_set_rx_mode = ocelot_set_rx_mode,
.ndo_set_mac_address = ocelot_port_set_mac_address, .ndo_set_mac_address = ocelot_port_set_mac_address,
.ndo_get_stats64 = ocelot_get_stats64, .ndo_get_stats64 = ocelot_get_stats64,
...@@ -1670,6 +1683,7 @@ int ocelot_probe_port(struct ocelot *ocelot, int port, struct regmap *target, ...@@ -1670,6 +1683,7 @@ int ocelot_probe_port(struct ocelot *ocelot, int port, struct regmap *target,
dev->netdev_ops = &ocelot_port_netdev_ops; dev->netdev_ops = &ocelot_port_netdev_ops;
dev->ethtool_ops = &ocelot_ethtool_ops; dev->ethtool_ops = &ocelot_ethtool_ops;
dev->max_mtu = OCELOT_JUMBO_MTU;
dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_RXFCS | dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_RXFCS |
NETIF_F_HW_TC; NETIF_F_HW_TC;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment