Re: [PATCH] drivers: net: xgene: Correct probe sequence handling

2017-08-29 Thread David Miller
From: Iyappan Subramanian 
Date: Tue, 29 Aug 2017 15:43:12 -0700

> From: Quan Nguyen 
> 
> The phy is connected at early stage of probe but not properly
> disconnected if error occurs.  This patch fixes the issue.
> 
> Also changing the return type of xgene_enet_check_phy_handle(),
> since this function always returns success.
> 
> Signed-off-by: Quan Nguyen 
> Signed-off-by: Iyappan Subramanian 

Applied, thank you.


[PATCH] drivers: net: xgene: Correct probe sequence handling

2017-08-29 Thread Iyappan Subramanian
From: Quan Nguyen 

The phy is connected at early stage of probe but not properly
disconnected if error occurs.  This patch fixes the issue.

Also changing the return type of xgene_enet_check_phy_handle(),
since this function always returns success.

Signed-off-by: Quan Nguyen 
Signed-off-by: Iyappan Subramanian 
---
 drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 27 
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c 
b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
index 1d307f2..6e253d9 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
@@ -1661,21 +1661,21 @@ static int xgene_enet_get_irqs(struct xgene_enet_pdata 
*pdata)
return 0;
 }
 
-static int xgene_enet_check_phy_handle(struct xgene_enet_pdata *pdata)
+static void xgene_enet_check_phy_handle(struct xgene_enet_pdata *pdata)
 {
int ret;
 
if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII)
-   return 0;
+   return;
 
if (!IS_ENABLED(CONFIG_MDIO_XGENE))
-   return 0;
+   return;
 
ret = xgene_enet_phy_connect(pdata->ndev);
if (!ret)
pdata->mdio_driver = true;
 
-   return 0;
+   return;
 }
 
 static void xgene_enet_gpiod_get(struct xgene_enet_pdata *pdata)
@@ -1779,10 +1779,6 @@ static int xgene_enet_get_resources(struct 
xgene_enet_pdata *pdata)
if (ret)
return ret;
 
-   ret = xgene_enet_check_phy_handle(pdata);
-   if (ret)
-   return ret;
-
xgene_enet_gpiod_get(pdata);
 
pdata->clk = devm_clk_get(>dev, NULL);
@@ -2097,9 +2093,11 @@ static int xgene_enet_probe(struct platform_device *pdev)
goto err;
}
 
+   xgene_enet_check_phy_handle(pdata);
+
ret = xgene_enet_init_hw(pdata);
if (ret)
-   goto err;
+   goto err2;
 
link_state = pdata->mac_ops->link_state;
if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) {
@@ -2117,29 +2115,30 @@ static int xgene_enet_probe(struct platform_device 
*pdev)
spin_lock_init(>stats_lock);
ret = xgene_extd_stats_init(pdata);
if (ret)
-   goto err2;
+   goto err1;
 
xgene_enet_napi_add(pdata);
ret = register_netdev(ndev);
if (ret) {
netdev_err(ndev, "Failed to register netdev\n");
-   goto err2;
+   goto err1;
}
 
return 0;
 
-err2:
+err1:
/*
 * If necessary, free_netdev() will call netif_napi_del() and undo
 * the effects of xgene_enet_napi_add()'s calls to netif_napi_add().
 */
 
+   xgene_enet_delete_desc_rings(pdata);
+
+err2:
if (pdata->mdio_driver)
xgene_enet_phy_disconnect(pdata);
else if (phy_interface_mode_is_rgmii(pdata->phy_mode))
xgene_enet_mdio_remove(pdata);
-err1:
-   xgene_enet_delete_desc_rings(pdata);
 err:
free_netdev(ndev);
return ret;
-- 
2.7.4