nn->id = id;
 
+       if (nn->port) {
+               err = nfp_devlink_port_register(pf->app, nn->port);
+               if (err)
+                       return err;
+       }
+
        err = nfp_net_init(nn);
        if (err)
-               return err;
+               goto err_devlink_port_clean;
 
        nfp_net_debugfs_vnic_add(nn, pf->ddir);
 
-       if (nn->port) {
-               err = nfp_devlink_port_register(pf->app, nn->port);
-               if (err)
-                       goto err_dfs_clean;
+       if (nn->port)
                nfp_devlink_port_type_eth_set(nn->port);
-       }
 
        nfp_net_info(nn);
 
        if (nfp_net_is_data_vnic(nn)) {
                err = nfp_app_vnic_init(pf->app, nn);
                if (err)
-                       goto err_devlink_port_clean;
+                       goto err_devlink_port_type_clean;
        }
 
        return 0;
 
-err_devlink_port_clean:
-       if (nn->port) {
+err_devlink_port_type_clean:
+       if (nn->port)
                nfp_devlink_port_type_clear(nn->port);
-               nfp_devlink_port_unregister(nn->port);
-       }
-err_dfs_clean:
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
+err_devlink_port_clean:
+       if (nn->port)
+               nfp_devlink_port_unregister(nn->port);
        return err;
 }
 
 {
        if (nfp_net_is_data_vnic(nn))
                nfp_app_vnic_clean(pf->app, nn);
-       if (nn->port) {
+       if (nn->port)
                nfp_devlink_port_type_clear(nn->port);
-               nfp_devlink_port_unregister(nn->port);
-       }
        nfp_net_debugfs_dir_clean(&nn->debugfs_dir);
        nfp_net_clean(nn);
+       if (nn->port)
+               nfp_devlink_port_unregister(nn->port);
 }
 
 static int nfp_net_pf_alloc_irqs(struct nfp_pf *pf)