Received: by 2002:ab2:6c55:0:b0:1fd:c486:4f03 with SMTP id v21csp603896lqp; Wed, 12 Jun 2024 10:29:57 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXUu5Sld1tbhWHSY/2rtyAy3ah5/bVIP5CprBy44MIn8cAAsOfXixlVcfs8kYZbd2VH6HMp083ijF8QWgQoRLYOayI9EDawlV2oilhdjA== X-Google-Smtp-Source: AGHT+IEr73qGwSRvqdk381gh/T7gVmx78AhdOTmYwvJeRZXT21HjEMbPfumgTL/1lGqh2FBT8eej X-Received: by 2002:a05:6a20:2447:b0:1b5:88f5:5823 with SMTP id adf61e73a8af0-1b8bf0de224mr420845637.27.1718213396775; Wed, 12 Jun 2024 10:29:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718213396; cv=pass; d=google.com; s=arc-20160816; b=Q6TMGHaWXLTp2IXYY2u2/G6joeCNvANQhTA5qPowwDyXaCacgYo3yKLUmKxUJWUauo w7M48qYo4XIgnQzrq7nMhfpEXPPFI8OGYEg/bEGVt/L2f0aqw/DMEBH0u4idMUIgDOAY ZtmSyPuEaiOTbWqcdg915sFMhL7HqWrEF7CKxrpzkP3mLzzyWlT43c+SBXTP7E5+FYeN 7UIjB8MejZcm5/dsBgUlZolUYQMqOKEj4TpreF8J+vrb4SCwv7UOYxAKCZNGIs9k13U8 7457L28CpMKIT623U1wxHZyX/gAhd+6q7DLw9Pwc6gvP6O90s9BYk+7zOwZvBh85apKh yAJw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=5rIh0pt9K12dlsK3OaVI5orxbS9LLvFHz7XAdFUANdE=; fh=uO69hSlCQLXA20wV/opGdm1WAGr8UYLN3SM3Ayvj6ok=; b=zxNDvYBq5leAJmmRQjamjiLTZj16x9V2RzgTOaiNBmeHsn6OMJG4tlX32vHw7ecJfO i6Xm7ZorGpdY9cwlyrdxq22y3VhA0r8kq4oK8C8YDFFJuCiWQy63d3NjOr9e6j7h1dDz ga0n2i/lB03OW5FrGK/X8BrAx8RNrXYIlkUiCWWZLy7Fpo5VFOg1EX8olOXo/PBZviK0 qJg1ACTIFzkmHipfOEAeNXo87ObSFmHlrBUWt/0Nl/kLmBWZXqnsN92ifbNigehGMsGE 5ge1xQYhBc24du1wCyvxlzKnyBa2argPTu7NApCB6xQ0/CMONNCedlwrYfGj/FK2AD+e 04dw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b="Dyq/r11n"; arc=pass (i=1 spf=pass spfdomain=microchip.com dkim=pass dkdomain=microchip.com dmarc=pass fromdomain=microchip.com); spf=pass (google.com: domain of linux-kernel+bounces-212007-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212007-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microchip.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id 41be03b00d2f7-6eac1dea979si7120265a12.102.2024.06.12.10.29.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 10:29:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-212007-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b="Dyq/r11n"; arc=pass (i=1 spf=pass spfdomain=microchip.com dkim=pass dkdomain=microchip.com dmarc=pass fromdomain=microchip.com); spf=pass (google.com: domain of linux-kernel+bounces-212007-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212007-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microchip.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 65ED2282F96 for ; Wed, 12 Jun 2024 17:29:56 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 86DB91836CB; Wed, 12 Jun 2024 17:29:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="Dyq/r11n" Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D753D1822C8; Wed, 12 Jun 2024 17:29:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.154.123 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718213359; cv=none; b=soKjteRu+tDvoz+oshg3SvUyBmTMtv9Th9SENFIsZ9l/L/BjdrgBaj5Sl8zcHthyl1aYrEcrhKW4ARCQQc2hcpZ/osAFJ/rX81dCuXH1D5f7rDm8bxeLX0zAwhKKQ+q2N+3NB3vBDCf7RIl05etfXRqgILXlW3Cfii/sjToAvFQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718213359; c=relaxed/simple; bh=2gIA6Iq203YqgqKcJSudmGZ5LiXcONkeQpWJJMNZAsQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HxyJu13PV3kl7NuNVfHn/5hobnG1jA0MGMQXjWhLFzW51FEWwmRP6vprQeVOjnrBgoms5qui8V5DbmmROO4wpABrVVHfB1HPfTmTxE3f17yuPH1kQj1wRY/BhyxkDGd3GH4IS9xPm81H4n6+In05+R+0cm3rhf0aC9tMr7StZw8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=Dyq/r11n; arc=none smtp.client-ip=68.232.154.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1718213357; x=1749749357; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2gIA6Iq203YqgqKcJSudmGZ5LiXcONkeQpWJJMNZAsQ=; b=Dyq/r11n9VDtmqYplvESmfxRwAsiQuUD+kuTrhzf1GqbRCvvDUxdLgWq a7ua+LJDdsNPvRVJNGjCCBfwx9V1S9OcO8Qs1LiEkQzJ2aW9xWQH7bKB9 YCCr6mDFUP+JVs+zyiQPhk/uwJRTNmy8Es5pU+jrBKxf4u9APy5sOmUd8 hDuJgWyrca3ApWjgJ1xWsZPDsa8Y7aXNcegw7odSXubNPUqPPMgoG4RIT TD2tdw2fjgrDJCESsitdRxYCiWBIOpEB65q06RJWAndyQldQyAA8JT7lg QpigvjtlSeTFwzr0iVIHiuWxjXhK/PKuI/XB2jcttOIRxBzoMNJeK+7mg g==; X-CSE-ConnectionGUID: Vpq6ati1SxKeL258BLuWYg== X-CSE-MsgGUID: WQjZbRuESJqHwb6AZO+l5g== X-IronPort-AV: E=Sophos;i="6.08,233,1712646000"; d="scan'208";a="194739146" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Jun 2024 10:29:10 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Wed, 12 Jun 2024 10:28:50 -0700 Received: from HYD-DK-UNGSW21.microchip.com (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Wed, 12 Jun 2024 10:28:45 -0700 From: Raju Lakkaraju To: CC: , , , , , , , , , , , , , Subject: [PATCH net V4 3/3] net: phy: mxl-gpy: Remove interrupt mask clearing from config_init Date: Wed, 12 Jun 2024 22:55:39 +0530 Message-ID: <20240612172539.28565-4-Raju.Lakkaraju@microchip.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240612172539.28565-1-Raju.Lakkaraju@microchip.com> References: <20240612172539.28565-1-Raju.Lakkaraju@microchip.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain When the system resumes from sleep, the phy_init_hw() function invokes config_init(), which clears all interrupt masks and causes wake events to be lost in subsequent wake sequences. Remove interrupt mask clearing from config_init() and preserve relevant masks in config_intr(). Fixes: 7d901a1e878a ("net: phy: add Maxlinear GPY115/21x/24x driver") Signed-off-by: Raju Lakkaraju Reviewed-by: Wojciech Drewek --- Change List: ------------ V3 -> V4: - No change V0 -> V3: - Address the https://lore.kernel.org/lkml/4a565d54-f468-4e32-8a2c-102c1203f72c@lunn.ch/T/ review comments drivers/net/phy/mxl-gpy.c | 58 +++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/drivers/net/phy/mxl-gpy.c b/drivers/net/phy/mxl-gpy.c index b2d36a3a96f1..e5f8ac4b4604 100644 --- a/drivers/net/phy/mxl-gpy.c +++ b/drivers/net/phy/mxl-gpy.c @@ -107,6 +107,7 @@ struct gpy_priv { u8 fw_major; u8 fw_minor; + u32 wolopts; /* It takes 3 seconds to fully switch out of loopback mode before * it can safely re-enter loopback mode. Record the time when @@ -221,6 +222,15 @@ static int gpy_hwmon_register(struct phy_device *phydev) } #endif +static int gpy_ack_interrupt(struct phy_device *phydev) +{ + int ret; + + /* Clear all pending interrupts */ + ret = phy_read(phydev, PHY_ISTAT); + return ret < 0 ? ret : 0; +} + static int gpy_mbox_read(struct phy_device *phydev, u32 addr) { struct gpy_priv *priv = phydev->priv; @@ -262,16 +272,8 @@ static int gpy_mbox_read(struct phy_device *phydev, u32 addr) static int gpy_config_init(struct phy_device *phydev) { - int ret; - - /* Mask all interrupts */ - ret = phy_write(phydev, PHY_IMASK, 0); - if (ret) - return ret; - - /* Clear all pending interrupts */ - ret = phy_read(phydev, PHY_ISTAT); - return ret < 0 ? ret : 0; + /* Nothing to configure. Configuration Requirement Placeholder */ + return 0; } static int gpy21x_config_init(struct phy_device *phydev) @@ -627,11 +629,23 @@ static int gpy_read_status(struct phy_device *phydev) static int gpy_config_intr(struct phy_device *phydev) { + struct gpy_priv *priv = phydev->priv; u16 mask = 0; + int ret; + + ret = gpy_ack_interrupt(phydev); + if (ret) + return ret; if (phydev->interrupts == PHY_INTERRUPT_ENABLED) mask = PHY_IMASK_MASK; + if (priv->wolopts & WAKE_MAGIC) + mask |= PHY_IMASK_WOL; + + if (priv->wolopts & WAKE_PHY) + mask |= PHY_IMASK_LSTC; + return phy_write(phydev, PHY_IMASK, mask); } @@ -678,6 +692,7 @@ static int gpy_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) { struct net_device *attach_dev = phydev->attached_dev; + struct gpy_priv *priv = phydev->priv; int ret; if (wol->wolopts & WAKE_MAGIC) { @@ -725,6 +740,8 @@ static int gpy_set_wol(struct phy_device *phydev, ret = phy_read(phydev, PHY_ISTAT); if (ret < 0) return ret; + + priv->wolopts |= WAKE_MAGIC; } else { /* Disable magic packet matching */ ret = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND2, @@ -732,6 +749,13 @@ static int gpy_set_wol(struct phy_device *phydev, WOL_EN); if (ret < 0) return ret; + + /* Disable the WOL interrupt */ + ret = phy_clear_bits(phydev, PHY_IMASK, PHY_IMASK_WOL); + if (ret < 0) + return ret; + + priv->wolopts &= ~WAKE_MAGIC; } if (wol->wolopts & WAKE_PHY) { @@ -748,9 +772,11 @@ static int gpy_set_wol(struct phy_device *phydev, if (ret & (PHY_IMASK_MASK & ~PHY_IMASK_LSTC)) phy_trigger_machine(phydev); + priv->wolopts |= WAKE_PHY; return 0; } + priv->wolopts &= ~WAKE_PHY; /* Disable the link state change interrupt */ return phy_clear_bits(phydev, PHY_IMASK, PHY_IMASK_LSTC); } @@ -758,18 +784,10 @@ static int gpy_set_wol(struct phy_device *phydev, static void gpy_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) { - int ret; + struct gpy_priv *priv = phydev->priv; wol->supported = WAKE_MAGIC | WAKE_PHY; - wol->wolopts = 0; - - ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, VPSPEC2_WOL_CTL); - if (ret & WOL_EN) - wol->wolopts |= WAKE_MAGIC; - - ret = phy_read(phydev, PHY_IMASK); - if (ret & PHY_IMASK_LSTC) - wol->wolopts |= WAKE_PHY; + wol->wolopts = priv->wolopts; } static int gpy_loopback(struct phy_device *phydev, bool enable) -- 2.34.1