|
@@ -3501,6 +3501,7 @@ static int mvpp2_set_mac_address(struct net_device *dev, void *p)
|
|
|
static int mvpp2_change_mtu(struct net_device *dev, int mtu)
|
|
static int mvpp2_change_mtu(struct net_device *dev, int mtu)
|
|
|
{
|
|
{
|
|
|
struct mvpp2_port *port = netdev_priv(dev);
|
|
struct mvpp2_port *port = netdev_priv(dev);
|
|
|
|
|
+ bool running = netif_running(dev);
|
|
|
int err;
|
|
int err;
|
|
|
|
|
|
|
|
if (!IS_ALIGNED(MVPP2_RX_PKT_SIZE(mtu), 8)) {
|
|
if (!IS_ALIGNED(MVPP2_RX_PKT_SIZE(mtu), 8)) {
|
|
@@ -3509,40 +3510,24 @@ static int mvpp2_change_mtu(struct net_device *dev, int mtu)
|
|
|
mtu = ALIGN(MVPP2_RX_PKT_SIZE(mtu), 8);
|
|
mtu = ALIGN(MVPP2_RX_PKT_SIZE(mtu), 8);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (!netif_running(dev)) {
|
|
|
|
|
- err = mvpp2_bm_update_mtu(dev, mtu);
|
|
|
|
|
- if (!err) {
|
|
|
|
|
- port->pkt_size = MVPP2_RX_PKT_SIZE(mtu);
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /* Reconfigure BM to the original MTU */
|
|
|
|
|
- err = mvpp2_bm_update_mtu(dev, dev->mtu);
|
|
|
|
|
- if (err)
|
|
|
|
|
- goto log_error;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- mvpp2_stop_dev(port);
|
|
|
|
|
|
|
+ if (running)
|
|
|
|
|
+ mvpp2_stop_dev(port);
|
|
|
|
|
|
|
|
err = mvpp2_bm_update_mtu(dev, mtu);
|
|
err = mvpp2_bm_update_mtu(dev, mtu);
|
|
|
- if (!err) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ netdev_err(dev, "failed to change MTU\n");
|
|
|
|
|
+ /* Reconfigure BM to the original MTU */
|
|
|
|
|
+ mvpp2_bm_update_mtu(dev, dev->mtu);
|
|
|
|
|
+ } else {
|
|
|
port->pkt_size = MVPP2_RX_PKT_SIZE(mtu);
|
|
port->pkt_size = MVPP2_RX_PKT_SIZE(mtu);
|
|
|
- goto out_start;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /* Reconfigure BM to the original MTU */
|
|
|
|
|
- err = mvpp2_bm_update_mtu(dev, dev->mtu);
|
|
|
|
|
- if (err)
|
|
|
|
|
- goto log_error;
|
|
|
|
|
-
|
|
|
|
|
-out_start:
|
|
|
|
|
- mvpp2_start_dev(port);
|
|
|
|
|
- mvpp2_egress_enable(port);
|
|
|
|
|
- mvpp2_ingress_enable(port);
|
|
|
|
|
|
|
+ if (running) {
|
|
|
|
|
+ mvpp2_start_dev(port);
|
|
|
|
|
+ mvpp2_egress_enable(port);
|
|
|
|
|
+ mvpp2_ingress_enable(port);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- return 0;
|
|
|
|
|
-log_error:
|
|
|
|
|
- netdev_err(dev, "failed to change MTU\n");
|
|
|
|
|
return err;
|
|
return err;
|
|
|
}
|
|
}
|
|
|
|
|
|