cpsw_phy_sel() is a configuration step that should not be in
ofdata_to_platdata(). Add phy_sel_compat to the cpsw_platform_data
structure so that it is accessible in _probe. Then move the call of
cpsw_phy_sel() to _probe.

Signed-off-by: Faiz Abbas <faiz_ab...@ti.com>
---
 drivers/net/ti/cpsw.c | 33 ++++++++++++++++-----------------
 include/cpsw.h        |  1 +
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ti/cpsw.c b/drivers/net/ti/cpsw.c
index f5fd02efe1..bd33d80ab4 100644
--- a/drivers/net/ti/cpsw.c
+++ b/drivers/net/ti/cpsw.c
@@ -1048,16 +1048,6 @@ static void cpsw_eth_stop(struct udevice *dev)
        return _cpsw_halt(priv);
 }
 
-
-static int cpsw_eth_probe(struct udevice *dev)
-{
-       struct cpsw_priv *priv = dev_get_priv(dev);
-
-       priv->dev = dev;
-
-       return _cpsw_register(priv);
-}
-
 static const struct eth_ops cpsw_eth_ops = {
        .start          = cpsw_eth_start,
        .send           = cpsw_eth_send,
@@ -1188,13 +1178,25 @@ static void cpsw_phy_sel(struct cpsw_priv *priv, const 
char *compat,
                cpsw_gmii_sel_dra7xx(priv, phy_mode);
 }
 
+static int cpsw_eth_probe(struct udevice *dev)
+{
+       struct cpsw_priv *priv = dev_get_priv(dev);
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+
+       priv->dev = dev;
+       /* Select phy interface in control module */
+       cpsw_phy_sel(priv, priv->data.phy_sel_compat,
+                    pdata->phy_interface);
+
+       return _cpsw_register(priv);
+}
+
 static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
 {
        struct eth_pdata *pdata = dev_get_platdata(dev);
        struct cpsw_priv *priv = dev_get_priv(dev);
        struct gpio_desc *mode_gpios;
        const char *phy_mode;
-       const char *phy_sel_compat = NULL;
        const void *fdt = gd->fdt_blob;
        int node = dev_of_offset(dev);
        int subnode;
@@ -1315,9 +1317,9 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice 
*dev)
                                             NULL))
                                priv->data.rmii_clock_external = true;
 
-                       phy_sel_compat = fdt_getprop(fdt, subnode, "compatible",
-                                                    NULL);
-                       if (!phy_sel_compat) {
+                       priv->data.phy_sel_compat = fdt_getprop(fdt, subnode,
+                                                               "compatible", 
NULL);
+                       if (!priv->data.phy_sel_compat) {
                                pr_err("Not able to get gmii_sel compatible\n");
                                return -ENOENT;
                        }
@@ -1344,9 +1346,6 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice 
*dev)
                return -EINVAL;
        }
 
-       /* Select phy interface in control module */
-       cpsw_phy_sel(priv, phy_sel_compat, pdata->phy_interface);
-
        return 0;
 }
 
diff --git a/include/cpsw.h b/include/cpsw.h
index 9f8ce8850f..55db277e73 100644
--- a/include/cpsw.h
+++ b/include/cpsw.h
@@ -50,6 +50,7 @@ struct cpsw_platform_data {
        u32     active_slave;
        bool    rmii_clock_external;
        u8      version;
+       const char *phy_sel_compat;
 };
 
 int cpsw_register(struct cpsw_platform_data *data);
-- 
2.19.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to