From patchwork Tue Feb 13 16:29:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 872954 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qc/3tkLW"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgp1308vBz9t3C for ; Wed, 14 Feb 2018 03:30:14 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 44D26C21F8A; Tue, 13 Feb 2018 16:30:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id B1DAAC21F4D; Tue, 13 Feb 2018 16:30:04 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id DFB3DC21C3F; Tue, 13 Feb 2018 16:30:02 +0000 (UTC) Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by lists.denx.de (Postfix) with ESMTPS id 7F73DC21F8C for ; Tue, 13 Feb 2018 16:30:02 +0000 (UTC) Received: by mail-wm0-f68.google.com with SMTP id r71so17226984wmd.1 for ; Tue, 13 Feb 2018 08:30:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=qOHnzXr82JlbEYijUvbxj12E+w15dBlWw/t56SgiosI=; b=qc/3tkLW8XjuqYCu4KjAkaZP2nbCeabkqd8hkLCkpGiZuOp6SRFKcZ76WLDLjq0gpi 9KcML+mRF7p37CNuUAULdAjnfNAL7Qvl/mygnKh7wsxgfrM+zCjeCBWBVuXz7rRjrHij Kdzt4zR+Gggvgy9POsevtcFdqvbPzCCiVUquYjJ9rZpdL22/NN/+cLpBWC19jpjUC+n2 2b/GDMZLiCGFq41qscTtumCr648s43fNX0MdI2SKk/JcdEVtXLgKbYmQ7POeML7wfcSV w9K8Ts+Fq1IsQ1OQzmcawpvSryQgCw+tlWpXcKVIEZ7HJJs6YhyZAwEKgLXiO7f2XoRd Rlhg== 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=qOHnzXr82JlbEYijUvbxj12E+w15dBlWw/t56SgiosI=; b=quM+7RsqA82H2n1ZNRuvlSGPM+J2inTGHDKC7iJlamd9fBj8BBKdGQbl7Jdf9yxq/6 Dy6j77GecuaKsb0mL8AzybP9jcOf9eW3tVlCH8O1m8z3nbqOol+dNv8WmTimvbCLAge6 7GBryKdDeMAvf7BX7W9eQYnp1OPtYBOCHp1NBggyDqIlA61oNsnfEDXZoUyPY8ij8bs2 6PbGl2WQ6uz8JW1y03IFB1Vt3Bouh+kdq4Gy5VpnnTgw+3PiayhouGvbSxOmjaNrfjTM LvO2fqfErgv7uq4tlYv8yG9BcXSx1uDe2r6h6+kxSyVuqFXzGN+gV9u4oxr/38+jMISi B6Mg== X-Gm-Message-State: APf1xPAHPfmObTIZglQgEamrzTNGuVuHQdMwBred0LTP2ii00MyX9bQs lMEr41iF/KtrDwwqnlGIxarEOtbB X-Google-Smtp-Source: AH8x227YMe4Yy7XFndaquHdyqkRH/hdVQ3kgICqAsBuHcMCaQzYySzA6uCOT3tEdXISMY6G5sx0oww== X-Received: by 10.28.143.196 with SMTP id r187mr1961763wmd.68.1518539401552; Tue, 13 Feb 2018 08:30:01 -0800 (PST) Received: from kurokawa.lan (ip-86-49-107-50.net.upcbroadband.cz. [86.49.107.50]) by smtp.gmail.com with ESMTPSA id x63sm2125098wme.35.2018.02.13.08.30.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Feb 2018 08:30:00 -0800 (PST) From: Marek Vasut X-Google-Original-From: Marek Vasut To: u-boot@lists.denx.de Date: Tue, 13 Feb 2018 17:29:54 +0100 Message-Id: <20180213162954.15329-1-marek.vasut+renesas@gmail.com> X-Mailer: git-send-email 2.15.1 Cc: Joe Hershberger , Geert Uytterhoeven , Marek Vasut Subject: [U-Boot] [PATCH] net: ravb: Initialize PHY in probe() once X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Reset and initialize the PHY once in the probe() function rather than doing it over and over again is start() function. This requires us to keep the clock enabled while the driver is in use. This significantly reduces the time between transfers as the PHY doesn't have to restart autonegotiation between transfers, which takes forever. Signed-off-by: Marek Vasut Cc: Geert Uytterhoeven Cc: Joe Hershberger Acked-by: Joe Hershberger --- drivers/net/ravb.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/net/ravb.c b/drivers/net/ravb.c index 093288b639..bd30cba940 100644 --- a/drivers/net/ravb.c +++ b/drivers/net/ravb.c @@ -399,7 +399,7 @@ static int ravb_dmac_init(struct udevice *dev) static int ravb_config(struct udevice *dev) { struct ravb_priv *eth = dev_get_priv(dev); - struct phy_device *phy; + struct phy_device *phy = eth->phydev; u32 mask = ECMR_CHG_DM | ECMR_RE | ECMR_TE; int ret; @@ -410,13 +410,6 @@ static int ravb_config(struct udevice *dev) ravb_mac_init(eth); ravb_write_hwaddr(dev); - /* Configure phy */ - ret = ravb_phy_config(dev); - if (ret) - return ret; - - phy = eth->phydev; - ret = phy_startup(phy); if (ret) return ret; @@ -443,10 +436,6 @@ static int ravb_start(struct udevice *dev) struct ravb_priv *eth = dev_get_priv(dev); int ret; - ret = clk_enable(ð->clk); - if (ret) - return ret; - ret = ravb_reset(dev); if (ret) goto err; @@ -473,8 +462,8 @@ static void ravb_stop(struct udevice *dev) { struct ravb_priv *eth = dev_get_priv(dev); + phy_shutdown(eth->phydev); ravb_reset(dev); - clk_disable(ð->clk); } static int ravb_probe(struct udevice *dev) @@ -512,8 +501,23 @@ static int ravb_probe(struct udevice *dev) eth->bus = miiphy_get_dev_by_name(dev->name); + /* Bring up PHY */ + ret = clk_enable(ð->clk); + if (ret) + goto err_mdio_register; + + ret = ravb_reset(dev); + if (ret) + goto err_mdio_reset; + + ret = ravb_phy_config(dev); + if (ret) + goto err_mdio_reset; + return 0; +err_mdio_reset: + clk_disable(ð->clk); err_mdio_register: mdio_free(mdiodev); err_mdio_alloc: @@ -525,6 +529,8 @@ static int ravb_remove(struct udevice *dev) { struct ravb_priv *eth = dev_get_priv(dev); + clk_disable(ð->clk); + free(eth->phydev); mdio_unregister(eth->bus); mdio_free(eth->bus);