Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp422352pxb; Wed, 3 Mar 2021 06:42:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJy9k9BmflN/+Kp1qGwvCHOdYHg6JJa+1XEvqC55Ry+u6NOeyuT1laEU+/VBkUWnoENeK6l2 X-Received: by 2002:a17:906:271b:: with SMTP id z27mr25615586ejc.313.1614782557756; Wed, 03 Mar 2021 06:42:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614782557; cv=none; d=google.com; s=arc-20160816; b=gFupeqvSsRZwLCRI8AP2V2kT8vzcrzDi9jKNZHLDDOkVJdtqpvZKMpuCXfcq82uoU5 z639Npdt6R4GV9LsxN7EzC/HLfWUiD7LOtJtBppvFfnkyN5R2THZaly/qP5aDCeNbVJQ GPMyNxt7NU6v18FM5KWWSkqgUHgJCbXeKP92RkOg2TD96n7yUe+lkOkzhjKKGGoOSn28 2YIakRG8LNC89TmPYeKgyhpETaiSmtRhn5FlKbn0yPV4OLpHTQyaib1yWFaH788goOpD ph7QwuQPIzTYN5Nc8XEd/AgGDfH+vcRoAFTFvuB3b5c6mcZlCWnKN5X/TkCmoEj98hKt +MRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=upGDADF5ujSpiz1NOhSEP2akHNpD0/XCmbEia3lsT+E=; b=pHjy9XhoEeM0wPf9f9wbWjnrM6cXd3iDO9mkjqk+JXCjUOYfdadiyCc6oYZjrrSc15 9aXTCgFjCQPRhxgiDz6qyoSA2TsZvB8Md8Ck1lloK+qhTGXjD2+W2ST9Syy5CzMbVu3V CV8wOkvKxRTp5e0hiNisQT2gr6+6Li5vDKuyIdNBA2bQdLZA6vr0+rsoPgpn+S4oycXf Bpk+0lsH0zrj9FcZnIUrc4+Rewhvp8PDKrDA538h4J4DAhzwXg9s9uNJC7Tbz7dbdW2Z yr42AKSU8+l3qpUQoURuimmiFR6z8QAFI2iQdZGU4krWwKKgAJOwQBDlMs+fhfkU+wu7 rrcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rMVYLLUq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga4si7927812ejc.303.2021.03.03.06.41.45; Wed, 03 Mar 2021 06:42:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rMVYLLUq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244799AbhCAV61 (ORCPT + 99 others); Mon, 1 Mar 2021 16:58:27 -0500 Received: from mail.kernel.org ([198.145.29.99]:48862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233332AbhCARYc (ORCPT ); Mon, 1 Mar 2021 12:24:32 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8E0AA6507B; Mon, 1 Mar 2021 16:50:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614617404; bh=WfcKUo4nY3Hze/FZ3xrnAd0M7v+3HpRFmz8u9nvwLyU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rMVYLLUqPLNWsfMcau1UJfJ+jFGCT03DxMrPyn1cAIKpiqZoLkrqKF4v+rcibLtAc 4VcejTXndUwsn99uKSlEH2wBMyLiVmNjQMW/c7wmt5i5tuEoqdkCBi0K6qTFyytPmr vdkZJAII5Q0YB0N/GmTGGv28gP+v6DJJ5aGitKF8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Robert Hancock , "David S. Miller" , Sasha Levin Subject: [PATCH 5.4 060/340] net: axienet: Handle deferred probe on clock properly Date: Mon, 1 Mar 2021 17:10:04 +0100 Message-Id: <20210301161051.272337127@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161048.294656001@linuxfoundation.org> References: <20210301161048.294656001@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Robert Hancock [ Upstream commit 57baf8cc70ea4cf5503c9d42f31f6a86d7f5ff1a ] This driver is set up to use a clock mapping in the device tree if it is present, but still work without one for backward compatibility. However, if getting the clock returns -EPROBE_DEFER, then we need to abort and return that error from our driver initialization so that the probe can be retried later after the clock is set up. Move clock initialization to earlier in the process so we do not waste as much effort if the clock is not yet available. Switch to use devm_clk_get_optional and abort initialization on any error reported. Also enable the clock regardless of whether the controller is using an MDIO bus, as the clock is required in any case. Fixes: 09a0354cadec267be7f ("net: axienet: Use clock framework to get device clock rate") Signed-off-by: Robert Hancock Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- .../net/ethernet/xilinx/xilinx_axienet_main.c | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index bb6e52f3bdf9b..f98318d93ce72 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -1689,6 +1689,18 @@ static int axienet_probe(struct platform_device *pdev) lp->options = XAE_OPTION_DEFAULTS; lp->rx_bd_num = RX_BD_NUM_DEFAULT; lp->tx_bd_num = TX_BD_NUM_DEFAULT; + + lp->clk = devm_clk_get_optional(&pdev->dev, NULL); + if (IS_ERR(lp->clk)) { + ret = PTR_ERR(lp->clk); + goto free_netdev; + } + ret = clk_prepare_enable(lp->clk); + if (ret) { + dev_err(&pdev->dev, "Unable to enable clock: %d\n", ret); + goto free_netdev; + } + /* Map device registers */ ethres = platform_get_resource(pdev, IORESOURCE_MEM, 0); lp->regs = devm_ioremap_resource(&pdev->dev, ethres); @@ -1836,20 +1848,6 @@ static int axienet_probe(struct platform_device *pdev) lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); if (lp->phy_node) { - lp->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(lp->clk)) { - dev_warn(&pdev->dev, "Failed to get clock: %ld\n", - PTR_ERR(lp->clk)); - lp->clk = NULL; - } else { - ret = clk_prepare_enable(lp->clk); - if (ret) { - dev_err(&pdev->dev, "Unable to enable clock: %d\n", - ret); - goto free_netdev; - } - } - ret = axienet_mdio_setup(lp); if (ret) dev_warn(&pdev->dev, -- 2.27.0