Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1171339yba; Wed, 24 Apr 2019 16:41:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqzzGhgU05ZPvweDNfRytzbiYb1XT9hCkrzKKox11ZFjTPz5U/KYPbCt98+vWKeO86tID72D X-Received: by 2002:a17:902:2e83:: with SMTP id r3mr35310905plb.153.1556149268656; Wed, 24 Apr 2019 16:41:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556149268; cv=none; d=google.com; s=arc-20160816; b=TRuuWY53vp+5WYXmIpKslZlBow9imaTx47l6hsKPvBdoF3JdLjy4QHSmMUHkGX86Ah DH/WGTDTR/t1Wv4iZIjWJNSPfzWe/8p5WC8BmT+10iC3s+uz1TgtU8v6Ovhyg5EaedHK 6HoqTdY1M/kpiUO5q0GxKJxOCT0BmtJUbyRtrQtewDh/LB056OQsoc6KVeBm3YmPG3Qv LQ08BILdRbreNvR86L5y+WD5ewRxeNH0udZcnANKOX4sniRTt+XSu8sc8Joae2TS0F7I /1PYiTNquN42M1j+R8ldxmBvQlAX6p+qGpJEPiH1YVES7uK2Y3DqhpSHtP6E14msRstp xnbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Co909w5aaL31fdwCQ9v0LyKlLtbAoJwQ/4ym2ZK3YWY=; b=qmMUrcZD5bCMOIQwWvyyO2WHAzsUv4Dmd5ieQP744BT/49KLSK0lNDjd1JnieQF6RG N6IfOs7VwKxTKbDOt7+3KXskBs5H9QuiFPQl6ZiikUqnpX7qdf7AELDf5vsCJYX4RNT0 zclGx3QXCVaEz546rFV34TpGZDtZE+JPLSAegTQpDTFD1L1V1cG2lXnDTYZxAmygvX8p 4J2mHcUxI/NiJM5WRXgx9kzd3ePZfi7arE5YR1mx+vI2eriEObRxNfPilkhvHACrAQh6 RWJdj5RH4n9sqSPwZ0q8TAeaIIFFkyR03GGeXjW3j0p0elKUlGrq2yhvSzj0DIFMdBjn 8HRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=onZJdkMA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si5760719pgm.455.2019.04.24.16.40.53; Wed, 24 Apr 2019 16:41:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=onZJdkMA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391692AbfDXReV (ORCPT + 99 others); Wed, 24 Apr 2019 13:34:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:33152 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391320AbfDXReT (ORCPT ); Wed, 24 Apr 2019 13:34:19 -0400 Received: from localhost (62-193-50-229.as16211.net [62.193.50.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C3F8520675; Wed, 24 Apr 2019 17:34:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556127258; bh=WiBHy1XDhQ9OhFalEV3cJqNk8+TtWecaqYvrI3AQIbc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=onZJdkMA3QnY03fqw2rRjU48zL+4xtexd61qrjbpW4SjX0jLnA7CBuCzDEOQarOTm izAGW7b7bf1M9MybQVWW4WaoufWX4//n0UROk6JzdgGIS6FW8g5DBOym8u5NrFy63x fmJtO8DmquBViD+RO7vg8Oi4sP404XkcqF66kh30= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Fugang Duan , "David S. Miller" Subject: [PATCH 5.0 006/115] net: fec: manage ahb clock in runtime pm Date: Wed, 24 Apr 2019 19:09:02 +0200 Message-Id: <20190424170925.307896309@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190424170924.797924502@linuxfoundation.org> References: <20190424170924.797924502@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andy Duan [ Upstream commit d7c3a206e6338e4ccdf030719dec028e26a521d5 ] Some SOC like i.MX6SX clock have some limits: - ahb clock should be disabled before ipg. - ahb and ipg clocks are required for MAC MII bus. So, move the ahb clock to runtime management together with ipg clock. Signed-off-by: Fugang Duan Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/freescale/fec_main.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1840,13 +1840,9 @@ static int fec_enet_clk_enable(struct ne int ret; if (enable) { - ret = clk_prepare_enable(fep->clk_ahb); - if (ret) - return ret; - ret = clk_prepare_enable(fep->clk_enet_out); if (ret) - goto failed_clk_enet_out; + return ret; if (fep->clk_ptp) { mutex_lock(&fep->ptp_clk_mutex); @@ -1866,7 +1862,6 @@ static int fec_enet_clk_enable(struct ne phy_reset_after_clk_enable(ndev->phydev); } else { - clk_disable_unprepare(fep->clk_ahb); clk_disable_unprepare(fep->clk_enet_out); if (fep->clk_ptp) { mutex_lock(&fep->ptp_clk_mutex); @@ -1885,8 +1880,6 @@ failed_clk_ref: failed_clk_ptp: if (fep->clk_enet_out) clk_disable_unprepare(fep->clk_enet_out); -failed_clk_enet_out: - clk_disable_unprepare(fep->clk_ahb); return ret; } @@ -3470,6 +3463,9 @@ fec_probe(struct platform_device *pdev) ret = clk_prepare_enable(fep->clk_ipg); if (ret) goto failed_clk_ipg; + ret = clk_prepare_enable(fep->clk_ahb); + if (ret) + goto failed_clk_ahb; fep->reg_phy = devm_regulator_get_optional(&pdev->dev, "phy"); if (!IS_ERR(fep->reg_phy)) { @@ -3563,6 +3559,9 @@ failed_reset: pm_runtime_put(&pdev->dev); pm_runtime_disable(&pdev->dev); failed_regulator: + clk_disable_unprepare(fep->clk_ahb); +failed_clk_ahb: + clk_disable_unprepare(fep->clk_ipg); failed_clk_ipg: fec_enet_clk_enable(ndev, false); failed_clk: @@ -3686,6 +3685,7 @@ static int __maybe_unused fec_runtime_su struct net_device *ndev = dev_get_drvdata(dev); struct fec_enet_private *fep = netdev_priv(ndev); + clk_disable_unprepare(fep->clk_ahb); clk_disable_unprepare(fep->clk_ipg); return 0; @@ -3695,8 +3695,20 @@ static int __maybe_unused fec_runtime_re { struct net_device *ndev = dev_get_drvdata(dev); struct fec_enet_private *fep = netdev_priv(ndev); + int ret; - return clk_prepare_enable(fep->clk_ipg); + ret = clk_prepare_enable(fep->clk_ahb); + if (ret) + return ret; + ret = clk_prepare_enable(fep->clk_ipg); + if (ret) + goto failed_clk_ipg; + + return 0; + +failed_clk_ipg: + clk_disable_unprepare(fep->clk_ahb); + return ret; } static const struct dev_pm_ops fec_pm_ops = {