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 86A49C43381 for ; Sat, 23 Mar 2019 13:16:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4A68D218A5 for ; Sat, 23 Mar 2019 13:16:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="r6OrkRWx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727463AbfCWNQh (ORCPT ); Sat, 23 Mar 2019 09:16:37 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:52998 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726118AbfCWNQg (ORCPT ); Sat, 23 Mar 2019 09:16:36 -0400 Received: by mail-wm1-f66.google.com with SMTP id a184so4607012wma.2 for ; Sat, 23 Mar 2019 06:16:34 -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=AbRik8+DITQGiVo0EjtV+FUkRxSSbsxHWBMYNENwm0Q=; b=r6OrkRWx1HDQVqFeE9GwkLGeQqccuW7Fiz8JZGqWslHOUYPdqrFBzgyLjA9wpne3dA YfJjTqr+Ddq6GbE1WiDjzqgG2DIbSyEuBG9B0rNLJOBvWZl2ZfsJigov27ALS4D3VmQm nIt3Qlswnqr6c0Wic0oAx5C9o0V2ZLm9rRGgNS+X0c+W407ou0mchghNZCcBP3qB0Snb cosLHiKgJCMN5uZQPYaX9YooPDDBcdk6AzJqTOQ/b74GKYSiECf2yaj2Q1t7rzD/Cd6O 6SoNElww70M5+PicvVvBXiNI3EctSp6aunT9cO6FJnuhYqY7HNA95oykQ9WYFe8nvXTO JN0g== 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=AbRik8+DITQGiVo0EjtV+FUkRxSSbsxHWBMYNENwm0Q=; b=CEz8chhG3fqDoBKQIblQbEc/9cZzl4F5d0JziI3sNzxdoKb0khRIRZ2sbMcPCF5XWQ AMm9XO/IIRFRKeS5R6wZjPn2sCu+85MAxhPw/d8h/L/lkqqJgslCzTTCk7blNEkAlmlJ iDYsPfcIhgghPNyVfoJqZAKsfSqHrXm65PLHYdgxUAuv5Ikm60HWDjOrcHdfiCF+sdh1 fnCRB6D4Rxj2qyhaPycH6IUsW2g5ywg0gvfBANX5Ep2PDAhp0m2wm6AzlO1axPRacofJ rSLxc6HTwG+R26qIy66Q6YQ81qs9wSPZ8RMEZLzaCID/jkQs/wurorI0QyyFB6j5zR/d crwA== X-Gm-Message-State: APjAAAW39KcfdVE5q3RUZUkzk4AWypzNyae9EiwPhWKeNnlralcKbqdR YRD94rqPtgCsxqf5RAiTUZqcG3M4 X-Google-Smtp-Source: APXvYqyKIobmBdlZ32iqdkk/GhCrq9iBhMmF8vm5LYmrt0MlriVyHtm60I/ffI2z7Ol+/hz7X6fvZg== X-Received: by 2002:a1c:2885:: with SMTP id o127mr47130wmo.135.1553346993866; Sat, 23 Mar 2019 06:16:33 -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 c126sm13370762wma.0.2019.03.23.06.16.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Mar 2019 06:16:33 -0700 (PDT) Subject: [PATCH net-next 2/3] net: phy: aquantia: report PHY details like firmware version 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: Date: Sat, 23 Mar 2019 14:15:18 +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 Add reporting firmware details. These details are available only once the firmware has finished initializing the chip. This can take some time and we need to poll for init completion. Signed-off-by: Heiner Kallweit --- drivers/net/phy/aquantia_main.c | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c index 48d63dd1a..01a6d5cd4 100644 --- a/drivers/net/phy/aquantia_main.c +++ b/drivers/net/phy/aquantia_main.c @@ -70,6 +70,14 @@ #define MDIO_AN_RX_VEND_STAT3_AFR BIT(0) /* Vendor specific 1, MDIO_MMD_VEND1 */ +#define VEND1_GLOBAL_FW_ID 0x0020 +#define VEND1_GLOBAL_FW_ID_MAJOR GENMASK(15, 8) +#define VEND1_GLOBAL_FW_ID_MINOR GENMASK(7, 0) + +#define VEND1_GLOBAL_RSVD_STAT1 0xc885 +#define VEND1_GLOBAL_RSVD_STAT1_FW_BUILD_ID GENMASK(7, 4) +#define VEND1_GLOBAL_RSVD_STAT1_PROV_ID GENMASK(3, 0) + #define VEND1_GLOBAL_INT_STD_STATUS 0xfc00 #define VEND1_GLOBAL_INT_VEND_STATUS 0xfc01 @@ -349,6 +357,48 @@ static int aqr107_set_tunable(struct phy_device *phydev, } } +/* If we configure settings whilst firmware is still initializing the chip, + * then these settings may be overwritten. Therefore make sure chip + * initialization has completed. Use presence of the firmware ID as + * indicator for initialization having completed. + * The chip also provides a "reset completed" bit, but it's cleared after + * read. Therefore function would time out if called again. + */ +static void aqr107_wait_reset_complete(struct phy_device *phydev) +{ + int val, retries = 100; + + do { + val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); + if (val < 0) + return; + msleep(20); + } while (!val && --retries); +} + +static void aqr107_chip_info(struct phy_device *phydev) +{ + u8 fw_major, fw_minor, build_id, prov_id; + int val; + + val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); + if (val < 0) + return; + + fw_major = FIELD_GET(VEND1_GLOBAL_FW_ID_MAJOR, val); + fw_minor = FIELD_GET(VEND1_GLOBAL_FW_ID_MINOR, val); + + val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT1); + if (val < 0) + return; + + build_id = FIELD_GET(VEND1_GLOBAL_RSVD_STAT1_FW_BUILD_ID, val); + prov_id = FIELD_GET(VEND1_GLOBAL_RSVD_STAT1_PROV_ID, val); + + phydev_dbg(phydev, "FW %u.%u, Build %u, Provisioning %u\n", + fw_major, fw_minor, build_id, prov_id); +} + static int aqr107_config_init(struct phy_device *phydev) { /* Check that the PHY interface type is compatible */ @@ -357,9 +407,13 @@ static int aqr107_config_init(struct phy_device *phydev) phydev->interface != PHY_INTERFACE_MODE_10GKR) return -ENODEV; + aqr107_wait_reset_complete(phydev); + /* ensure that a latched downshift event is cleared */ aqr107_read_downshift_event(phydev); + aqr107_chip_info(phydev); + return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); } @@ -372,6 +426,8 @@ static int aqcs109_config_init(struct phy_device *phydev) phydev->interface != PHY_INTERFACE_MODE_2500BASEX) return -ENODEV; + aqr107_wait_reset_complete(phydev); + /* AQCS109 belongs to a chip family partially supporting 10G and 5G. * PMA speed ability bits are the same for all members of the family, * AQCS109 however supports speeds up to 2.5G only. @@ -383,6 +439,8 @@ static int aqcs109_config_init(struct phy_device *phydev) /* ensure that a latched downshift event is cleared */ aqr107_read_downshift_event(phydev); + aqr107_chip_info(phydev); + return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); } -- 2.21.0