return 0;
 
        /* alloc netdev */
-       port->ndev = devm_alloc_etherdev_mqs(common->dev,
-                                            sizeof(struct am65_cpsw_ndev_priv),
-                                            AM65_CPSW_MAX_QUEUES,
-                                            AM65_CPSW_MAX_QUEUES);
+       port->ndev = alloc_etherdev_mqs(sizeof(struct am65_cpsw_ndev_priv),
+                                       AM65_CPSW_MAX_QUEUES,
+                                       AM65_CPSW_MAX_QUEUES);
        if (!port->ndev) {
                dev_err(dev, "error allocating slave net_device %u\n",
                        port->port_id);
 
        for (i = 0; i < common->port_num; i++) {
                port = &common->ports[i];
-               if (port->ndev && port->ndev->reg_state == NETREG_REGISTERED)
+               if (!port->ndev)
+                       continue;
+               if (port->ndev->reg_state == NETREG_REGISTERED)
                        unregister_netdev(port->ndev);
+               free_netdev(port->ndev);
+               port->ndev = NULL;
        }
 }
 
 
        ret = am65_cpsw_nuss_init_ndevs(common);
        if (ret)
-               goto err_free_phylink;
+               goto err_ndevs_clear;
 
        ret = am65_cpsw_nuss_register_ndevs(common);
        if (ret)
-               goto err_free_phylink;
+               goto err_ndevs_clear;
 
        pm_runtime_put(dev);
        return 0;
 
-err_free_phylink:
+err_ndevs_clear:
+       am65_cpsw_nuss_cleanup_ndev(common);
        am65_cpsw_nuss_phylink_cleanup(common);
        am65_cpts_release(common->cpts);
 err_of_clear: