Merge branches 'pm-devfreq', 'pm-qos', 'pm-tools' and 'pm-docs'
[linux-2.6-block.git] / drivers / net / ethernet / ti / am65-cpsw-nuss.c
index fb92d4c1547db4eddb348badbb647af37f482c18..f4a6b590a1e3995a6eb51ba2c8d0c27b9b9af641 100644 (file)
@@ -2467,7 +2467,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common)
                                port->port_id, ret);
                        goto dl_port_unreg;
                }
-               devlink_port_type_eth_set(dl_port, port->ndev);
        }
        devlink_register(common->devlink);
        return ret;
@@ -2511,6 +2510,7 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common)
 static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
 {
        struct device *dev = common->dev;
+       struct devlink_port *dl_port;
        struct am65_cpsw_port *port;
        int ret = 0, i;
 
@@ -2527,6 +2527,10 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
                return ret;
        }
 
+       ret = am65_cpsw_nuss_register_devlink(common);
+       if (ret)
+               return ret;
+
        for (i = 0; i < common->port_num; i++) {
                port = &common->ports[i];
 
@@ -2539,25 +2543,24 @@ static int am65_cpsw_nuss_register_ndevs(struct am65_cpsw_common *common)
                                i, ret);
                        goto err_cleanup_ndev;
                }
+
+               dl_port = &port->devlink_port;
+               devlink_port_type_eth_set(dl_port, port->ndev);
        }
 
        ret = am65_cpsw_register_notifiers(common);
        if (ret)
                goto err_cleanup_ndev;
 
-       ret = am65_cpsw_nuss_register_devlink(common);
-       if (ret)
-               goto clean_unregister_notifiers;
-
        /* can't auto unregister ndev using devm_add_action() due to
         * devres release sequence in DD core for DMA
         */
 
        return 0;
-clean_unregister_notifiers:
-       am65_cpsw_unregister_notifiers(common);
+
 err_cleanup_ndev:
        am65_cpsw_nuss_cleanup_ndev(common);
+       am65_cpsw_unregister_devlink(common);
 
        return ret;
 }