return err;
 }
 
-static int ethsw_open(struct ethsw_core *ethsw)
-{
-       struct ethsw_port_priv *port_priv = NULL;
-       int i, err;
-
-       err = dpsw_enable(ethsw->mc_io, 0, ethsw->dpsw_handle);
-       if (err) {
-               dev_err(ethsw->dev, "dpsw_enable err %d\n", err);
-               return err;
-       }
-
-       for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
-               port_priv = ethsw->ports[i];
-               err = dev_open(port_priv->netdev, NULL);
-               if (err) {
-                       netdev_err(port_priv->netdev, "dev_open err %d\n", err);
-                       return err;
-               }
-       }
-
-       return 0;
-}
-
-static int ethsw_stop(struct ethsw_core *ethsw)
-{
-       struct ethsw_port_priv *port_priv = NULL;
-       int i, err;
-
-       for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
-               port_priv = ethsw->ports[i];
-               dev_close(port_priv->netdev);
-       }
-
-       err = dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
-       if (err) {
-               dev_err(ethsw->dev, "dpsw_disable err %d\n", err);
-               return err;
-       }
-
-       return 0;
-}
-
 static int ethsw_init(struct fsl_mc_device *sw_dev)
 {
        struct device *dev = &sw_dev->dev;
 
        destroy_workqueue(ethsw_owq);
 
-       rtnl_lock();
-       ethsw_stop(ethsw);
-       rtnl_unlock();
+       dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
 
        for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
                port_priv = ethsw->ports[i];
                        goto err_free_ports;
        }
 
-       /* Switch starts up enabled */
-       rtnl_lock();
-       err = ethsw_open(ethsw);
-       rtnl_unlock();
-       if (err)
+       err = dpsw_enable(ethsw->mc_io, 0, ethsw->dpsw_handle);
+       if (err) {
+               dev_err(ethsw->dev, "dpsw_enable err %d\n", err);
                goto err_free_ports;
+       }
 
        /* Setup IRQs */
        err = ethsw_setup_irqs(sw_dev);
        return 0;
 
 err_stop:
-       rtnl_lock();
-       ethsw_stop(ethsw);
-       rtnl_unlock();
+       dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
 
 err_free_ports:
        /* Cleanup registered ports only */