From patchwork Mon Mar 27 14:22: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: 75502 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1566353vqo; Mon, 27 Mar 2023 07:48:10 -0700 (PDT) X-Google-Smtp-Source: AKy350YMI35J9j4MPRcjcZj7Fs9rNLRq/xAECt8rtDS+VWjEYr4FicswRvS21H+KPZRfN7hRD5bl X-Received: by 2002:a17:90a:b88e:b0:23e:cea5:d37e with SMTP id o14-20020a17090ab88e00b0023ecea5d37emr11952871pjr.46.1679928490000; Mon, 27 Mar 2023 07:48:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679928489; cv=none; d=google.com; s=arc-20160816; b=fDagFmRU9pvtraNyMgaPj4vzB6SuEVpx3bNWxEOa0r6R8DMFueDEYPFWNk0jmjOeCS d7aahwhnZY8tUE9n4ecMPRk4op1FhivMkvFSVfgazi2SloDORJqQnKtFrSx440trz7LB U31GxSYX/cE/SI3vz1ZVzypxftf+5WuHfDs6jksB//ZhLHhUcHy7gWE/ock+Vdt0vQ6t HwDyyT4yqEpCh4ohvLklOei1TgVI7zeguaugaxIcdKp6MAs1TFZQs5fk7HRtOWZCFLm7 itpiKZLot3S7cgq/tKlF2XK9zsiLiZWdYbOJaVaMtEkNM+Rbgd5vC9NlYDy9joC6k9Rq sKiA== 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=cT7jn9K64zIvhfLwiW+KDr4+cZArazZceUhKKJt2UcM=; b=cXtV3B1gxalVLQHHDwxR1/7203oy42bQ1+SeJvnXa9pbpZKZ6gQtxbT4DA9D21VGvq d8GYGhsYbTnqMNDjriKik+vrrPgAK77dLr5vtVt0cS6UuYNfUHP2Cw5WCkB77551qhz2 fuDVk2sWF6+rED9i3/sxd/owYTu3o1TTgPST7OEz+pXTld7U1g3NGoR7IvAc4CHixsjw IDcWSrfKVJHr84DNlK4fFLlqr4W8xA3zObLQgQOirzOHqmYCja9jiTsyYKAS26gIwgqm v0NRe555BGcuGpJGhXebJSojVE8Frzse8IWngf0Qq7jhiwf4YZsLAfelV/Uh9YUYkKYL 1s0Q== 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 fr17-20020a17090ae2d100b0023fcb58b0e0si10595937pjb.162.2023.03.27.07.47.57; Mon, 27 Mar 2023 07:48:09 -0700 (PDT) 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 S233094AbjC0OYX (ORCPT + 99 others); Mon, 27 Mar 2023 10:24:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232891AbjC0OXt (ORCPT ); Mon, 27 Mar 2023 10:23:49 -0400 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 9E01A7D94 for ; Mon, 27 Mar 2023 07:22:14 -0700 (PDT) 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 1pgnja-0008Ho-L2; Mon, 27 Mar 2023 16:22:06 +0200 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 1pgnjY-0076IX-RR; Mon, 27 Mar 2023 16:22:04 +0200 Received: from ore by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pgnjW-00Fkjc-UV; Mon, 27 Mar 2023 16:22:02 +0200 From: Oleksij Rempel To: Wei Fang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Heiner Kallweit , Russell King Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Shenwei Wang , Clark Wang , NXP Linux Team , Amit Cohen , Gal Pressman , Alexandru Tachici , Piergiorgio Beruto , Willem de Bruijn , Vladimir Oltean Subject: [PATCH net-next v2 7/8] net: phy: at803x: Fix SmartEEE support for some link configurations Date: Mon, 27 Mar 2023 16:22:01 +0200 Message-Id: <20230327142202.3754446-8-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230327142202.3754446-1-o.rempel@pengutronix.de> References: <20230327142202.3754446-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=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1761532696222167370?= X-GMAIL-MSGID: =?utf-8?q?1761532696222167370?= This commit fixes SmartEEE support for certain link configurations on the AR8035 PHY. Before this patch, if AR8035 was running with SmartEEE enabled (EEE and LPI are on), it would not be able to establish a 100BaseTX/Half or 1000BaseT/Half link. A similar issue would occur with 100BaseTX/Full and an LPI TX timer configured to less than 80 msec. To avoid this issue, we need to keep LPI disabled before the link is established and enable it only when a supported link configuration is detected. By implementing this fix, the at803x driver can now correctly handle SmartEEE features for various link configurations, improving link establishment, compatibility, and overall performance. Signed-off-by: Oleksij Rempel --- drivers/net/phy/at803x.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 4f65b3ebf806..5a12f778d675 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -1014,10 +1014,15 @@ static int at803x_smarteee_config(struct phy_device *phydev) 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 | @@ -1691,7 +1696,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); } @@ -1725,6 +1730,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 (phydev->mac_supports_eee || !phydev->is_smart_eee_phy) + 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; @@ -2153,6 +2180,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,