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=-7.0 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 746B6C43381 for ; Fri, 15 Feb 2019 20:58:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3BF6B222DE for ; Fri, 15 Feb 2019 20:58:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i1vW/cjV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391613AbfBOU6r (ORCPT ); Fri, 15 Feb 2019 15:58:47 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:33559 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391158AbfBOU6r (ORCPT ); Fri, 15 Feb 2019 15:58:47 -0500 Received: by mail-wm1-f65.google.com with SMTP id h22so7519620wmb.0 for ; Fri, 15 Feb 2019 12:58:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bwCyFCwNj6b+Uaj8cQss9urzJO6QlxzxfWKmUkGzJs8=; b=i1vW/cjVqk1I66qPRTdntIRZVKLxrU4sdyxgCJUXG4BcBjXWeb2YP3O/XqtYej2kt0 tQE0qdvij4DfeowrLgvwGrc+Woqft2dbEcQZkU/ZB9IoZGplEZCNj2Ue1rJXQaU2pYtb TgEDqPGl8VTLwIdnmpM7kMF8YEymHVLVHc3s9BfEAVj33u1fXlLERqU8rEUVowirQrjo CdLGcHLr9IbxSnyWBnjgBS1R9+LmY2zFsP2MAYsjpKAHx9JLCbmyE1AgJjOr7S5o4389 NOxcyghv2addvfl2CdruvKK1dij4/XNLnkqjCDYmvr2q0VoqhfgM3pxjrn1cQ9Y+oVb7 Wbpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bwCyFCwNj6b+Uaj8cQss9urzJO6QlxzxfWKmUkGzJs8=; b=bGopq8XFFoJ6o9ahFSWUvCbU04Uysf4fLWLMkuFptuytmgmPXHhE82JWFwxXJ6fKm0 5QD8yunJJOuN+OfiRmhyrdmPX9IBg8jatgP9+E67hQzsVMc0glDk8aY23E06ywyFjM1C zgxtR1YixJ9YR5VLCAtBuXmVxy68BcZB/n+rXG326rs3kIlJ4jDEFv24f+TO0hCxpU6u aN5VsUoUB3XnF6AjMwXhwhqMPTuyv7jG6hUaL3sxm0eKPNIXingIb4rnklQII1/3siOY Wf2GpN2hVxDuKEhtZCiimISgzXR/ID4EM3DqGFsAfdkj7aoIyTRJO9nb/PlLLEQcM1i/ BLSA== X-Gm-Message-State: AHQUAuatc8DJtUF+MCVNoZnY6D4hYuf+WIbksz7+vR5TX/1wu9qJQeEc N5Yu/aD1KRu9Mqc8oQYIeiGtrHM2 X-Google-Smtp-Source: AHgI3IYEi4naREAQruR4s2YhwdsHmRPQ2OQITxhXoixszex+/33PrlhXnJt8BmcIL6Sq3H0TapZtVg== X-Received: by 2002:a1c:b40b:: with SMTP id d11mr8323595wmf.80.1550264325005; Fri, 15 Feb 2019 12:58:45 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:9003:d3f4:b53e:b11? (p200300EA8BF1E2009003D3F4B53E0B11.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:9003:d3f4:b53e:b11]) by smtp.googlemail.com with ESMTPSA id p9sm1831973wmc.14.2019.02.15.12.58.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Feb 2019 12:58:44 -0800 (PST) Subject: [PATCH net-next 1/2] net: phy: add helpers for handling C45 10GBT AN register values From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" References: <60b2e19d-e138-dfa0-fa79-19f3cbece99e@gmail.com> Message-ID: <5c217a09-dac8-d8db-3a38-c9a621ae55a6@gmail.com> Date: Fri, 15 Feb 2019 21:57:49 +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: <60b2e19d-e138-dfa0-fa79-19f3cbece99e@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 Similar to the existing helpers for the Clause 22 registers add helpers to deal with converting Clause 45 advertisement registers to / from link mode bitmaps. Note that these helpers are defined in linux/mdio.h, not like the Clause 22 helpers in linux/mii.h. Reason is that the Clause 45 register constants are defined in uapi/linux/mdio.h. And uapi/linux/mdio.h includes linux/mii.h before defining the C45 register constants. Signed-off-by: Heiner Kallweit --- include/linux/mdio.h | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/include/linux/mdio.h b/include/linux/mdio.h index bfa711416..ce0d5ddbf 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -261,6 +261,69 @@ static inline u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv) return reg; } +/** + * linkmode_adv_to_mii_10gbt_adv_t + * @advertising: the linkmode advertisement settings + * + * A small helper function that translates linkmode advertisement + * settings to phy autonegotiation advertisements for the C45 + * 10GBASE-T AN CONTROL (7.32) register. + */ +static inline u32 linkmode_adv_to_mii_10gbt_adv_t(unsigned long *advertising) +{ + u32 result = 0; + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + advertising)) + result |= MDIO_AN_10GBT_CTRL_ADV2_5G; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + advertising)) + result |= MDIO_AN_10GBT_CTRL_ADV5G; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + advertising)) + result |= MDIO_AN_10GBT_CTRL_ADV10G; + + return result; +} + +/** + * mii_10gbt_stat_mod_linkmode_lpa_t + * @advertising: target the linkmode advertisement settings + * @adv: value of the C45 10GBASE-T AN STATUS register + * + * A small helper function that translates C45 10GBASE-T AN STATUS register bits + * to linkmode advertisement settings. Other bits in advertising aren't changed. + */ +static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising, + u32 lpa) +{ + linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP2_5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP10G); +} + +/** + * mii_10gbt_adv_mod_linkmode_adv_t + * @advertising:pointer to destination link mode. + * @adv: value of the C45 10GBASE-T AN CONTROL register + * + * A small helper function that translates the C45 10GBASE-T AN CONTROL + * register to linkmode advertisement settings. Leaves other bits unchanged. + */ +static inline void mii_10gbt_adv_mod_linkmode_adv_t(unsigned long *advertising, + u32 adv) +{ + linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + advertising, adv & MDIO_AN_10GBT_CTRL_ADV2_5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + advertising, adv & MDIO_AN_10GBT_CTRL_ADV5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + advertising, adv & MDIO_AN_10GBT_CTRL_ADV10G); +} + int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); -- 2.20.1