Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp167196pxp; Fri, 11 Mar 2022 01:36:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJwUNFVlNLxEP3jwKtm64Rx41pQjNwAp/Unx8MYOQg+33uKrHcmXOKzj9YL7rwDLUbWEHDWj X-Received: by 2002:a17:907:9622:b0:6db:a30:8bb8 with SMTP id gb34-20020a170907962200b006db0a308bb8mr7727293ejc.475.1646991383828; Fri, 11 Mar 2022 01:36:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646991383; cv=none; d=google.com; s=arc-20160816; b=V4mUJxc+mP4xwTXq1qr6maHEc6twKeY9xWdkvx9tHz5+HyCqitAYA83ntb0a4n/cCg 86Z7LXGkHCujDQU5G1rhQd3ncc+OFvC/ODwnt8NwxBcvPyimKwFTsqhtq7QMM40qSqgl pUw1iF6KaXZC6coWr9qkwj2HeU8LApXhHWzjwWz5Ai2saxxaBIaTohOEvT2RjEuBld6v U1spu/TBF8tFCtgX5N5pTEbkOksJq9tz71XIWJU4pvi2GxqA/16XKkb32jUi2npZQukJ mBqqZmIKnA2nvstNmpGNNjRetK0rmIB3WVqchtA43Q5qIyxwbKkYZS7wHQSlLW2bDNQw oOug== 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=w96jfXH5BAO9/wMgbDElMYfxMy+LoW2kX7JDZCyN1M0=; b=NHiCZU0Rrp/8sAo1DVI5iUMRvuf1+AjJVS95IiEi9E+JdpcFuiP3IwYItH3cGqlpS3 5LpPCKRsdIqytGH08PN88D/7QJgRYg7ZaiGM9ZVsY3s42DF/eJ88dZkGo+kyKMiIO+sw EddCGpVqhjeVr1Rwo/98FiJNXGqchC8Xm1XQNVdKC5yjcVKJSFuwz5WVpyAopgQMRVwH 1BRwbQPkFpMoRZsgWm6ZJHcWR9ur/nKZ+xi/5ObhYoWuhPyKgNc9wGQy/LniysLVQS8H yxQDFYtdV8sCvNrobYDfQB9egk9N0R4iCG0Y8ZBogcl/m2QkkrnTOHEt7rwhLX/e0YOP MnUA== 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bh6-20020a170906a0c600b006db756faea0si3883152ejb.545.2022.03.11.01.35.58; Fri, 11 Mar 2022 01:36:23 -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 S240774AbiCKIve (ORCPT + 99 others); Fri, 11 Mar 2022 03:51:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234599AbiCKIv2 (ORCPT ); Fri, 11 Mar 2022 03:51:28 -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 4DAB51B754E for ; Fri, 11 Mar 2022 00:50:24 -0800 (PST) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSayY-0004ds-AX; Fri, 11 Mar 2022 09:50:18 +0100 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1nSayV-005534-Oq; Fri, 11 Mar 2022 09:50:15 +0100 From: Oleksij Rempel To: "David S. Miller" , Jakub Kicinski , Andrew Lunn , Heiner Kallweit , Russell King Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, netdev@vger.kernel.org, paskripkin@gmail.com Subject: [PATCH net-next v2 4/4] net: usb: asix: suspend embedded PHY if external is used Date: Fri, 11 Mar 2022 09:50:14 +0100 Message-Id: <20220311085014.1210963-4-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220311085014.1210963-1-o.rempel@pengutronix.de> References: <20220311085014.1210963-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 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,T_SCC_BODY_TEXT_LINE 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 In case external PHY is used, we need to take care of embedded PHY. Since there are no methods to disable this PHY from the MAC side and keeping RMII reference clock, we need to suspend it. This patch will reduce electrical noise (PHY is continuing to send FLPs) and power consumption by 0,22W. Signed-off-by: Oleksij Rempel --- changes v2: - rename internal to embedded PHY - add note about refclock dependency --- drivers/net/usb/asix.h | 3 +++ drivers/net/usb/asix_devices.c | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/asix.h b/drivers/net/usb/asix.h index 072760d76a72..2c81236c6c7c 100644 --- a/drivers/net/usb/asix.h +++ b/drivers/net/usb/asix.h @@ -158,6 +158,8 @@ #define AX_EEPROM_MAGIC 0xdeadbeef #define AX_EEPROM_LEN 0x200 +#define AX_EMBD_PHY_ADDR 0x10 + /* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */ struct asix_data { u8 multi_filter[AX_MCAST_FILTER_SIZE]; @@ -183,6 +185,7 @@ struct asix_common_private { struct asix_rx_fixup_info rx_fixup_info; struct mii_bus *mdio; struct phy_device *phydev; + struct phy_device *phydev_int; u16 phy_addr; bool embd_phy; u8 chipcode; diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c index 40046d23d986..4241852f392b 100644 --- a/drivers/net/usb/asix_devices.c +++ b/drivers/net/usb/asix_devices.c @@ -679,6 +679,22 @@ static int ax88772_init_phy(struct usbnet *dev) phy_attached_info(priv->phydev); + if (priv->embd_phy) + return 0; + + /* In case main PHY is not the embedded PHY and MAC is RMII clock + * provider, we need to suspend embedded PHY by keeping PLL enabled + * (AX_SWRESET_IPPD == 0). + */ + priv->phydev_int = mdiobus_get_phy(priv->mdio, AX_EMBD_PHY_ADDR); + if (!priv->phydev_int) { + netdev_err(dev->net, "Could not find internal PHY\n"); + return -ENODEV; + } + + priv->phydev_int->mac_managed_pm = 1; + phy_suspend(priv->phydev_int); + return 0; } @@ -734,7 +750,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf) return ret; priv->phy_addr = ret; - priv->embd_phy = ((priv->phy_addr & 0x1f) == 0x10); + priv->embd_phy = ((priv->phy_addr & 0x1f) == AX_EMBD_PHY_ADDR); ret = asix_read_cmd(dev, AX_CMD_STATMNGSTS_REG, 0, 0, 1, &priv->chipcode, 0); -- 2.30.2