mlxsw: spectrum: Do not process learned records with a dummy FID
[linux-2.6-microblaze.git] / drivers / net / ethernet / ti / cpsw.c
index f16aefd..32a8974 100644 (file)
@@ -2570,9 +2570,10 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
                        ret = PTR_ERR(slave_data->ifphy);
                        dev_err(&pdev->dev,
                                "%d: Error retrieving port phy: %d\n", i, ret);
-                       return ret;
+                       goto err_node_put;
                }
 
+               slave_data->slave_node = slave_node;
                slave_data->phy_node = of_parse_phandle(slave_node,
                                                        "phy-handle", 0);
                parp = of_get_property(slave_node, "phy_id", &lenp);
@@ -2588,7 +2589,7 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
                        if (ret) {
                                if (ret != -EPROBE_DEFER)
                                        dev_err(&pdev->dev, "failed to register fixed-link phy: %d\n", ret);
-                               return ret;
+                               goto err_node_put;
                        }
                        slave_data->phy_node = of_node_get(slave_node);
                } else if (parp) {
@@ -2606,7 +2607,8 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
                        of_node_put(mdio_node);
                        if (!mdio) {
                                dev_err(&pdev->dev, "Missing mdio platform device\n");
-                               return -EINVAL;
+                               ret = -EINVAL;
+                               goto err_node_put;
                        }
                        snprintf(slave_data->phy_id, sizeof(slave_data->phy_id),
                                 PHY_ID_FMT, mdio->name, phyid);
@@ -2621,7 +2623,8 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
                if (slave_data->phy_if < 0) {
                        dev_err(&pdev->dev, "Missing or malformed slave[%d] phy-mode property\n",
                                i);
-                       return slave_data->phy_if;
+                       ret = slave_data->phy_if;
+                       goto err_node_put;
                }
 
 no_phy_slave:
@@ -2632,7 +2635,7 @@ no_phy_slave:
                        ret = ti_cm_get_macid(&pdev->dev, i,
                                              slave_data->mac_addr);
                        if (ret)
-                               return ret;
+                               goto err_node_put;
                }
                if (data->dual_emac) {
                        if (of_property_read_u32(slave_node, "dual_emac_res_vlan",
@@ -2647,11 +2650,17 @@ no_phy_slave:
                }
 
                i++;
-               if (i == data->slaves)
-                       break;
+               if (i == data->slaves) {
+                       ret = 0;
+                       goto err_node_put;
+               }
        }
 
        return 0;
+
+err_node_put:
+       of_node_put(slave_node);
+       return ret;
 }
 
 static void cpsw_remove_dt(struct platform_device *pdev)
@@ -2674,8 +2683,10 @@ static void cpsw_remove_dt(struct platform_device *pdev)
                of_node_put(slave_data->phy_node);
 
                i++;
-               if (i == data->slaves)
+               if (i == data->slaves) {
+                       of_node_put(slave_node);
                        break;
+               }
        }
 
        of_platform_depopulate(&pdev->dev);
@@ -2723,6 +2734,7 @@ static int cpsw_probe_dual_emac(struct cpsw_priv *priv)
 
        /* register the network device */
        SET_NETDEV_DEV(ndev, cpsw->dev);
+       ndev->dev.of_node = cpsw->slaves[1].data->slave_node;
        ret = register_netdev(ndev);
        if (ret)
                dev_err(cpsw->dev, "cpsw: error registering net device\n");
@@ -2900,6 +2912,7 @@ static int cpsw_probe(struct platform_device *pdev)
 
        /* register the network device */
        SET_NETDEV_DEV(ndev, dev);
+       ndev->dev.of_node = cpsw->slaves[0].data->slave_node;
        ret = register_netdev(ndev);
        if (ret) {
                dev_err(dev, "error registering net device\n");