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.8 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 8332EC43381 for ; Sat, 23 Mar 2019 13:16:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 457212175B for ; Sat, 23 Mar 2019 13:16:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PSUe5b7z" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727298AbfCWNQe (ORCPT ); Sat, 23 Mar 2019 09:16:34 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:44499 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726118AbfCWNQe (ORCPT ); Sat, 23 Mar 2019 09:16:34 -0400 Received: by mail-wr1-f68.google.com with SMTP id y7so1081150wrn.11 for ; Sat, 23 Mar 2019 06:16:32 -0700 (PDT) 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=Mo7OuOYq6nYwlDjENZl2t5nci/vzQkIvI0qEb0y9uc8=; b=PSUe5b7zLfZeMpIbSvi9/cUUqUbzXL+rsGllFA3aVV4W9BrjVRorRD4mnQEk8XLYns ndDOk9ryJt7haa24Z6Ae8N7gSW4VlesJ8hBMz4Ys4vUtmVId/iU/5mnpG+279Ucl5NRn jHuQPrNmPy8Np01nTKf9FpRBTgE7QAZTQI4+fow8hY9BlrB9rDS/jKl1gDFRFdep3sRV czJtw3YNx9qQrVX/QdzDwBCtjzABOigJ/UxHVCDFj/ieb4MuqJ2GgR73t10IhIenoK5L XKGEAWPAHVOlM8yCt2k8Su4EdnO9yp7YBVD7F6pZyJ+TTJSc9GneusIMxYkhso2jCzjd vZ6Q== 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=Mo7OuOYq6nYwlDjENZl2t5nci/vzQkIvI0qEb0y9uc8=; b=dkjNixgIvHcZo0jAqZJVYuvKvt/IjNV5EG5XUtkyqCgsT7p9+vq2PUPDJF47O8lX2Y aRTnY/RzTMX2FAVCv4RhLCYc6r5XuIohddQEdi1bCrWB3bEvPfF4MCTRt2brTiprPFmb CWAuSW1zm7+RoXzI/8QxWqJBKOsyobtt3HGNL8Z+D+Uw22iRN7hBkz9oWmU3rCn/bjjB 8ZS8V35qPQp3nn0eSO+gSArA/8sBH0/QkuUs/fjaXkE5GnYrWIms102wgEv+QKAkGKMR uyq27QOeiAkOvtNFPdlIg+5rqIfJjslz8TLI07YoTAstbeI/ePiu1hSP7T4QUTsye8nb /tSQ== X-Gm-Message-State: APjAAAXgGz9yQqpX+eEEOw/0cCWjX3XiIJl4eFJVVUjtG6DBiIJOZ/Zw UAZ6Sl0owS2XGdd+uqn04AJwNUNz X-Google-Smtp-Source: APXvYqxQND6ICUW1yOJsKFDXK0DJnKqVozbyk6knseNR88d3OEqDeytFY3fPYaPMUxMK8ePsjPj1bA== X-Received: by 2002:adf:f488:: with SMTP id l8mr9690181wro.213.1553346992063; Sat, 23 Mar 2019 06:16:32 -0700 (PDT) Received: from ?IPv6:2003:ea:8bc4:dc00:49b3:4cd3:4cd9:effe? (p200300EA8BC4DC0049B34CD34CD9EFFE.dip0.t-ipconnect.de. [2003:ea:8bc4:dc00:49b3:4cd3:4cd9:effe]) by smtp.googlemail.com with ESMTPSA id u2sm18924152wmc.45.2019.03.23.06.16.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Mar 2019 06:16:31 -0700 (PDT) Subject: [PATCH net-next 1/3] net: phy: aquantia: report remote capabilities if link partner is Aquantia PHY From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" References: <0e35a866-e3a5-6d49-2353-008f14ed6ff4@gmail.com> Message-ID: <265860ca-a5d0-e0f6-3caa-a300b35d2ded@gmail.com> Date: Sat, 23 Mar 2019 14:14:15 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.0 MIME-Version: 1.0 In-Reply-To: <0e35a866-e3a5-6d49-2353-008f14ed6ff4@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 If both link partners are Aquantia PHY's then additional information is exchanged as part of the auto-negotiation. Report remote capabilities if link partner is Aquantia PHY. Signed-off-by: Heiner Kallweit --- drivers/net/phy/aquantia_main.c | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c index 5c148df28..48d63dd1a 100644 --- a/drivers/net/phy/aquantia_main.c +++ b/drivers/net/phy/aquantia_main.c @@ -58,6 +58,16 @@ #define MDIO_AN_RX_LP_STAT1 0xe820 #define MDIO_AN_RX_LP_STAT1_1000BASET_FULL BIT(15) #define MDIO_AN_RX_LP_STAT1_1000BASET_HALF BIT(14) +#define MDIO_AN_RX_LP_STAT1_SHORT_REACH BIT(13) +#define MDIO_AN_RX_LP_STAT1_AQRATE_DOWNSHIFT BIT(12) +#define MDIO_AN_RX_LP_STAT1_AQ_PHY BIT(2) + +#define MDIO_AN_RX_LP_STAT4 0xe823 +#define MDIO_AN_RX_LP_STAT4_FW_MAJOR GENMASK(15, 8) +#define MDIO_AN_RX_LP_STAT4_FW_MINOR GENMASK(7, 0) + +#define MDIO_AN_RX_VEND_STAT3 0xe832 +#define MDIO_AN_RX_VEND_STAT3_AFR BIT(0) /* Vendor specific 1, MDIO_MMD_VEND1 */ #define VEND1_GLOBAL_INT_STD_STATUS 0xfc00 @@ -376,6 +386,43 @@ static int aqcs109_config_init(struct phy_device *phydev) return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); } +static void aqr107_link_change_notify(struct phy_device *phydev) +{ + u8 fw_major, fw_minor; + bool downshift, short_reach, afr; + int val; + + if (phydev->state != PHY_RUNNING || phydev->autoneg == AUTONEG_DISABLE) + return; + + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); + /* call failed or link partner is no Aquantia PHY */ + if (val < 0 || !(val & MDIO_AN_RX_LP_STAT1_AQ_PHY)) + return; + + short_reach = val & MDIO_AN_RX_LP_STAT1_SHORT_REACH; + downshift = val & MDIO_AN_RX_LP_STAT1_AQRATE_DOWNSHIFT; + + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT4); + if (val < 0) + return; + + fw_major = FIELD_GET(MDIO_AN_RX_LP_STAT4_FW_MAJOR, val); + fw_minor = FIELD_GET(MDIO_AN_RX_LP_STAT4_FW_MINOR, val); + + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_VEND_STAT3); + if (val < 0) + return; + + afr = val & MDIO_AN_RX_VEND_STAT3_AFR; + + phydev_dbg(phydev, "Link partner is Aquantia PHY, FW %u.%u%s%s%s\n", + fw_major, fw_minor, + short_reach ? ", short reach mode" : "", + downshift ? ", fast-retrain downshift advertised" : "", + afr ? ", fast reframe advertised" : ""); +} + static struct phy_driver aqr_driver[] = { { PHY_ID_MATCH_MODEL(PHY_ID_AQ1202), @@ -430,6 +477,7 @@ static struct phy_driver aqr_driver[] = { .read_status = aqr107_read_status, .get_tunable = aqr107_get_tunable, .set_tunable = aqr107_set_tunable, + .link_change_notify = aqr107_link_change_notify, }, { PHY_ID_MATCH_MODEL(PHY_ID_AQCS109), @@ -444,6 +492,7 @@ static struct phy_driver aqr_driver[] = { .read_status = aqr107_read_status, .get_tunable = aqr107_get_tunable, .set_tunable = aqr107_set_tunable, + .link_change_notify = aqr107_link_change_notify, }, { PHY_ID_MATCH_MODEL(PHY_ID_AQR405), -- 2.21.0