From patchwork Mon Jan 30 08:07:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50179 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062524wrn; Mon, 30 Jan 2023 00:10:49 -0800 (PST) X-Google-Smtp-Source: AK7set8Bpy70vu22eCjsAiNSVyDYovucuhqJr2JHUnv19fyGJ8SF/a9r6jDNQOLZJxx4cfuo79W2 X-Received: by 2002:a17:907:a042:b0:87b:e105:5d9a with SMTP id gz2-20020a170907a04200b0087be1055d9amr10519158ejc.67.1675066249626; Mon, 30 Jan 2023 00:10:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066249; cv=none; d=google.com; s=arc-20160816; b=FY+2SHXFjQdvUIJsGgVgmgsp3aHdSIoQ3J4/3SsaRUgDM2QpIZFcNL+AyiU+nUhbwW R0HpJFPVILnVuUCM7gsdp0S+rEv82K95z+8oMdPzQFafQ9lHrufQPQ9s+8f2jAFmdZnq K12qg+mAwOw3e8YLXvBea0vR6FasdmKs08lOUwQyiIA696lPCpz40Lf/Hh4V2ExwxMhT kvb6EzKDM9LqHH4Q7GyfUEAink3s01R23vMnJkdCBZJlaOycS+07sJ5oIC1wXu6qDXyJ 3KmhgFZi61fuEMzv/dCaSHSYWhlFvTZLeSiuoggLsxJF208SNnqVcfRcHzYtmabKg3EY Iq0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=usSdi5wYQW4TftEVXt62bnyJM2cN/8UKvmNIMkMoNeo=; b=Z/7+1iOT84fcFTXbKSyU0n3l9hQdC/KMG2oxN5pLIpn1k6IlQViRkxkhWGTI3LZsup bf2EQFU8/4763lft2cEZQiv0odI8rWKtt8ynrvPRdNKPLUXrHBYQ7NdjkDo9Urau95y5 cZzf4/mzuMqYhwwWVe2deGuvHP4DA2jgbdBnB+HDWwrtd20jmNklGMAL7SwccLridp8j OoU+5t+BfyhXIBvuVM3GVNNmK8uukFcX3UGBxZCIgNFKdJ6e3R7L4KSjJNAhBc9mItbB JUY0DcKzCoUEW98BAv1RLh3Hv4oYSWADr6Ukv50JX3x/1jZ9cC2lih9c9CN/OKzm4RMM l8Ug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 24-20020a170906009800b008879a229025si3398942ejc.333.2023.01.30.00.10.22; Mon, 30 Jan 2023 00:10:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235869AbjA3III (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235573AbjA3IHe (ORCPT ); Mon, 30 Jan 2023 03:07:34 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C518029E1B for ; Mon, 30 Jan 2023 00:07:31 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003fH-Rx; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCB-001PwU-4s; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJ9-Hb; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 01/15] net: dsa: microchip: enable EEE support Date: Mon, 30 Jan 2023 09:07:00 +0100 Message-Id: <20230130080714.139492-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434267658815967?= X-GMAIL-MSGID: =?utf-8?q?1756434267658815967?= Some of KSZ9477 family switches provides EEE support. To enable it, we just need to register set_mac_eee/set_mac_eee handlers and validate supported chip version and port. Signed-off-by: Oleksij Rempel --- drivers/net/dsa/microchip/ksz_common.c | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 5e1e5bd555d2..bef36e2fa257 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -2645,6 +2645,70 @@ static int ksz_max_mtu(struct dsa_switch *ds, int port) return -EOPNOTSUPP; } +static int ksz_validate_eee(struct dsa_switch *ds, int port) +{ + struct ksz_device *dev = ds->priv; + + if (!dev->info->internal_phy[port]) + return -EOPNOTSUPP; + + switch (dev->chip_id) { + case KSZ8563_CHIP_ID: + case KSZ9477_CHIP_ID: + case KSZ9563_CHIP_ID: + case KSZ9567_CHIP_ID: + case KSZ9893_CHIP_ID: + case KSZ9896_CHIP_ID: + case KSZ9897_CHIP_ID: + return 0; + } + + return -EOPNOTSUPP; +} + +static int ksz_get_mac_eee(struct dsa_switch *ds, int port, + struct ethtool_eee *e) +{ + int ret; + + ret = ksz_validate_eee(ds, port); + if (ret) + return ret; + + /* There is no documented control of Tx LPI configuration. + */ + e->tx_lpi_enabled = true; + /* There is no documented control of Tx LPI timer. According to testes + * Tx LPI timer seems to be set by default to minimal value. + */ + e->tx_lpi_timer = 0; + + return 0; +} + +static int ksz_set_mac_eee(struct dsa_switch *ds, int port, + struct ethtool_eee *e) +{ + struct ksz_device *dev = ds->priv; + int ret; + + ret = ksz_validate_eee(ds, port); + if (ret) + return ret; + + if (!e->tx_lpi_enabled) { + dev_err(dev->dev, "Disabling EEE Tx LPI is not supported\n"); + return -EINVAL; + } + + if (e->tx_lpi_timer) { + dev_err(dev->dev, "Setting EEE Tx LPI timer is not supported\n"); + return -EINVAL; + } + + return 0; +} + static void ksz_set_xmii(struct ksz_device *dev, int port, phy_interface_t interface) { @@ -3006,6 +3070,8 @@ static const struct dsa_switch_ops ksz_switch_ops = { .port_hwtstamp_set = ksz_hwtstamp_set, .port_txtstamp = ksz_port_txtstamp, .port_rxtstamp = ksz_port_rxtstamp, + .get_mac_eee = ksz_get_mac_eee, + .set_mac_eee = ksz_set_mac_eee, }; struct ksz_device *ksz_switch_alloc(struct device *base, void *priv) From patchwork Mon Jan 30 08:07:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50180 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062782wrn; Mon, 30 Jan 2023 00:11:38 -0800 (PST) X-Google-Smtp-Source: AK7set+G6vSpJXE/x/QgYrZvNdZqp+ZamL962MxlayIFvOLCoTvjNq1V8yMrvJ0dHzD4rk4zdszU X-Received: by 2002:a17:906:7f19:b0:887:d0e6:fa28 with SMTP id d25-20020a1709067f1900b00887d0e6fa28mr3658068ejr.1.1675066298361; Mon, 30 Jan 2023 00:11:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066298; cv=none; d=google.com; s=arc-20160816; b=iQ+qtu9vE/qqBOP7b9RK02JVm57lXC2Kaz9PGbTBwaiPmLaXoOYp9d8rrcqttSa7fh pg3EykIa0XfxTjq/lld9jKjF67ADydqS+90D5EqysADgby8Yu6ZG3k+XSOQIzMImrsb5 /19pyFd1L53TA8/BTqJmAkDR/Pt/oQ1HsClUcXvUPpGH2IHSTUTYcfb6fhGE8P7AVdMg Mw9fsIvyK29Z638xW3gl6P5G/jM0BY1A8uJApiixuNp6XqhN8a7lhXRzkJMJUW8yTc62 5dgeD3dS4pNVm03cXKoNQo1J1eHEVyPHOy/QfaIHR7ocW306jjLDye/fOgr+REfAfcuu 6QLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iW9XEICg9B6cVBiVmyI723JdODuBsJHcXnr4mwTKSCE=; b=PYTLk4zLkBzqf0HA6TGbWYtL4UV268/wAK50OsVGSiXPK/kgK8v8RZW5CCIMYx15zx 1YZiUR5rfoyRJHBNP5Zgto4QPg7sxKArgt6bp928FFPoq+WS88keFpXkyWvFxBgPq49e FNJM+va3Jl0TmDQM7thdBcjJ+Ov7pnRb09k5eVG3Tjy5ttsW75ABbkLqcrRLWvUSxs9m O4OFImaiq58HkXLxLuk4z6eMP0fxUZfRB8meT7hDoqP24+K240VjJxPDIFwNivZYeog1 br4i3WWqFzqz3mkYs3SHuk6aZEJIUW6+fTcGp9L9k75oOQ957zuVENLvkDDjrhaqBxk9 g9VQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w6-20020a05640234c600b0049e2adfe83dsi16139282edc.235.2023.01.30.00.11.14; Mon, 30 Jan 2023 00:11:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235695AbjA3IIO (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235658AbjA3IHf (ORCPT ); Mon, 30 Jan 2023 03:07:35 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE6FF29E34 for ; Mon, 30 Jan 2023 00:07:31 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003fE-N3; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001PwL-Uj; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJI-IF; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 02/15] net: phy: add genphy_c45_read_eee_abilities() function Date: Mon, 30 Jan 2023 09:07:01 +0100 Message-Id: <20230130080714.139492-3-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434318538753495?= X-GMAIL-MSGID: =?utf-8?q?1756434318538753495?= Add generic function for EEE abilities defined by IEEE 802.3 specification. For now following registers are supported: - IEEE 802.3-2018 45.2.3.10 EEE control and capability 1 (Register 3.20) - IEEE 802.3cg-2019 45.2.1.186b 10BASE-T1L PMA status register (Register 1.2295) Since I was not able to find any flag signaling support of this registers, we should detect link mode abilities first and then based on this abilities doing EEE link modes detection. Results of EEE ability detection will be stored in to new variable phydev->supported_eee. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy-c45.c | 49 ++++++++++++++++++++++++++++++++++++ drivers/net/phy/phy_device.c | 16 ++++++++++++ include/linux/mdio.h | 17 +++++++++++++ include/linux/phy.h | 5 ++++ 4 files changed, 87 insertions(+) diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index cff83220595c..03af19796848 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -661,6 +661,55 @@ int genphy_c45_read_mdix(struct phy_device *phydev) } EXPORT_SYMBOL_GPL(genphy_c45_read_mdix); +/** + * genphy_c45_read_eee_abilities - read supported EEE link modes + * @phydev: target phy_device struct + * + * Read supported EEE link modes. + */ +int genphy_c45_read_eee_abilities(struct phy_device *phydev) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); + int val; + + linkmode_and(common, phydev->supported, PHY_EEE_100_10000_FEATURES); + /* There is not indicator if optional register + * "EEE control and capability 1" (3.20) is supported. Read it only + * on devices with appropriate linkmodes. + */ + if (!linkmode_empty(common)) { + /* IEEE 802.3-2018 45.2.3.10 EEE control and capability 1 + * (Register 3.20) + */ + val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); + if (val < 0) + return val; + + mii_eee_100_10000_adv_mod_linkmode_t(phydev->supported_eee, val); + + /* Some buggy devices claim not supported EEE link modes */ + linkmode_and(phydev->supported_eee, phydev->supported_eee, + phydev->supported); + } + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + phydev->supported)) { + /* IEEE 802.3cg-2019 45.2.1.186b 10BASE-T1L PMA status register + * (Register 1.2295) + */ + val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10T1L_STAT); + if (val < 0) + return val; + + linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + phydev->supported_eee, + val & MDIO_PMA_10T1L_STAT_EEE); + } + + return 0; +} +EXPORT_SYMBOL_GPL(genphy_c45_read_eee_abilities); + /** * genphy_c45_pma_read_abilities - read supported link modes from PMA * @phydev: target phy_device struct diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 0d371a0a49f2..698549ef2981 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -132,6 +132,18 @@ static const int phy_10gbit_full_features_array[] = { ETHTOOL_LINK_MODE_10000baseT_Full_BIT, }; +static const int phy_eee_100_10000_features_array[6] = { + ETHTOOL_LINK_MODE_100baseT_Full_BIT, + ETHTOOL_LINK_MODE_1000baseT_Full_BIT, + ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, + ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, + ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, +}; + +__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_eee_100_10000_features) __ro_after_init; +EXPORT_SYMBOL_GPL(phy_eee_100_10000_features); + static void features_init(void) { /* 10/100 half/full*/ @@ -213,6 +225,10 @@ static void features_init(void) linkmode_set_bit_array(phy_10gbit_fec_features_array, ARRAY_SIZE(phy_10gbit_fec_features_array), phy_10gbit_fec_features); + linkmode_set_bit_array(phy_eee_100_10000_features_array, + ARRAY_SIZE(phy_eee_100_10000_features_array), + phy_eee_100_10000_features); + } void phy_device_free(struct phy_device *phydev) diff --git a/include/linux/mdio.h b/include/linux/mdio.h index 220f3ca8702d..ea4f7d08d1a6 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -410,6 +410,23 @@ static inline u32 linkmode_adv_to_mii_t1_adv_m_t(unsigned long *advertising) return result; } +static inline void mii_eee_100_10000_adv_mod_linkmode_t(unsigned long *adv, + u32 val) +{ + linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, + adv, val & MDIO_EEE_100TX); + linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, + adv, val & MDIO_EEE_1000T); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + adv, val & MDIO_EEE_10GT); + linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, + adv, val & MDIO_EEE_1000KX); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, + adv, val & MDIO_EEE_10GKX4); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, + adv, val & MDIO_EEE_10GKR); +} + int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, diff --git a/include/linux/phy.h b/include/linux/phy.h index b3cf1e08e880..42a4a5d66472 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -52,6 +52,7 @@ extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_ extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init; extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init; extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init; +extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_eee_100_10000_features) __ro_after_init; #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features) #define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features) @@ -62,6 +63,7 @@ extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_ini #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features) #define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features) #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features) +#define PHY_EEE_100_10000_FEATURES ((unsigned long *)&phy_eee_100_10000_features) extern const int phy_basic_ports_array[3]; extern const int phy_fibre_port_array[1]; @@ -684,6 +686,8 @@ struct phy_device { __ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising); /* used with phy_speed_down */ __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old); + /* used for eee validation */ + __ETHTOOL_DECLARE_LINK_MODE_MASK(supported_eee); /* Host supported PHY interface types. Should be ignored if empty. */ DECLARE_PHY_INTERFACE_MASK(host_interfaces); @@ -1745,6 +1749,7 @@ int genphy_c45_an_config_aneg(struct phy_device *phydev); int genphy_c45_an_disable_aneg(struct phy_device *phydev); int genphy_c45_read_mdix(struct phy_device *phydev); int genphy_c45_pma_read_abilities(struct phy_device *phydev); +int genphy_c45_read_eee_abilities(struct phy_device *phydev); int genphy_c45_pma_baset1_read_master_slave(struct phy_device *phydev); int genphy_c45_read_status(struct phy_device *phydev); int genphy_c45_baset1_read_status(struct phy_device *phydev); From patchwork Mon Jan 30 08:07:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50169 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061707wrn; Mon, 30 Jan 2023 00:08:11 -0800 (PST) X-Google-Smtp-Source: AK7set9Ddinoj5AQibAPfdFqvybe8pDZ1m06BLKmXnJosp1GSmpKf636RnVguRKF2R6Q44jp/2e+ X-Received: by 2002:a05:6402:35d3:b0:4a0:b72d:d4 with SMTP id z19-20020a05640235d300b004a0b72d00d4mr24125722edc.31.1675066091079; Mon, 30 Jan 2023 00:08:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066091; cv=none; d=google.com; s=arc-20160816; b=uq/yQF7DADw+ZPip4WrSA0iS8jZhULWZk0DC3hY7kZ1+6w02Al4lQmiD9RKaTHnlRO zOUuXm2TMuQz7EPIqX37pTtcVP4VylQvJKKgdwuIfgbqsngS4y5DFhgYPrS6vztVe2XP ETu+7Z59/rkiCbH5FCpyI5UYbxfPQ5HpMyamr+v4edzvwmptsMJN+1RR0SkRC7lBGOc4 t2a+RehN0wWNFASQEYjMjYtTjlzZNQRV5E5ynITu5qgV38K0pM89hdic143xsTEWIVac C2FZ4uCLpK2iuGIjH4YHxbnSbGpNq3+qciqVber1FUG0QovlvexG3HkUqSDHqFtwDRvB mJtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ONbKyVG12Ym74wZevUXtQLSq63uIod12uEkaw4IFet8=; b=hiIlFxPqPxUghSr7zPonvguYUMEBDi4p5u+MTyAOai7cgEF/9KXtPQhOKQ1kUMhHro quitF5lLbaR+tKIMUvQ3C4YeEaLKZmIPZiLsgCI6GSPNuhT6SvV6BixWQKj5Diw6/4X4 QPNKm3KeKzuxoG0tRjlZ8dbiRR6mPazedoq9K4bZeq6BMoBThL40y+FcRHxkhzvmN2rx 1geHLo/Zvd8GxK/oCTRNENyNc+ag6ni3P3FIuI/R2XQ4mN+yyUfv8k9fdRou/mTKzRjs ZfRWwx9gLGKvWR3wAExJFil34UZATSxRYRS+FOdFzSiaeLi/DbZrKWfPlEcggNT1aDA+ tspQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y12-20020a056402270c00b00493969bd008si17589032edd.121.2023.01.30.00.07.47; Mon, 30 Jan 2023 00:08:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235670AbjA3IHg (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235533AbjA3IHb (ORCPT ); Mon, 30 Jan 2023 03:07:31 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B002D2942E for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003f5-2i; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPC9-001Pvv-TJ; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJR-Iv; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 03/15] net: phy: micrel: add ksz9477_get_features() Date: Mon, 30 Jan 2023 09:07:02 +0100 Message-Id: <20230130080714.139492-4-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434101792827041?= X-GMAIL-MSGID: =?utf-8?q?1756434101792827041?= KSZ8563R, which has same PHYID as KSZ9477 family, will change "EEE control and capability 1" (Register 3.20) content depending on configuration of "EEE advertisement 1" (Register 7.60). Changes on the 7.60 will affect 3.20 register. So, instead of depending on register 3.20 driver should set supported_eee. Proper supported_eee configuration is needed to make use of generic PHY c45 set/get_eee functions provided by next patches. Signed-off-by: Oleksij Rempel --- drivers/net/phy/micrel.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index d5b80c31ab91..767c4111cb18 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -1370,6 +1370,26 @@ static int ksz9131_config_aneg(struct phy_device *phydev) return genphy_config_aneg(phydev); } +static int ksz9477_get_features(struct phy_device *phydev) +{ + int ret; + + ret = genphy_read_abilities(phydev); + if (ret) + return ret; + + /* The "EEE control and capability 1" (Register 3.20) seems to be + * influenced by the "EEE advertisement 1" (Register 7.60). Changes + * on the 7.60 will affect 3.20. So, we need to construct our own list + * of caps. + * KSZ8563R should have 100BaseTX/Full only. + */ + linkmode_and(phydev->supported_eee, phydev->supported, + PHY_EEE_100_10000_FEATURES); + + return 0; +} + #define KSZ8873MLL_GLOBAL_CONTROL_4 0x06 #define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX BIT(6) #define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED BIT(4) @@ -3422,6 +3442,7 @@ static struct phy_driver ksphy_driver[] = { .handle_interrupt = kszphy_handle_interrupt, .suspend = genphy_suspend, .resume = genphy_resume, + .get_features = ksz9477_get_features, } }; module_phy_driver(ksphy_driver); From patchwork Mon Jan 30 08:07:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50170 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061730wrn; Mon, 30 Jan 2023 00:08:15 -0800 (PST) X-Google-Smtp-Source: AK7set8CUK2PcoSJDLCHwGeqjh6T6s7ispO53AWbUJ69S9F+DVX90/jGwP+pKQoY3YIkNyQ15PEa X-Received: by 2002:a17:906:a249:b0:881:d1ad:1640 with SMTP id bi9-20020a170906a24900b00881d1ad1640mr6845708ejb.57.1675066095556; Mon, 30 Jan 2023 00:08:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066095; cv=none; d=google.com; s=arc-20160816; b=fkFfGG7nf6WIOMKskFDF+xsZYuzI1rIUu+NfoV9bByxYZ1zkTxFOty4YKGonqXhKty W5lYFCaw2agNZmZCP/B0hF2gKtGANxxNMpbIpIBHMVBDThBNeZxHHTw09picq4Fj1aCZ miOYrCuYf67YSCxgZV8gx6FgS72dsO9jMI7NP5JRxgrVru7/2SlkZs2a2JWyyZ9UTtS1 47iSq/YSegE+tlpk8RB1tfvI+gCq6qxG6qaJYn5iB/wjDN2m7IY5KoBNFZdRMiz7sVQd tWdEvr4aXbTcVk2kmiFvYCVDEyvPZbM+oeqUY0xlZ+zlR1OOOwjiyG+0aR1OAsBweDTT lUkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=jDVp+gD16qkTkS+P+xgIkG6Pv4/TKHWO0m9iUsiv5Rs=; b=Hs+1uBkIr0Vvtrlps/b2tZ+g0269ZY9W8LQ6QkthBqtUDTs9NhzCFA6ZF2hweSzZqv JD+sjPEAn86eViVhzd6/Vx8HAzL/DIay94VqvsCpEoNEgEEsenvBCFRhRu+Vvi7jfSPc KXVAHRTr3VZf/b0Ve2F+YlxyM1W38JMNM51yGTjqgEcyFgEi6tjTuU19BYoBCeq2Cd2g SjYk7MPmLE6msCqJ4f2fddw7wEJ/JTuiFLQDXb6HL1sx8TyW+bo/3cZ6MCv6UzGX/WU1 iO3oK7ZTMdaO2DHJVB9dnKhNzoAfsj65ZEAvsnjnh23T3vnjuBWnIF/VfQkvYv3+Ghnl vSGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id wi19-20020a170906fd5300b0086c7dc4fd9bsi12431676ejb.538.2023.01.30.00.07.52; Mon, 30 Jan 2023 00:08:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235692AbjA3IHi (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59956 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235562AbjA3IHb (ORCPT ); Mon, 30 Jan 2023 03:07:31 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B017529437 for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003f4-2j; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPC9-001Pvs-Mb; Mon, 30 Jan 2023 09:07:16 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJa-JV; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 04/15] net: phy: export phy_check_valid() function Date: Mon, 30 Jan 2023 09:07:03 +0100 Message-Id: <20230130080714.139492-5-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434105901168249?= X-GMAIL-MSGID: =?utf-8?q?1756434105901168249?= This function will be needed for genphy_c45_ethtool_get_eee() provided by next patch. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy.c | 4 ++-- include/linux/phy.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 3378ca4f49b6..41cfb24c48c1 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -242,11 +242,11 @@ unsigned int phy_supported_speeds(struct phy_device *phy, * * Description: Returns true if there is a valid setting, false otherwise. */ -static inline bool phy_check_valid(int speed, int duplex, - unsigned long *features) +bool phy_check_valid(int speed, int duplex, unsigned long *features) { return !!phy_lookup_setting(speed, duplex, features, true); } +EXPORT_SYMBOL(phy_check_valid); /** * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex diff --git a/include/linux/phy.h b/include/linux/phy.h index 42a4a5d66472..950e5ee0d8f2 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1626,6 +1626,7 @@ int phy_start_aneg(struct phy_device *phydev); int phy_aneg_done(struct phy_device *phydev); int phy_speed_down(struct phy_device *phydev, bool sync); int phy_speed_up(struct phy_device *phydev); +bool phy_check_valid(int speed, int duplex, unsigned long *features); int phy_restart_aneg(struct phy_device *phydev); int phy_reset_after_clk_enable(struct phy_device *phydev); From patchwork Mon Jan 30 08:07:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50182 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062955wrn; Mon, 30 Jan 2023 00:12:05 -0800 (PST) X-Google-Smtp-Source: AMrXdXuXt5lNHSmi8tosagxf6HHXutKxwq6ei+3e6E8EtO5di7JVFPB1CkJD5FciR7CP3DBOTcb8 X-Received: by 2002:a17:906:cccc:b0:846:56fe:6c68 with SMTP id ot12-20020a170906cccc00b0084656fe6c68mr47033343ejb.21.1675066325109; Mon, 30 Jan 2023 00:12:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066325; cv=none; d=google.com; s=arc-20160816; b=LX1/J8twy7dKCY8ix+35Qf0s/BFFFegWyFUhQnnzT6EuxHjMoQyHhbU4mbvPu+ogVg EuFtWgJClocznVynvC2eOZ+Ik2dI7sJgadmth7RbbLEIcsk1jTa9CnxahGfohHX0OpQf LJFekVKCWeo09EOX5IwyPOqL5iIRuvKASgIc82h9EIKoSPFg5OAVUacwAhcy0EwVDyYO cPW58wWDdgDOy7N1Eb1tOnzvcnWSQ8Oly1FW+MGrBKBqpkXtBPQvkN3VtjYKMIl0uMqZ 0KyZzLLIAjCIO4pM663Qlo8Z6USv9u0JN4gtx/j0Y6S5DnkFRDjx6eTyWQmHwoTUfuYY 5Jnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=XvXuFZ6OyFt/we56625CNJ7TL4SLVRudKUJ8AMOajwM=; b=dsZopa7mMj90puCTfp4pxIOU+zUd+kLwwi2j4vnwyfg9poZ/w5ZSxBTIG17KIF/Iwc O0cWXDduWiU55rkZZrXi+tqFk7NHYT/emWwo9ELf9Nhx4y12i+0WjWkhLa/h9douk+1B 6MBXpAvP4QZmjqmkbVrIF1Vs9anKH+WP2nPOuF7ZtZoKOP97wCgHsGrqp9e4gNjvAmF5 PSXKQsvw5lEjwB69oRtUZ5Gw3DqASz4FouoFwTjYLLT6uePuqBgdB1e9zE2Xo4O0UXKv jtToxZZV65u/qLLUpKObBwGdWD0/O5X/oVI06q1btl6J8S3hKDRDhXojoNBA1MbtzFwn GobQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e6-20020a170906748600b007c0ea5a7ca4si15306783ejl.858.2023.01.30.00.11.20; Mon, 30 Jan 2023 00:12:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235902AbjA3IIU (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235666AbjA3IHf (ORCPT ); Mon, 30 Jan 2023 03:07:35 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83B4F2A141 for ; Mon, 30 Jan 2023 00:07:32 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003fG-Ru; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCB-001PwS-3s; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJj-K6; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 05/15] net: phy: add genphy_c45_ethtool_get/set_eee() support Date: Mon, 30 Jan 2023 09:07:04 +0100 Message-Id: <20230130080714.139492-6-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434347266659259?= X-GMAIL-MSGID: =?utf-8?q?1756434347266659259?= Add replacement for phy_ethtool_get/set_eee() functions. Current phy_ethtool_get/set_eee() implementation is great and it is possible to make it even better: - this functionality is for devices implementing parts of IEEE 802.3 specification beyond Clause 22. The better place for this code is phy-c45.c - currently it is able to do read/write operations on PHYs with different abilities to not existing registers. It is better to use stored supported_eee abilities to avoid false read/write operations. - the eee_active detection will provide wrong results on not supported link modes. It is better to validate speed/duplex properties against supported EEE link modes. - it is able to support only limited amount of link modes. We have more EEE link modes... By refactoring this code I address most of this point except of the last one. Adding additional EEE link modes will need more work. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy-c45.c | 195 ++++++++++++++++++++++++++++++++++++++ include/linux/mdio.h | 36 +++++++ include/linux/phy.h | 5 + include/uapi/linux/mdio.h | 8 ++ 4 files changed, 244 insertions(+) diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index 03af19796848..d89627ee0ec8 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -661,6 +661,127 @@ int genphy_c45_read_mdix(struct phy_device *phydev) } EXPORT_SYMBOL_GPL(genphy_c45_read_mdix); +/** + * genphy_c45_write_eee_adv - read advertised EEE link modes + * @phydev: target phy_device struct + */ +int genphy_c45_write_eee_adv(struct phy_device *phydev, unsigned long *adv) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); + int val, changed; + + linkmode_and(common, phydev->supported_eee, PHY_EEE_100_10000_FEATURES); + if (!linkmode_empty(common)) { + val = linkmode_adv_to_mii_eee_100_10000_adv_t(adv); + + /* In eee_broken_modes are stored MDIO_AN_EEE_ADV specific raw + * register values. + */ + val &= ~phydev->eee_broken_modes; + + val = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, + MDIO_AN_EEE_ADV, + MDIO_EEE_100TX | MDIO_EEE_1000T | + MDIO_EEE_10GT | MDIO_EEE_1000KX | + MDIO_EEE_10GKX4 | MDIO_EEE_10GKR, + val); + if (val < 0) + return val; + if (val > 0) + changed = 1; + } + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + phydev->supported_eee)) { + val = linkmode_adv_to_mii_10base_t1_t(adv); + + val = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, + MDIO_AN_10BT1_AN_CTRL, + MDIO_AN_10BT1_AN_CTRL_ADV_EEE_T1L, + val); + if (val < 0) + return val; + if (val > 0) + changed = 1; + } + + return changed; +} + +/** + * genphy_c45_read_eee_adv - read advertised EEE link modes + * @phydev: target phy_device struct + */ +static int genphy_c45_read_eee_adv(struct phy_device *phydev, + unsigned long *adv) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); + int val; + + linkmode_and(common, phydev->supported_eee, PHY_EEE_100_10000_FEATURES); + if (!linkmode_empty(common)) { + /* IEEE 802.3-2018 45.2.7.13 EEE advertisement 1 + * (Register 7.60) + */ + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); + if (val < 0) + return val; + + mii_eee_100_10000_adv_mod_linkmode_t(adv, val); + } + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + phydev->supported_eee)) { + /* IEEE 802.3cg-2019 45.2.7.25 10BASE-T1 AN control register + * (Register 7.526) + */ + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10BT1_AN_CTRL); + if (val < 0) + return val; + + mii_10base_t1_adv_mod_linkmode_t(adv, val); + } + + return 0; +} + +/** + * genphy_c45_read_eee_lpa - read advertised LP EEE link modes + * @phydev: target phy_device struct + */ +static int genphy_c45_read_eee_lpa(struct phy_device *phydev, + unsigned long *lpa) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); + int val; + + linkmode_and(common, phydev->supported_eee, PHY_EEE_100_10000_FEATURES); + if (!linkmode_empty(common)) { + /* IEEE 802.3-2018 45.2.7.14 EEE link partner ability 1 + * (Register 7.61) + */ + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); + if (val < 0) + return val; + + mii_eee_100_10000_adv_mod_linkmode_t(lpa, val); + } + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + phydev->supported_eee)) { + /* IEEE 802.3cg-2019 45.2.7.26 10BASE-T1 AN status register + * (Register 7.527) + */ + val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10BT1_AN_STAT); + if (val < 0) + return val; + + mii_10base_t1_adv_mod_linkmode_t(lpa, val); + } + + return 0; +} + /** * genphy_c45_read_eee_abilities - read supported EEE link modes * @phydev: target phy_device struct @@ -1173,6 +1294,80 @@ int genphy_c45_plca_get_status(struct phy_device *phydev, } EXPORT_SYMBOL_GPL(genphy_c45_plca_get_status); +/** + * genphy_c45_ethtool_get_eee - get EEE supported and status + * @phydev: target phy_device struct + * @data: ethtool_eee data + * + * Description: it reportes the Supported/Advertisement/LP Advertisement + * capabilities. + */ +int genphy_c45_ethtool_get_eee(struct phy_device *phydev, + struct ethtool_eee *data) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(adv) = {}; + __ETHTOOL_DECLARE_LINK_MODE_MASK(lp) = {}; + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); + int ret; + + ret = genphy_c45_read_eee_adv(phydev, adv); + if (ret) + return ret; + + ret = genphy_c45_read_eee_lpa(phydev, lp); + if (ret) + return ret; + + data->eee_enabled = !linkmode_empty(adv); + linkmode_and(common, adv, lp); + if (data->eee_enabled && !linkmode_empty(common)) + data->eee_active = phy_check_valid(phydev->speed, + phydev->duplex, common); + else + data->eee_active = false; + + /* FIXME: EEE ethtool interface currently do not support full set of + * possible EEE link modes. + */ + data->supported = phydev->supported_eee[0]; + data->advertised = adv[0]; + data->lp_advertised = lp[0]; + + return 0; +} +EXPORT_SYMBOL(genphy_c45_ethtool_get_eee); + +/** + * genphy_c45_ethtool_set_eee - get EEE supported and status + * @phydev: target phy_device struct + * @data: ethtool_eee data + * + * Description: it reportes the Supported/Advertisement/LP Advertisement + * capabilities. + */ +int genphy_c45_ethtool_set_eee(struct phy_device *phydev, + struct ethtool_eee *data) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(adv) = {}; + int ret; + + if (data->eee_enabled) { + if (data->advertised) + adv[0] = data->advertised; + else + linkmode_copy(adv, phydev->supported_eee); + } + + ret = genphy_c45_write_eee_adv(phydev, adv); + if (ret < 0) + return ret; + if (ret > 0) + return phy_restart_aneg(phydev); + + return 0; +} +EXPORT_SYMBOL(genphy_c45_ethtool_set_eee); + struct phy_driver genphy_c45_driver = { .phy_id = 0xffffffff, .phy_id_mask = 0xffffffff, diff --git a/include/linux/mdio.h b/include/linux/mdio.h index ea4f7d08d1a6..231cf02671a7 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -427,6 +427,42 @@ static inline void mii_eee_100_10000_adv_mod_linkmode_t(unsigned long *adv, adv, val & MDIO_EEE_10GKR); } +static inline u32 linkmode_adv_to_mii_eee_100_10000_adv_t(unsigned long *adv) +{ + u32 result = 0; + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, adv)) + result |= MDIO_EEE_100TX; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, adv)) + result |= MDIO_EEE_1000T; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, adv)) + result |= MDIO_EEE_10GT; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, adv)) + result |= MDIO_EEE_1000KX; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, adv)) + result |= MDIO_EEE_10GKX4; + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, adv)) + result |= MDIO_EEE_10GKR; + + return result; +} + +static inline void mii_10base_t1_adv_mod_linkmode_t(unsigned long *adv, u16 val) +{ + linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, + adv, val & MDIO_AN_10BT1_AN_CTRL_ADV_EEE_T1L); +} + +static inline u32 linkmode_adv_to_mii_10base_t1_t(unsigned long *adv) +{ + u32 result = 0; + + if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, adv)) + result |= MDIO_AN_10BT1_AN_CTRL_ADV_EEE_T1L; + + return result; +} + int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, diff --git a/include/linux/phy.h b/include/linux/phy.h index 950e5ee0d8f2..d7eacb150eac 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1765,6 +1765,11 @@ int genphy_c45_plca_set_cfg(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg); int genphy_c45_plca_get_status(struct phy_device *phydev, struct phy_plca_status *plca_st); +int genphy_c45_ethtool_get_eee(struct phy_device *phydev, + struct ethtool_eee *data); +int genphy_c45_ethtool_set_eee(struct phy_device *phydev, + struct ethtool_eee *data); +int genphy_c45_write_eee_adv(struct phy_device *phydev, unsigned long *adv); /* Generic C45 PHY driver */ extern struct phy_driver genphy_c45_driver; diff --git a/include/uapi/linux/mdio.h b/include/uapi/linux/mdio.h index 75b7257a51e1..256b463e47a6 100644 --- a/include/uapi/linux/mdio.h +++ b/include/uapi/linux/mdio.h @@ -79,6 +79,8 @@ #define MDIO_AN_T1_LP_L 517 /* BASE-T1 AN LP Base Page ability register [15:0] */ #define MDIO_AN_T1_LP_M 518 /* BASE-T1 AN LP Base Page ability register [31:16] */ #define MDIO_AN_T1_LP_H 519 /* BASE-T1 AN LP Base Page ability register [47:32] */ +#define MDIO_AN_10BT1_AN_CTRL 526 /* 10BASE-T1 AN control register */ +#define MDIO_AN_10BT1_AN_STAT 527 /* 10BASE-T1 AN status register */ #define MDIO_PMA_PMD_BT1_CTRL 2100 /* BASE-T1 PMA/PMD control register */ /* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ @@ -340,6 +342,12 @@ #define MDIO_AN_T1_LP_H_10L_TX_HI_REQ 0x1000 /* 10BASE-T1L High Level LP Transmit Request */ #define MDIO_AN_T1_LP_H_10L_TX_HI 0x2000 /* 10BASE-T1L High Level LP Transmit Ability */ +/* 10BASE-T1 AN control register */ +#define MDIO_AN_10BT1_AN_CTRL_ADV_EEE_T1L 0x4000 /* 10BASE-T1L EEE ability advertisement */ + +/* 10BASE-T1 AN status register */ +#define MDIO_AN_10BT1_AN_STAT_LPA_EEE_T1L 0x4000 /* 10BASE-T1L LP EEE ability advertisement */ + /* BASE-T1 PMA/PMD control register */ #define MDIO_PMA_PMD_BT1_CTRL_CFG_MST 0x4000 /* MASTER-SLAVE config value */ From patchwork Mon Jan 30 08:07:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50181 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062837wrn; Mon, 30 Jan 2023 00:11:46 -0800 (PST) X-Google-Smtp-Source: AK7set/n08vgBqABJ/LtAHOWLeM1riOQZzfoiqHpOt0gybWE8EqJ241y7RHR3CrU2HV+L5N6LOuq X-Received: by 2002:a17:907:38c:b0:878:7189:a457 with SMTP id ss12-20020a170907038c00b008787189a457mr16095446ejb.51.1675066306231; Mon, 30 Jan 2023 00:11:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066306; cv=none; d=google.com; s=arc-20160816; b=iQOXMUprC2R9zpi5JYZLaB3TAmdg0AxnPgmS44h9Z7ukXNJAal+PX5sNyBcSaPIFOO h3i/lMqNsTYTSyyeqsWcbGfxI8YFSaXI01G5dsjpp4uypNCpQFRJyxzN1Kh9TwxvxqIx rS08AEKW6gWC7nx35OwyX85SKV/YXVFLEJvtJJXOoXIvBO388Bvo7ALVc4OULY8M0str DjLP4ZVw0V2RLCgq07R6VG5w8fjQioZChOCHLyse6qZ1Yt2I0eaBtvxrV4xnmwS+yLnt iN8naz5+qFTHyBLACTCI76prNfRxW0EUYnyg+wF+luElw6X/ZY+DtGwByl+kJ+yheIJW fkBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=mJHU3mRJN9cfxTCGQUkwyi8DkVcJDLB8FxAGa8v0Txg=; b=aGyPp/7OYQt6NhfEZHf7WSi39N1RynR7n+IDCE8/RVBqt7EpG4aAiurFcgnIRacJGV OD6p8GdTi5KYkMhWegZA8gcUwgo6/9f08Vpu53Yf76O6mf5raWaToNmKRR2VHZJxYbpu PPNufP+mYAbyqVoVHb2P0iiPxNuq+OF26aAEV2ynxhXk0A+pQwtMfy6g0+a2pNnxReBa JM5KwY+zBdxuoJpnXxLCf8WUr5aRrcbSGnA9w0sn7aWkPflGG3eZ5Fo83j2M4ThQ7C71 YYr95o3vxhEtlAmHzKdWmHcoQQwa8PzPTiA3CZP+HqzeGu8LOp9BpCs+r3ZCpzpreCtG gIxw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id fi24-20020a1709073ad800b0087858975f3esi12364348ejc.269.2023.01.30.00.11.23; Mon, 30 Jan 2023 00:11:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235914AbjA3IIX (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235710AbjA3IHj (ORCPT ); Mon, 30 Jan 2023 03:07:39 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95F6F2A9AE for ; Mon, 30 Jan 2023 00:07:37 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003fF-NJ; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCB-001PwP-0R; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aJs-Kk; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 06/15] net: phy: c22: migrate to genphy_c45_write_eee_adv() Date: Mon, 30 Jan 2023 09:07:05 +0100 Message-Id: <20230130080714.139492-7-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434327292491792?= X-GMAIL-MSGID: =?utf-8?q?1756434327292491792?= Migrate from genphy_config_eee_advert() to genphy_c45_write_eee_adv(). It should work as before except write operation to the EEE adv registers will be done only if some EEE abilities was detected. If some driver will have a regression, related driver should provide own .get_features callback. See micrel.c:ksz9477_get_features() as example. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy_device.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 698549ef2981..abe6124eb9dc 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -2231,7 +2231,10 @@ int __genphy_config_aneg(struct phy_device *phydev, bool changed) { int err; - if (genphy_config_eee_advert(phydev)) + err = genphy_c45_write_eee_adv(phydev, phydev->supported_eee); + if (err < 0) + return err; + else if (err) changed = true; err = genphy_setup_master_slave(phydev); @@ -2653,6 +2656,11 @@ int genphy_read_abilities(struct phy_device *phydev) phydev->supported, val & ESTATUS_1000_XFULL); } + /* This is optional functionality. If not supported, we may get an error + * which should be ignored. + */ + genphy_c45_read_eee_abilities(phydev); + return 0; } EXPORT_SYMBOL(genphy_read_abilities); From patchwork Mon Jan 30 08:07:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50176 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062027wrn; Mon, 30 Jan 2023 00:09:08 -0800 (PST) X-Google-Smtp-Source: AK7set/TDwN+/QGQ7vsZv+Xzrs5671eoE+yaz855TzFf2ESOE3/HtOdNttPYxqOklqFXJWz+3NVf X-Received: by 2002:aa7:df15:0:b0:4a2:2d5c:9b06 with SMTP id c21-20020aa7df15000000b004a22d5c9b06mr7773814edy.17.1675066147844; Mon, 30 Jan 2023 00:09:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066147; cv=none; d=google.com; s=arc-20160816; b=Z5ZimNXpPA9/tpTrwj5qeIgmrVBueE59ZibBdLVc6ZJD2JW8nrvXFMNI35bYQvLFO6 KTmtKasmbji03VI3ioWuuE3gRLmuGCzxX5+LuQ1JCGJWGnne2vZr39OE1o7OCplBddcN VqCgi1dpptcIPkaNX1bbLjNHZubbwNILlbP/kWUbWRV3RFE3WHxUbCVgE0j5UfwJiFzA uaA/FNPVjPCTwvPwCZ7QpvlPGkPu4aLHqgf/9YiT+nfGqOs9a9pcPrP4KTxoPA8Mga9J RfkSFAV7JOBAiYwahMN6rOS25uHKpoDmB394Qlk5dCjgMEjvaH343GksbaS3UOBqwKuQ xbXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=TcmIW8h9zZkI5S/RrhdXziQQ7tjRl+mr6DxXcfgKaFk=; b=fn1ba6EiWbXmfJiLEE2oHLS87G0rpMQpjwbZQyYDQK1WTok6RjfeTMC6W4HxtPuAoO T7bpdHRJtPOmI7ChoWcliI5CUHJd9Y5fpBQ1zDHEnpVjrvXQyN9x9U91CNj1Aw0JZd4q bgX0SDYd9g9tlRHJSfFI9hQrskRN2wbIrd7b7ivAvEY6S2GD6YSiA2ef/gsoIjwp/+d+ OeQoedPgL8NhfSIeyKe+02wUxfe92XzLDZG6sT11iB7nixFJepA6+lyBB17sJaaafHXA KPqOLRGBUIrARw9nKYpY59tUFXac63DqLmzSR27Q+89QDmyv/UiZFiYmMtiL2tqJuADO 6CEg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z17-20020a05640240d100b004a256509804si844127edb.605.2023.01.30.00.08.43; Mon, 30 Jan 2023 00:09:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235810AbjA3IIA (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60020 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235607AbjA3IHd (ORCPT ); Mon, 30 Jan 2023 03:07:33 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B8AA298DA for ; Mon, 30 Jan 2023 00:07:30 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003fA-2e; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001Pw9-Kr; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aK1-LH; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 07/15] net: phy: c45: migrate to genphy_c45_write_eee_adv() Date: Mon, 30 Jan 2023 09:07:06 +0100 Message-Id: <20230130080714.139492-8-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434160941408578?= X-GMAIL-MSGID: =?utf-8?q?1756434160941408578?= Migrate from genphy_config_eee_advert() to genphy_c45_write_eee_adv(). It should work as before except write operation to the EEE adv registers will be done only if some EEE abilities was detected. If some driver will have a regression, related driver should provide own .get_features callback. See micrel.c:ksz9477_get_features() as example. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy-c45.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index d89627ee0ec8..3a990e0a8d51 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -262,7 +262,11 @@ int genphy_c45_an_config_aneg(struct phy_device *phydev) linkmode_and(phydev->advertising, phydev->advertising, phydev->supported); - changed = genphy_config_eee_advert(phydev); + ret = genphy_c45_write_eee_adv(phydev, phydev->supported_eee); + if (ret < 0) + return ret; + else if (ret) + changed = true; if (genphy_c45_baset1_able(phydev)) return genphy_c45_baset1_an_config_aneg(phydev); @@ -945,6 +949,11 @@ int genphy_c45_pma_read_abilities(struct phy_device *phydev) } } + /* This is optional functionality. If not supported, we may get an error + * which should be ignored. + */ + genphy_c45_read_eee_abilities(phydev); + return 0; } EXPORT_SYMBOL_GPL(genphy_c45_pma_read_abilities); From patchwork Mon Jan 30 08:07:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50168 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061686wrn; Mon, 30 Jan 2023 00:08:07 -0800 (PST) X-Google-Smtp-Source: AK7set9rXz7UyC50wxnIPZQHbZexiE0yZLkUCiD/wnqrQIKn+2vDEpi+y741arAogLubhHA0A98N X-Received: by 2002:a17:907:6d9c:b0:881:7f2d:7a87 with SMTP id sb28-20020a1709076d9c00b008817f2d7a87mr10766966ejc.63.1675066087206; Mon, 30 Jan 2023 00:08:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066087; cv=none; d=google.com; s=arc-20160816; b=n6+IaPjBGA7wCK7Al8e/QbAlvlcZDC9vvuQGh5y5Vb4w0ob9jez3AsUSDAWJDIHR4T OR5jsqKgW8ePu6a/1xpMqqyIgIGS/EBRNK1s5TJo30TEWouOnYD05zHBfjjpvSETa4v5 5wmZQrcUkoptvBGA0zE6zKVLQsLswAY176A+9HGzu8Vr3dBSx9DOJJUkq5voNAoilGIj TLrQXPPGF0LkMMG+E/ADrm8yVb3MO4yw43wbs9diDCgLvzoERYWTg+w39gr8fhwBz+Ct gEFc1btl20bfCWPltUpgQSmsI9VU/Ndqua1emg4TB6B/eoQ+E7tpn+HOtnjeZ2WXB4QT MGIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=uMSHi6CGzSY4+k2aHAubKXZdpFkcTcSyQo1bzP0QwEk=; b=1FzaSP80nlbmINVV9mTv6oXjAOWMWZiHgBFWSuxyQ9Jb72g1pGX4gZIJRiu6j8vnAJ iOdEVaABaoYkk5cuoS1QUw4lJsPJlYdguvdTGx7qodpldpFbIX0sJ4Zxhma6UWuX43m8 2ER6eW2cD/VwqXeQsKOY7YoZ0auG9Q/jAfUg58a1li0wJ6GTAXPLLFr9/vOdqVLnT5Gw xE0XFLE+vRtWxBWEWIyUgGOysHEQ5FkE5yWBjwYvCDlBAiuc6zb+6GWOR/4FSjh3O6Zn cWPBkPjwxHVkNNrNN/q4aKaBxtFIuVnU3zve3G+Vi38i/yqeB16ti9NSJoB8bLPxju5b SFLg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 16-20020a170906015000b0087bdb8e120fsi11283933ejh.369.2023.01.30.00.07.44; Mon, 30 Jan 2023 00:08:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235596AbjA3IHd (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229653AbjA3IHb (ORCPT ); Mon, 30 Jan 2023 03:07:31 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEFDF18AA7 for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003f8-2b; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001Pw2-5J; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKA-Lo; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 08/15] net: phy: start using genphy_c45_ethtool_get/set_eee() Date: Mon, 30 Jan 2023 09:07:07 +0100 Message-Id: <20230130080714.139492-9-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434097336819075?= X-GMAIL-MSGID: =?utf-8?q?1756434097336819075?= All preparations are done. Now we can start using new functions and remove the old code. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy.c | 60 ++----------------------------------------- 1 file changed, 2 insertions(+), 58 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 41cfb24c48c1..54b62a604238 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -1578,33 +1578,10 @@ EXPORT_SYMBOL(phy_get_eee_err); */ int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data) { - int val; - if (!phydev->drv) return -EIO; - /* Get Supported EEE */ - val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); - if (val < 0) - return val; - data->supported = mmd_eee_cap_to_ethtool_sup_t(val); - - /* Get advertisement EEE */ - val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); - if (val < 0) - return val; - data->advertised = mmd_eee_adv_to_ethtool_adv_t(val); - data->eee_enabled = !!data->advertised; - - /* Get LP advertisement EEE */ - val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); - if (val < 0) - return val; - data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); - - data->eee_active = !!(data->advertised & data->lp_advertised); - - return 0; + return genphy_c45_ethtool_get_eee(phydev, data); } EXPORT_SYMBOL(phy_ethtool_get_eee); @@ -1617,43 +1594,10 @@ EXPORT_SYMBOL(phy_ethtool_get_eee); */ int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) { - int cap, old_adv, adv = 0, ret; - if (!phydev->drv) return -EIO; - /* Get Supported EEE */ - cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); - if (cap < 0) - return cap; - - old_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); - if (old_adv < 0) - return old_adv; - - if (data->eee_enabled) { - adv = !data->advertised ? cap : - ethtool_adv_to_mmd_eee_adv_t(data->advertised) & cap; - /* Mask prohibited EEE modes */ - adv &= ~phydev->eee_broken_modes; - } - - if (old_adv != adv) { - ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv); - if (ret < 0) - return ret; - - /* Restart autonegotiation so the new modes get sent to the - * link partner. - */ - if (phydev->autoneg == AUTONEG_ENABLE) { - ret = phy_restart_aneg(phydev); - if (ret < 0) - return ret; - } - } - - return 0; + return genphy_c45_ethtool_set_eee(phydev, data); } EXPORT_SYMBOL(phy_ethtool_set_eee); From patchwork Mon Jan 30 08:07:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50175 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061936wrn; Mon, 30 Jan 2023 00:08:54 -0800 (PST) X-Google-Smtp-Source: AMrXdXvST+qIg4LSlfDBNnrGbhaSMroX1sjQTN620arYv7TLz+LRl0DZhx3C9nN8G+LlmDz5HoBZ X-Received: by 2002:a17:907:1019:b0:84c:69f8:2ec2 with SMTP id ox25-20020a170907101900b0084c69f82ec2mr50294870ejb.22.1675066133876; Mon, 30 Jan 2023 00:08:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066133; cv=none; d=google.com; s=arc-20160816; b=okEZYF3zBdnV+RXgDs3kAj8DDSkMvnRCuy74KI1OyqI6kX+GrNlrtLTHU8gtguUMM8 QgvasCpo+A1nWrlEjPzCytdwZD6n2cGM/xhSq19gGQR0OLwbSFvkUA2X4iHUBpNCEEqd DkxsjiCs/LCREM/ca/I/Mzn+rBGdK1GecRfnHV+866XTxEAEhw9Jd3sXE4+HwIcAE9Vs DKs1wtLQoxlkwpk0MBHg7r3he/m/e7VA0Ry6kd0Tt+vVucg20PDlV/BVjUtPjCBXwMOT kbBNcVaUa1MCuNskUiLT06ptV3xC12FKa8/GhfGmBkQlfkTvjFf5mT691CckKmNnQLj/ zH/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=DxlAj2O5a5L/bAHgjHg8hxLzUFE3Uiyk2Zwz4lPgIsc=; b=sjQRbT5EDKZjNwlElRJqMAVZ84tisZHvPytXWlrzRH6gjvds32NC5HjE4RqrNcU04K +H1fD+TiYFgsr2nQMTB6SLxujz80NSpw9Sq/qc4oY7il38xgM1FAtwYGWMXrCc7M4wp8 HZR65Pd7bWKfAeyYLsATq5eQO4ORBvhIUCxk/9hsFYRL9peTBzUHVOnKJnOlUfcm6dYP KGfcN2Mw3QwRmA3VPZXWycWSG8r2rwKZXj77NC2Mp+hrHHea9z+LM/p0m5MZbY5NCvtN Nte04Gu5gxs27e7pg0X7PbbDz0EbPh32hUn8S5vPGtEAE9ypt6zpLI509X/NKMs0L1Ae rKDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f28-20020a170906739c00b008847d7ed36csi6787708ejl.895.2023.01.30.00.08.29; Mon, 30 Jan 2023 00:08:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235790AbjA3IH5 (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235594AbjA3IHd (ORCPT ); Mon, 30 Jan 2023 03:07:33 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38FAC298D8 for ; Mon, 30 Jan 2023 00:07:30 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003fC-2d; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001PwD-Po; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKJ-MJ; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 09/15] net: phy: add driver specific get/set_eee support Date: Mon, 30 Jan 2023 09:07:08 +0100 Message-Id: <20230130080714.139492-10-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434146018350071?= X-GMAIL-MSGID: =?utf-8?q?1756434146018350071?= Not all PHYs can be handled by generic phy_ethtool_get/set_eee() functions. So, add driver specific get/set_eee support. Signed-off-by: Oleksij Rempel --- drivers/net/phy/phy.c | 6 ++++++ include/linux/phy.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 54b62a604238..1e0e81510f10 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -1581,6 +1581,9 @@ int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data) if (!phydev->drv) return -EIO; + if (phydev->drv->get_eee) + return phydev->drv->get_eee(phydev, data); + return genphy_c45_ethtool_get_eee(phydev, data); } EXPORT_SYMBOL(phy_ethtool_get_eee); @@ -1597,6 +1600,9 @@ int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) if (!phydev->drv) return -EIO; + if (phydev->drv->set_eee) + return phydev->drv->set_eee(phydev, data); + return genphy_c45_ethtool_set_eee(phydev, data); } EXPORT_SYMBOL(phy_ethtool_set_eee); diff --git a/include/linux/phy.h b/include/linux/phy.h index d7eacb150eac..f6619f4aaa4b 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1059,6 +1059,11 @@ struct phy_driver { /** @get_plca_status: Return the current PLCA status info */ int (*get_plca_status)(struct phy_device *dev, struct phy_plca_status *plca_st); + + /** @get_eee: Return the current EEE configuration */ + int (*get_eee)(struct phy_device *phydev, struct ethtool_eee *e); + /** @set_eee: Set the EEE configuration */ + int (*set_eee)(struct phy_device *phydev, struct ethtool_eee *e); }; #define to_phy_driver(d) container_of(to_mdio_common_driver(d), \ struct phy_driver, mdiodrv) From patchwork Mon Jan 30 08:07:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50173 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061818wrn; Mon, 30 Jan 2023 00:08:31 -0800 (PST) X-Google-Smtp-Source: AK7set8Ohn9rVIu7UpSXWf3PKWKwij5JTSOvfuz67H3r7xIH7PLmARWJ7EuFHqLNsL1lSgHNWvdU X-Received: by 2002:a05:6402:3455:b0:4a2:4274:588f with SMTP id l21-20020a056402345500b004a24274588fmr4319941edc.24.1675066110979; Mon, 30 Jan 2023 00:08:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066110; cv=none; d=google.com; s=arc-20160816; b=L5Ya6yhkk1mRZ6aG4xVDfjOx+j6Wo9f+1wUQGF9NyBo8HfIBLrhEm5W7dqTfbwGWTd TfDykdGp94UkYXN2a/i/FH05qoSWywhlScEejBsDJCPirRiVFvAqGMGCeVyq9AOH6MJ5 RBG9QqOvcRNf0UFJLmAsl3eKl7eaNtj9ee2m3RsTKYLDtYZRUk44mzGFOW7W8jl/6Mmw IvVyP3/ukDMdz35VPRZ/ULOPJPqdgCZAnanZmoS8j+ej4yrg2ALlv0dy7YMdbLf6fkky eKwD5zOIcKgnU9w4iAIVs6f4yI9lgYkeOE6vkI6Ibme0F658V15+SjNZveLxO1wRif+9 T1xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Eyu7OGmS0PeH6ZMYI0PnhNjTAC4G2r5GmaoqV5VIhlA=; b=yu6jwZ/XmfyHPIVINxIcQ9oOBhc5BgV7axv/+1Mnob/LvDteqy87VSpiCQzf9UVns3 EAmZ/4LRhmYcTy2oYbAt37aSd5BxsbLiw2h1vi8hFoECPnnGswaHfAwzymkwLShOP66w KUdnaSRTPCMvkjzF6WsjfOAMMPfAmw0LSpS2dWe71wBEqK22pp1YDwqpqo8IP2tkdCG8 +n4zIV+WwREUlXIA6Nf6o18Rb82ISAxVeZLyQ9OCtFrfdhuBma1LH9cytImBd5Fwwbf8 OV4WdDroFMm1oFYKr8lWuDB9fNLtM7G0V08s/PBQjC5zKIYekc8p9vpu4S2apZg/kSMh IP9w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id eu3-20020a170907298300b0086ea1c7ae21si16477492ejc.54.2023.01.30.00.08.07; Mon, 30 Jan 2023 00:08:30 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235759AbjA3IHs (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235583AbjA3IHc (ORCPT ); Mon, 30 Jan 2023 03:07:32 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B02922943E for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003fB-2a; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001PwE-QD; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKS-Mo; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 10/15] net: phy: at803x: implement ethtool access to SmartEEE functionality Date: Mon, 30 Jan 2023 09:07:09 +0100 Message-Id: <20230130080714.139492-11-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434122061530960?= X-GMAIL-MSGID: =?utf-8?q?1756434122061530960?= If AR8035 PHY is used with a MAC without EEE support (iMX6, etc), then we need to process ethtool_eee::tx_lpi_timer and tx_lpi_enabled by the PHY driver. So, add get/set_eee support for this functionality. Signed-off-by: Oleksij Rempel --- drivers/net/phy/at803x.c | 109 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 5 deletions(-) diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 22f4458274aa..9eb4439b0afc 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -166,8 +166,18 @@ #define AT803X_MMD3_SMARTEEE_CTL1 0x805b #define AT803X_MMD3_SMARTEEE_CTL2 0x805c +#define AT803X_MMD3_SMARTEEE_LPI_TIME_LOW GENMASK(15, 0) +#define AT803X_MMD3_SMARTEEE_LPI_TIME_15_0 GENMASK(15, 0) #define AT803X_MMD3_SMARTEEE_CTL3 0x805d #define AT803X_MMD3_SMARTEEE_CTL3_LPI_EN BIT(8) +#define AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH GENMASK(7, 0) +#define AT803X_MMD3_SMARTEEE_LPI_TIME_23_16 GENMASK(23, 16) +/* Tx LPI timer resolution */ +#define AT803X_MMD3_SMARTEEE_LPI_TIME_RESOL_NS 163840 +#define AT803X_MMD3_SMARTEEE_LPI_TIME_MAX_US \ + ((GENMASK(23, 0) * AT803X_MMD3_SMARTEEE_LPI_TIME_RESOL_NS) / \ + NSEC_PER_USEC) +#define AT803X_MMD3_SMARTEEE_LPI_TIME_DEF_US 335544 #define ATH9331_PHY_ID 0x004dd041 #define ATH8030_PHY_ID 0x004dd076 @@ -951,17 +961,26 @@ static int at803x_get_features(struct phy_device *phydev) return 0; } -static int at803x_smarteee_config(struct phy_device *phydev) +static int at803x_smarteee_config(struct phy_device *phydev, bool enable, + u32 tx_lpi_timer_us) { struct at803x_priv *priv = phydev->priv; + u64 tx_lpi_timer_raw; + u64 tx_lpi_timer_ns; u16 mask = 0, val = 0; int ret; - if (priv->flags & AT803X_DISABLE_SMARTEEE) + if (priv->flags & AT803X_DISABLE_SMARTEEE || !enable) return phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_MMD3_SMARTEEE_CTL3, AT803X_MMD3_SMARTEEE_CTL3_LPI_EN, 0); + if (tx_lpi_timer_us > AT803X_MMD3_SMARTEEE_LPI_TIME_MAX_US) { + phydev_err(phydev, "Max LPI timer is %lu microsecs\n", + AT803X_MMD3_SMARTEEE_LPI_TIME_MAX_US); + return -EINVAL; + } + if (priv->smarteee_lpi_tw_1g) { mask |= 0xff00; val |= priv->smarteee_lpi_tw_1g << 8; @@ -978,9 +997,27 @@ static int at803x_smarteee_config(struct phy_device *phydev) if (ret) return ret; + tx_lpi_timer_ns = tx_lpi_timer_us * NSEC_PER_USEC; + tx_lpi_timer_raw = + DIV_ROUND_CLOSEST_ULL(tx_lpi_timer_ns, + AT803X_MMD3_SMARTEEE_LPI_TIME_RESOL_NS); + val = FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_LOW, + FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_15_0, + tx_lpi_timer_raw)); + + ret = phy_write_mmd(phydev, MDIO_MMD_PCS, AT803X_MMD3_SMARTEEE_CTL2, + val); + if (ret) + return ret; + + val = AT803X_MMD3_SMARTEEE_CTL3_LPI_EN | + FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH, + FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_23_16, + tx_lpi_timer_raw)); + return phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_MMD3_SMARTEEE_CTL3, - AT803X_MMD3_SMARTEEE_CTL3_LPI_EN, - AT803X_MMD3_SMARTEEE_CTL3_LPI_EN); + AT803X_MMD3_SMARTEEE_CTL3_LPI_EN | + AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH, val); } static int at803x_clk_out_config(struct phy_device *phydev) @@ -1067,7 +1104,8 @@ static int at803x_config_init(struct phy_device *phydev) if (ret < 0) return ret; - ret = at803x_smarteee_config(phydev); + ret = at803x_smarteee_config(phydev, true, + AT803X_MMD3_SMARTEEE_LPI_TIME_DEF_US); if (ret < 0) return ret; @@ -1612,6 +1650,65 @@ static int at803x_cable_test_start(struct phy_device *phydev) return 0; } +static int at803x_get_eee(struct phy_device *phydev, struct ethtool_eee *data) +{ + struct at803x_priv *priv = phydev->priv; + u32 tx_timer_raw; + u64 tx_timer_ns; + int ret; + + /* If SmartEEE is not enabled, it is expected that tx_lpi_* fields + * are processed by the MAC driver. + */ + if (priv->flags & AT803X_DISABLE_SMARTEEE) + return genphy_c45_ethtool_get_eee(phydev, data); + + ret = phy_read_mmd(phydev, MDIO_MMD_PCS, + AT803X_MMD3_SMARTEEE_CTL2); + tx_timer_raw = FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_15_0, + FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_LOW, + ret)); + if (ret < 0) + return ret; + + ret = phy_read_mmd(phydev, MDIO_MMD_PCS, + AT803X_MMD3_SMARTEEE_CTL3); + if (ret < 0) + return ret; + + tx_timer_raw |= FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_23_16, + FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH, + ret)); + tx_timer_ns = tx_timer_raw * AT803X_MMD3_SMARTEEE_LPI_TIME_RESOL_NS; + data->tx_lpi_timer = DIV_ROUND_CLOSEST_ULL(tx_timer_ns, NSEC_PER_USEC); + + data->tx_lpi_enabled = !!(ret & AT803X_MMD3_SMARTEEE_CTL3_LPI_EN); + + return genphy_c45_ethtool_get_eee(phydev, data); +} + +static int at803x_set_eee(struct phy_device *phydev, struct ethtool_eee *data) +{ + struct at803x_priv *priv = phydev->priv; + int ret; + + /* If SmartEEE is not enabled, it is expected that tx_lpi_* fields + * are processed by the MAC driver. + */ + if (priv->flags & AT803X_DISABLE_SMARTEEE) + return genphy_c45_ethtool_set_eee(phydev, data); + + /* Changing Tx LPI on/off or Tx LPI timer settings + * do not require link reset. + */ + ret = at803x_smarteee_config(phydev, data->tx_lpi_enabled, + data->tx_lpi_timer); + if (ret) + return ret; + + return genphy_c45_ethtool_set_eee(phydev, data); +} + static int qca83xx_config_init(struct phy_device *phydev) { u8 switch_revision; @@ -2038,6 +2135,8 @@ static struct phy_driver at803x_driver[] = { .set_tunable = at803x_set_tunable, .cable_test_start = at803x_cable_test_start, .cable_test_get_status = at803x_cable_test_get_status, + .get_eee = at803x_get_eee, + .set_eee = at803x_set_eee, }, { /* Qualcomm Atheros AR8030 */ .phy_id = ATH8030_PHY_ID, From patchwork Mon Jan 30 08:07:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50177 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062150wrn; Mon, 30 Jan 2023 00:09:37 -0800 (PST) X-Google-Smtp-Source: AK7set/GiihwgXu1Zhs6Ad1LaSHl+LSViw6yWCsIaw4dHFU0heL4Yn+gcRLcWSoN7C/lt1CmBET+ X-Received: by 2002:a05:6402:4d1:b0:4a0:a7d8:500e with SMTP id n17-20020a05640204d100b004a0a7d8500emr21093290edw.20.1675066177397; Mon, 30 Jan 2023 00:09:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066177; cv=none; d=google.com; s=arc-20160816; b=BwX66yMf5C55SaCmsIFubIlCJrXKQ5cIGnMJ/wPYGn0mamwzuvPDTkFV2lJUH7yHi6 cLmRTaYVnxh4NFvenc7E0eRQ5OuxVaaJIT43SMcPIit5rN8Eo6whBsQ/ZPsXPbZuC08V K1waVus4Ccw/7MGGxc8XLkS7m8ZMdT5Bmr0AWeFTERdxMIDfx5Bavs8D10iZhhgVdV8C UJTRqFPvGrLJNHGo5AYuEXDxBvELXucHp80P9lRv4DJbYq2ifFeio9hEw7ockBWW35Ic GqL3GBLEQEdrrU8mtSRInjZVwcnjNaI/7RcACnYBxWXtBpZsH15lt7DKYIsT+ijuA1gi erfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9A9q68CmeqX00HQvfonrrrALSzi0aF0dH3x0T2q/kZY=; b=eHrV2y0rDWZXgr/6XkFWnW2V0oYM3YjSPnKsNM90/EnuMWvj2XoZQ9X7BlyvNlGnkb YS8drjl7xCq0oPbHiOin9PmS85U3JrWsZlqWb+EUadmbOHDTqzRKlGi5f/2BXH6l8fjD PtEwpjgE2eZ1sIY7/LnjvSyufOOMQzE0XwGuE9hqAJjGexFuqPFymcnJDZ0tmcrL6P6C 9cZjPmYdbPyikHYSUaXU8tTtDiXUVwFK6QVdbbvfUAcX9R21PAkLf3phNhKncz9M0aAa RAcrRTVhT6nv8BWNwovTyTLKIqsi4Jfno8NgCrQ989/0zmkGRperxwKYHrJziAjz/OL9 qq5g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n11-20020a056402060b00b004a0ab10b040si13112396edv.448.2023.01.30.00.09.12; Mon, 30 Jan 2023 00:09:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235655AbjA3IIC (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235626AbjA3IHe (ORCPT ); Mon, 30 Jan 2023 03:07:34 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5627A29E00 for ; Mon, 30 Jan 2023 00:07:31 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003f6-N3; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001Pvx-1U; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKb-NN; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 11/15] net: phy: at803x: ar8035: fix EEE support for half duplex links Date: Mon, 30 Jan 2023 09:07:10 +0100 Message-Id: <20230130080714.139492-12-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434191714234605?= X-GMAIL-MSGID: =?utf-8?q?1756434191714234605?= If AR8035 is running with enabled EEE and LPI, it will not be able to establish an 100BaseTX/Half or 1000BaseT/Half link. Similar issue we will have with 100BaseTX/Full and LPI TX timer configured to less then 80msec. To avoid this issue, we need to keep LPI disabled before link is establish and enable it only we detected supported link configuration. Signed-off-by: Oleksij Rempel --- drivers/net/phy/at803x.c | 41 +++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 9eb4439b0afc..5ab43eb63581 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -313,6 +313,7 @@ struct at803x_priv { u8 smarteee_lpi_tw_100m; bool is_fiber; bool is_1000basex; + bool tx_lpi_on; struct regulator_dev *vddio_rdev; struct regulator_dev *vddh_rdev; struct regulator *vddio; @@ -970,6 +971,8 @@ static int at803x_smarteee_config(struct phy_device *phydev, bool enable, u16 mask = 0, val = 0; int ret; + priv->tx_lpi_on = enable; + if (priv->flags & AT803X_DISABLE_SMARTEEE || !enable) return phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_MMD3_SMARTEEE_CTL3, @@ -1010,10 +1013,15 @@ static int at803x_smarteee_config(struct phy_device *phydev, bool enable, if (ret) return ret; - val = AT803X_MMD3_SMARTEEE_CTL3_LPI_EN | - FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH, - FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_23_16, - tx_lpi_timer_raw)); + val = FIELD_PREP(AT803X_MMD3_SMARTEEE_LPI_TIME_HIGH, + FIELD_GET(AT803X_MMD3_SMARTEEE_LPI_TIME_23_16, + tx_lpi_timer_raw)); + + if (phydev->state == PHY_RUNNING && + phy_check_valid(phydev->speed, phydev->duplex, + phydev->supported_eee)) { + val |= AT803X_MMD3_SMARTEEE_CTL3_LPI_EN; + } return phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_MMD3_SMARTEEE_CTL3, AT803X_MMD3_SMARTEEE_CTL3_LPI_EN | @@ -1682,7 +1690,7 @@ static int at803x_get_eee(struct phy_device *phydev, struct ethtool_eee *data) tx_timer_ns = tx_timer_raw * AT803X_MMD3_SMARTEEE_LPI_TIME_RESOL_NS; data->tx_lpi_timer = DIV_ROUND_CLOSEST_ULL(tx_timer_ns, NSEC_PER_USEC); - data->tx_lpi_enabled = !!(ret & AT803X_MMD3_SMARTEEE_CTL3_LPI_EN); + data->tx_lpi_enabled = priv->tx_lpi_on; return genphy_c45_ethtool_get_eee(phydev, data); } @@ -1709,6 +1717,28 @@ static int at803x_set_eee(struct phy_device *phydev, struct ethtool_eee *data) return genphy_c45_ethtool_set_eee(phydev, data); } +static void at8035_link_change_notify(struct phy_device *phydev) +{ + struct at803x_priv *priv = phydev->priv; + + if (priv->flags & AT803X_DISABLE_SMARTEEE) + return; + + if (phydev->state == PHY_RUNNING) { + if (priv->tx_lpi_on && phy_check_valid(phydev->speed, + phydev->duplex, + phydev->supported_eee)) + phy_set_bits_mmd(phydev, MDIO_MMD_PCS, + AT803X_MMD3_SMARTEEE_CTL3, + AT803X_MMD3_SMARTEEE_CTL3_LPI_EN); + } else { + if (priv->tx_lpi_on) + phy_clear_bits_mmd(phydev, MDIO_MMD_PCS, + AT803X_MMD3_SMARTEEE_CTL3, + AT803X_MMD3_SMARTEEE_CTL3_LPI_EN); + } +} + static int qca83xx_config_init(struct phy_device *phydev) { u8 switch_revision; @@ -2137,6 +2167,7 @@ static struct phy_driver at803x_driver[] = { .cable_test_get_status = at803x_cable_test_get_status, .get_eee = at803x_get_eee, .set_eee = at803x_set_eee, + .link_change_notify = at8035_link_change_notify, }, { /* Qualcomm Atheros AR8030 */ .phy_id = ATH8030_PHY_ID, From patchwork Mon Jan 30 08:07:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50178 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2062227wrn; Mon, 30 Jan 2023 00:09:51 -0800 (PST) X-Google-Smtp-Source: AK7set8uEHlCKxd1bNTRgvctKSH9FYiYpa91lhuHqVHU45z6oy4zzNa4xa3T3Fr9ArGP8Nccovhb X-Received: by 2002:a17:906:848e:b0:87b:d503:2ee3 with SMTP id m14-20020a170906848e00b0087bd5032ee3mr10791780ejx.11.1675066191396; Mon, 30 Jan 2023 00:09:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066191; cv=none; d=google.com; s=arc-20160816; b=Qcj0MFUHrPfSdbLUurI4ccuI1pGnxlEXQrhMuoJVSN58ygJRaGr2T6Xh/5RcKUmpNa 3Sh79AD5TUVTFil2dTz7pO/GwIWqZmjJfbwQeNFiptDtREs7y1VHe5q18PTmtTh/zu9B N+HdyFvC2gPxE4IlUw/xnbGpFjNqJVj49NubTfzPf5SWGUf8LNMAM0ga67ou0zOfh48F 0DSaaZCcwMS2Ihdrha1EfnmH7I1FEml2vFtTyqD8jWj3j0kSqgAYabdbqF1DKOKYJfe5 cutz+UmR0p9dhTFNYNvWe65gB5Xd/HSO9IB2gVA13ElAcyjFkgSDDwmhSurdhFBAcPTa KmHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=LwhlCYpkAE6cjkUzIo8y3HIl2nvjsNCxSubhbhVAy3Q=; b=K6oxdtsTWnpJLTxOjfVlAW3JrewTYJGpewSzcLdVB9gQ4xvOfm2lpRtU5qqQRVM7xC wgWKxnCkBPvLdALBm7tMeHdgXWWK9rI6yJ1BUAZU45703R0S4otOvZ2qqHcY3XMA8Xf+ 3l5W554RUbN8PP45OVHrjAFHGAKuZoNZvQSWgpcqjydjYdspxTDgqSt8xasepowZdGmw MoOhGcjIVsY1JkHZgg9ggdCJ3E9YXyv95wuUBhLWER0hyfFbyWfUp8gVWIt+JBp7uCHP 7ohZOfxjqhohbv+BA4Vheo2iL+vCyx7UTAkvB10rwD0tGn4BFL/9U+9ztreZE4HPuK9N P4WA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bp13-20020a170907918d00b0087b12541eb1si9415441ejb.74.2023.01.30.00.09.28; Mon, 30 Jan 2023 00:09:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235859AbjA3IIF (ORCPT + 99 others); Mon, 30 Jan 2023 03:08:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235627AbjA3IHe (ORCPT ); Mon, 30 Jan 2023 03:07:34 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DBF729E15 for ; Mon, 30 Jan 2023 00:07:31 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCF-0003fI-Ti; Mon, 30 Jan 2023 09:07:23 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCB-001PwY-6V; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKk-Ns; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 12/15] net: phy: add PHY specifica flag to signal SmartEEE support Date: Mon, 30 Jan 2023 09:07:11 +0100 Message-Id: <20230130080714.139492-13-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434206983502898?= X-GMAIL-MSGID: =?utf-8?q?1756434206983502898?= Typical EEE support need cooperation of MAC and PHY, so both parts should be able to do EEE. But, there also PHYs compatible with normal 802.3az standard working with legacy MAC without EEE ability, acting as a complete EEE power saving system. To identify this PHYs we need a PHY specific flag. Since the PHY specification implementing this functionality calls it SmartEEE, use the same flag name - PHY_SMART_EEE. Signed-off-by: Oleksij Rempel --- include/linux/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/linux/phy.h b/include/linux/phy.h index f6619f4aaa4b..90d7b90fa1f4 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -85,6 +85,7 @@ extern const int phy_10gbit_features_array[1]; #define PHY_IS_INTERNAL 0x00000001 #define PHY_RST_AFTER_CLK_EN 0x00000002 #define PHY_POLL_CABLE_TEST 0x00000004 +#define PHY_SMART_EEE 0x00000008 /* EEE done by PHY without MAC */ #define MDIO_DEVICE_IS_PHY 0x80000000 /** From patchwork Mon Jan 30 08:07:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50171 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061789wrn; Mon, 30 Jan 2023 00:08:25 -0800 (PST) X-Google-Smtp-Source: AK7set8fl5+wP2yZgTvq5Zi1/YwOem/W2F9bT67BjVoPnYZOquFZbTMj8zUd54vuUKhaRSgskwfz X-Received: by 2002:a50:c35e:0:b0:48f:fcc9:665e with SMTP id q30-20020a50c35e000000b0048ffcc9665emr5683582edb.0.1675066105107; Mon, 30 Jan 2023 00:08:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066105; cv=none; d=google.com; s=arc-20160816; b=G1dL8/X+VJaOuPFbJ4lmYORY5zlBAe8HiC4oitDvpdVg3OPFRq5bPgN3B1UKXDWGHH tTZkJl2s82LNr5h/xgkU1mgvA/8ggZSM8Radh9Ysw+0YwhIYBpHY/FmodvdEGqcabQwi 6HlpeJczss7A7JvsSBrsFggKeFWwv0ajAHH2CaYxoZ4PeUSW6Dv2F3FzjhsP4nJ6aWCz tSmKt8M06MjY13cJf0PGhy8rOFAfCT0do2tDrB/tjsFRGQ8DBWQSNULRu02MsfUI56sp v2mLwg1ZAUe/on/JwXJDQqTUj6Db5SNJA/Acvi3Qa1gHWdIKEOVOmC5FsIkK93MvGgu4 Xtjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9XX6vKpdObgLKPYfd2Lr+kntojCtJaW0ZviMtS1zFKE=; b=kBzZdZ133j8QzscqTroJKTCeMVCX7DMgLfC9BmRf5B6UaOQQloHTR+r0omvyg3tFCt 43IvUE8oJ2+sofK+0ha1ydevGGk0HhmSMSUGoM1a3GybSzZ+Y8RMm6me5RDp4A6esWFh WXB13dJ71/omLlNHNeCYH0WC+Qyy/q/qDq9wUdPimlXEg9ENDP+OF4BQd1WUaHGTntJR YUFV4uGbYYgV7T4MAM1v9BH4kw0AMuzCp6keKFEazI5ByagTPY8Hj3N/QeGuM1Etfta8 HUI/fSkSTxXlSMGCTQGvsXwmeqc+BkuW9w0HwzK1u22ZMzo0GKsuU9KHHx0CiUIjsgSe Hnxg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p5-20020a056402500500b004a0a7d851f5si14190927eda.634.2023.01.30.00.08.01; Mon, 30 Jan 2023 00:08:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235731AbjA3IHn (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59970 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235568AbjA3IHc (ORCPT ); Mon, 30 Jan 2023 03:07:32 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B03F4298C2 for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003f9-2d; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001Pw7-HW; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aKt-ON; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 13/15] net: phy: at803x: add PHY_SMART_EEE flag to AR8035 Date: Mon, 30 Jan 2023 09:07:12 +0100 Message-Id: <20230130080714.139492-14-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434116243707384?= X-GMAIL-MSGID: =?utf-8?q?1756434116243707384?= AR8035 is one of the PHYs with SmartEEE functionality. This flag will be used by one of next patches on the i.MX FEC driver. Signed-off-by: Oleksij Rempel --- drivers/net/phy/at803x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 5ab43eb63581..94dbec0a992c 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -2147,7 +2147,7 @@ static struct phy_driver at803x_driver[] = { /* Qualcomm Atheros AR8035 */ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID), .name = "Qualcomm Atheros AR8035", - .flags = PHY_POLL_CABLE_TEST, + .flags = PHY_POLL_CABLE_TEST | PHY_SMART_EEE, .probe = at803x_probe, .remove = at803x_remove, .config_aneg = at803x_config_aneg, From patchwork Mon Jan 30 08:07:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50172 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061805wrn; Mon, 30 Jan 2023 00:08:27 -0800 (PST) X-Google-Smtp-Source: AK7set+5imn+Sc3diG5ubSiZ8sXVWp7wIWH1ayNyIF9HvqwQTdnr5CIHOFL5RRz2t/+JGVL9BnRX X-Received: by 2002:a17:906:4ac5:b0:88a:a27c:c282 with SMTP id u5-20020a1709064ac500b0088aa27cc282mr342182ejt.47.1675066107756; Mon, 30 Jan 2023 00:08:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066107; cv=none; d=google.com; s=arc-20160816; b=HyvyENmLYAXwMhGEyhpV6U/I3rv5ooeqpP/E3Wl9nNqjZ26zs8pX2M0OkI8ti8uroF j9QIMCboarTmIk4KKfoMRRbd1u7zbWCLqeuohvlPKHBr9fud1nJjaRIyV5kQidt4FJ9a rKyXRASEee3ZkwAZmLikjfKiItWIi1qDjGd78KcrRZDMHVGKFoDPKrcGBdufdcEyG/Pu Hnyi1SLp1WhgrDdnnE9+I6tVpQp68tNEoR4okXgb64Rvz9HGdcQmMhtDvtBZ5itNvCSD XfIFgOsCY7e/gbPz71YXxx5EDxZLkobRqMMMAJq/Jk4gcyTjcmGw6P94v/d61tbh/8E5 aGIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=JklA5W44o4OCXhbfB8/N9lZg20pOgWREYl1gnTGHt0Q=; b=UNjFOuIA4yFAo8iBA3eJ59ZTBNv/q6BRCHs6bHZSX3049+6mkEorPfhAJ+oDQUHg/K bZbRqkRaZVpBqFUSK7rd1P50lwK7rlH3FxaubLpAFPqzQXUUZe1r5JUcwOPtgzSwLa9j 2r176hPObrI401F+Xw8KbFLTr5HrAd3MV2jRo7o69OW6MDiR6/YaVCVStkGH51ZG+0ch salbSBUUH3YAk9+ykEWEffxzKvp+728i6YTjCcGTPa9F7PPjcKZO4OFsR/l9x5sXaJq8 k/jPhXgfK3SUzIw1IKTQE/69dBAiDAFWZ9HLTxiJ+1gyNLhOWOuPyf3z6tjvftmrC0NF YUgg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v9-20020a17090610c900b0084cc41e20e2si14305843ejv.624.2023.01.30.00.08.04; Mon, 30 Jan 2023 00:08:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235621AbjA3IHp (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59986 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235575AbjA3IHc (ORCPT ); Mon, 30 Jan 2023 03:07:32 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0588298C7 for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003f7-2i; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001Pvz-1n; Mon, 30 Jan 2023 09:07:17 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aL2-Ot; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 14/15] net: phy: add phy_has_smarteee() helper Date: Mon, 30 Jan 2023 09:07:13 +0100 Message-Id: <20230130080714.139492-15-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434119047670769?= X-GMAIL-MSGID: =?utf-8?q?1756434119047670769?= Add helper to identify PHYs with SmartEEE support. Signed-off-by: Oleksij Rempel --- include/linux/phy.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/linux/phy.h b/include/linux/phy.h index 90d7b90fa1f4..9891f384de30 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1415,6 +1415,15 @@ static inline bool phy_polling_mode(struct phy_device *phydev) return phydev->irq == PHY_POLL; } +/** + * phy_has_rxtstamp - Tests whether a PHY supports SmartEEE. + * @phydev: the phy_device struct + */ +static inline bool phy_has_smarteee(struct phy_device *phydev) +{ + return phydev && phydev->drv && !!(phydev->drv->flags & PHY_SMART_EEE); +} + /** * phy_has_hwtstamp - Tests whether a PHY time stamp configuration. * @phydev: the phy_device struct From patchwork Mon Jan 30 08:07:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksij Rempel X-Patchwork-Id: 50174 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2061842wrn; Mon, 30 Jan 2023 00:08:36 -0800 (PST) X-Google-Smtp-Source: AMrXdXvvbZELw9L0X02jRMQrk/fUqSTLYwwOsqx/jlcStNqoDtHAwstLc1JqhTIhDIPI+3B4wFuc X-Received: by 2002:a50:ff17:0:b0:499:d208:e8f4 with SMTP id a23-20020a50ff17000000b00499d208e8f4mr50379895edu.19.1675066116150; Mon, 30 Jan 2023 00:08:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675066116; cv=none; d=google.com; s=arc-20160816; b=LXRPKR+i29t7Lcheawt+IT55MjviKCwHF6llqOAv64WHQJwTay3NBr0Gk3NUoXTtDZ UX7gdHsrZgRS+U+5CS41x+Hl4BfsUl4HSpfPt1MWxlMYWiN4KhEuT5hOpA2REnx/2kMs tK5PkF0B9h6lcpcHY7rOhQcLdNEkT7h0uYPUlSOpWDN1uu8W0rkS0NNIqGp3ZWsa13ep 383QugEgQ90/RdjEM3Rf034gu5lrqFHL/msxjfHAnKVjgT7FP7oXd0jl9Nu0t3BvdAO9 JwD4QlG+LwVfL2aanHBVJQRCnUZIa/DyiIZv5IjbylC2zuGU1cfdFo8dSWvgC1lqlrSH SJ+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iO07/urYCL9jILjUKaMGfbd9c6V/E+eIHFfF4aj4hVg=; b=RwL0K8Idv5t2lvKLla+PHhPk2Tzoo9pFE8VZ9mE7gVkEzc1GqVfk7TeF4vUaI7GSRg F0Fh59ZYe9NuzhnYrpsEm+8n5eLThv85qZqyJ3a1cwbcUuxZTZk2vqXXicAl9l+vVXHO rE2xnrXMZWEiQlQYYte06bQaGZu06TF0GR6S5f6e9roqQz45c1OgeLSvIN9F5Eh7P/wI D8v3BL+UIZlcFmOSD+OpCU/QlOWpZDV+/+1LRrPPYUytQawOIwO2mpr20iJqKiLxGvM4 6OYCfwdgNiWihxtIpqkph+F9rFjOEmKataLZR5DtlaHCsjiH0qZHGS47b7b7EUZJd4n1 svhA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id eo10-20020a056402530a00b004a2359ecff1si4515737edb.264.2023.01.30.00.08.11; Mon, 30 Jan 2023 00:08:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235769AbjA3IHu (ORCPT + 99 others); Mon, 30 Jan 2023 03:07:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235579AbjA3IHc (ORCPT ); Mon, 30 Jan 2023 03:07:32 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDA4D298CB for ; Mon, 30 Jan 2023 00:07:29 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMPCB-0003fD-2h; Mon, 30 Jan 2023 09:07:19 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pMPCA-001PwJ-TS; Mon, 30 Jan 2023 09:07:18 +0100 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pMPC7-000aLB-PN; Mon, 30 Jan 2023 09:07:15 +0100 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Arun.Ramadoss@microchip.com Subject: [PATCH net-next v3 15/15] net: fec: add support for PHYs with SmartEEE support Date: Mon, 30 Jan 2023 09:07:14 +0100 Message-Id: <20230130080714.139492-16-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230130080714.139492-1-o.rempel@pengutronix.de> References: <20230130080714.139492-1-o.rempel@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756434128097561186?= X-GMAIL-MSGID: =?utf-8?q?1756434128097561186?= Ethernet controller in i.MX6*/i.MX7* series do not provide EEE support. But this chips are used sometimes in combinations with SmartEEE capable PHYs. So, instead of aborting get/set_eee access on MACs without EEE support, ask PHY if it is able to do the EEE job by using SmartEEE. Signed-off-by: Oleksij Rempel --- drivers/net/ethernet/freescale/fec_main.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index e6238e53940d..25a2a9d860de 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -3102,8 +3102,15 @@ fec_enet_get_eee(struct net_device *ndev, struct ethtool_eee *edata) struct fec_enet_private *fep = netdev_priv(ndev); struct ethtool_eee *p = &fep->eee; - if (!(fep->quirks & FEC_QUIRK_HAS_EEE)) - return -EOPNOTSUPP; + if (!(fep->quirks & FEC_QUIRK_HAS_EEE)) { + if (!netif_running(ndev)) + return -ENETDOWN; + + if (!phy_has_smarteee(ndev->phydev)) + return -EOPNOTSUPP; + + return phy_ethtool_get_eee(ndev->phydev, edata); + } if (!netif_running(ndev)) return -ENETDOWN; @@ -3123,8 +3130,15 @@ fec_enet_set_eee(struct net_device *ndev, struct ethtool_eee *edata) struct ethtool_eee *p = &fep->eee; int ret = 0; - if (!(fep->quirks & FEC_QUIRK_HAS_EEE)) - return -EOPNOTSUPP; + if (!(fep->quirks & FEC_QUIRK_HAS_EEE)) { + if (!netif_running(ndev)) + return -ENETDOWN; + + if (!phy_has_smarteee(ndev->phydev)) + return -EOPNOTSUPP; + + return phy_ethtool_set_eee(ndev->phydev, edata); + } if (!netif_running(ndev)) return -ENETDOWN;