From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D4F3C43381 for ; Mon, 18 Feb 2019 20:28:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6E503204EC for ; Mon, 18 Feb 2019 20:28:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="idnJl/Hm" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729486AbfBRU2E (ORCPT ); Mon, 18 Feb 2019 15:28:04 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:33025 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726996AbfBRU2D (ORCPT ); Mon, 18 Feb 2019 15:28:03 -0500 Received: by mail-wr1-f67.google.com with SMTP id i12so19842628wrw.0 for ; Mon, 18 Feb 2019 12:28:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=U58+eM2wIVSg8KDG++LFLn0MDSJTVGSkLgvMQtk8eRc=; b=idnJl/Hmr4FMphDZzv9DHgQ64Hf1xRdAjxHgQkTwfO56MEMpoH9DaBDsrD05LNmiOy iKcUEUmbps7kCfUWLON12/8DnJU9Ij2Pg1u8Vhxyg4qWRmcXfoAr+NsgwNvdniDOup0L /diCDoVvqhMsA7osvkMA+kXWf1vWoIoj9nK3pH0A9lGu91zHDCIohDkxpPgTTDcfyfSA E8ggAIS9EpWbjzxOD4AR04lDAY71wa3ySzxmllFC4/gMsbACyTQDEfi6tZGOOzsDvGMU Zio0JE/eH1BOCOrQ2xyoLDYZGczovBZL7UyzzC1oYAzryim57fWs+fmY7N1TEVqYqUGE wiJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=U58+eM2wIVSg8KDG++LFLn0MDSJTVGSkLgvMQtk8eRc=; b=f+oxqkfJutB5pnZZcqRJwstiVWK8ML6ajVK+s6e84ZgQ39K3WUUDxiSt5WDU6QRCSa AJBzXqvHOWSmfgNQ7d/MhGkWpgEswxZ+vYCbR3OHf3nsdzJq4yiF6hyGNQj6+XNTLhe4 aee2uHRbvRkfTHljlFnudNQcVBuu4HIlJWsGzYXW0dOSWYmahBhEredvlE+1TKGT14EB oDAFuA/K03+PUgfGSULU62GrC3onmjQnYZccZwOfNe/CtX2w/zY8z6wS7HYjiVAUFnQb YWx6dD04ZDQd7N1ASBkmZYOsCDlVN2XnP5N2lvPS1P/2VwZWadjMThL8nMWcneVEpBab brbA== X-Gm-Message-State: AHQUAuZuDybWiPXMEl+Zb/ccsaid+cRL+Albw2duFaqdhC+yUqTH79ay ZUrTSxokIffZRgpfuPqPRAEYrkKl X-Google-Smtp-Source: AHgI3IZlfvTRx5/2y+c3vCAFNaeGoqqfc2VUtLuARaf2AzAKsCB08zYnO/Bmd2LA4+yFtX+cZ+DypQ== X-Received: by 2002:adf:e34e:: with SMTP id n14mr18932052wrj.195.1550521681697; Mon, 18 Feb 2019 12:28:01 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:71d7:c708:89b6:a86? (p200300EA8BF1E20071D7C70889B60A86.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:71d7:c708:89b6:a86]) by smtp.googlemail.com with ESMTPSA id a8sm6017682wrt.79.2019.02.18.12.28.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Feb 2019 12:28:01 -0800 (PST) From: Heiner Kallweit Subject: [PATCH net-next 3/4] net: phy: add genphy_c45_check_and_restart_aneg To: Andrew Lunn , Florian Fainelli , David Miller , Russell King - ARM Linux Cc: "netdev@vger.kernel.org" References: <35d86611-9a07-7239-3310-767d8d1050b5@gmail.com> Message-ID: <43526883-8c28-825a-32f9-10ac209fb4ff@gmail.com> Date: Mon, 18 Feb 2019 21:27:18 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <35d86611-9a07-7239-3310-767d8d1050b5@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This function will be used by config_aneg callback implementations of PHY drivers and allows to reduce boilerplate code. Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy-c45.c | 30 ++++++++++++++++++++++++++++++ include/linux/phy.h | 1 + 2 files changed, 31 insertions(+) diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index 2f5721430..fc3173cc0 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -156,6 +156,36 @@ int genphy_c45_restart_aneg(struct phy_device *phydev) } EXPORT_SYMBOL_GPL(genphy_c45_restart_aneg); +/** + * genphy_c45_check_and_restart_aneg - Enable and restart auto-negotiation + * @phydev: target phy_device struct + * @restart: whether aneg restart is requested + * + * This assumes that the auto-negotiation MMD is present. + * + * Check, and restart auto-negotiation if needed. + */ +int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart) +{ + int ret = 0; + + if (!restart) { + /* Configure and restart aneg if it wasn't set before */ + ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); + if (ret < 0) + return ret; + + if (!(ret & MDIO_AN_CTRL1_ENABLE)) + restart = true; + } + + if (restart) + ret = genphy_c45_restart_aneg(phydev); + + return ret; +} +EXPORT_SYMBOL_GPL(genphy_c45_check_and_restart_aneg); + /** * genphy_c45_aneg_done - return auto-negotiation complete status * @phydev: target phy_device struct diff --git a/include/linux/phy.h b/include/linux/phy.h index 761131de4..8e9fc5764 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1097,6 +1097,7 @@ int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum, /* Clause 45 PHY */ int genphy_c45_restart_aneg(struct phy_device *phydev); +int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart); int genphy_c45_aneg_done(struct phy_device *phydev); int genphy_c45_read_link(struct phy_device *phydev); int genphy_c45_read_lpa(struct phy_device *phydev); -- 2.20.1