From: Faiz Abbas Date: Mon, 18 Mar 2019 08:24:32 +0000 (+0530) Subject: net: ti: cpsw: Move cpsw_phy_sel() to _probe() X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=e50f878c98ddec1f8247b835335d7ea1ab8e7b3f;p=u-boot.git net: ti: cpsw: Move cpsw_phy_sel() to _probe() 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 --- 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);