From patchwork Tue Aug 29 22:43:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iyappan Subramanian X-Patchwork-Id: 807343 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=apm.com header.i=@apm.com header.b="lWYI4hn3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xhkF75KVLz9sD9 for ; Wed, 30 Aug 2017 08:43:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751310AbdH2WnV (ORCPT ); Tue, 29 Aug 2017 18:43:21 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:35724 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751270AbdH2WnU (ORCPT ); Tue, 29 Aug 2017 18:43:20 -0400 Received: by mail-pg0-f53.google.com with SMTP id 63so14665493pgc.2 for ; Tue, 29 Aug 2017 15:43:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apm.com; s=apm; h=from:to:cc:subject:date:message-id; bh=TpAWZn2aLl6SBtbyAVvw6mlUIyJkdVqlBfZk/Sw02XU=; b=lWYI4hn3hpggR14eX4KWAKVWRbNG7ec1AYU4YCLUqhfrm0jhm2kRML+pGmEhF8CgSF vx+YzrWwPIuNLbVrjHy2idzw6vHeKhpnAJDqpX9fespwHOcIK/U9FZuM8BZiyuPxN5tU H8WSp2Mwf7IBiTBdzgPdnsFsAkL++qSbiSbYs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=TpAWZn2aLl6SBtbyAVvw6mlUIyJkdVqlBfZk/Sw02XU=; b=Ej4VvUYlVeQKEzyJ0RfJlvHk0TT7HOkqCjjGw8hCP3zLalJkncsNgnanx00RFsaFU9 J6nUkWwx5edmE2jWdgwcqpRP/4G2nGxF1aUMxeFDTEXsI+QZ2EciKlFp5npDr8rMfZAy YJi4EBzXlmSN+qGWB7tFWEW4sJoAF7gs2t7o5RvjoUzMmvRJ0j6qra4V2hWhI/oo0Lmz Z2+3BmtZB0e51XpXQCHp1lXO2/juOs0+BzI8OoKn3UuZrBcC9YDbA5qouwdiUTxn85jc MKA57UU2NA7mwgS0abzufUHAZKWHBdG97HcKkDLG3nD02Pj6BQLI3Uwk3FMrP8Dhd8jM AeBg== X-Gm-Message-State: AHYfb5hFFUcl0NnwFMS8RwnctX3qc8aMRRIPozTSVnJy7VLNdkD7tfQZ lCYbe40jxcd4PPPy X-Received: by 10.84.211.150 with SMTP id c22mr2305438pli.23.1504046599541; Tue, 29 Aug 2017 15:43:19 -0700 (PDT) Received: from isubrama-dev.amcc.com ([206.80.4.98]) by smtp.gmail.com with ESMTPSA id d67sm6935982pfg.27.2017.08.29.15.43.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 29 Aug 2017 15:43:18 -0700 (PDT) From: Iyappan Subramanian To: davem@davemloft.net, netdev@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, dnelson@redhat.com, patches@apm.com, Quan Nguyen , Iyappan Subramanian Subject: [PATCH] drivers: net: xgene: Correct probe sequence handling Date: Tue, 29 Aug 2017 15:43:12 -0700 Message-Id: <1504046592-24779-1-git-send-email-isubramanian@apm.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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(&pdev->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(&pdata->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;