From patchwork Wed Apr 16 10:24:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fiona Klute X-Patchwork-Id: 14053639 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 5C29D24729A; Wed, 16 Apr 2025 10:24:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744799084; cv=none; b=FGf6KvaMprfQV7/X02mTI1HdoPyViELOSuf8y5hUEriU/41t+zXGXg4ta2Sw6yNVAHZR6FpJjiZbBMpxDb77BoB34tUn8sVbQ9nm/YL3Gl2K59hj6TZR3Yuc5BICuxXwSuHbags0UVt7ZrmgUWJmbotHJ+IHBfAQHje/VFiqBjc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744799084; c=relaxed/simple; bh=F1cfkVME9g4l1SiglzOmf/7l3tvFBiMdFHUrX9+ZuYY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=NzQF/JvIZMzoU8RUcU7fb6UEjsHYLT4JwBbimylIEuz2nTr3uMNNcPTZhaUqzDQ/2HS7xa68Cf58j2g+kdb0rG1oJpiCkqecLKt+MbaznxW3x2kCwBOdoCCtFSbxOK2ZIvonArf5pv1hNejOxQYBsBW5dE3LEZFKRic8enkRL5Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=fiona.klute@gmx.de header.b=hyR+jb4V; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=fiona.klute@gmx.de header.b="hyR+jb4V" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1744799063; x=1745403863; i=fiona.klute@gmx.de; bh=F1cfkVME9g4l1SiglzOmf/7l3tvFBiMdFHUrX9+ZuYY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID: MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=hyR+jb4VC++rQ8EjbTAN4bYe1D7h1IqssziTnVJRhaa4dFRffsDPj63EXgVQviUm wKYk9Z7xEkfNB9FPReOdHTlr+AvGDAuxJeHNr/zAtqYL2jla1PgPl+DZSgt7XmQrD PN8KbfJWPo/g8zJQjc3lFw0UGzF3/XgK/7Cy5UKxOZN1pgAzhGCjY+LziUmNzbqpZ aC4J+Xm2KI9V5nFJ1ZYXMYjza3a2rtZDWHMk+4NRHyjT+V6LPJfOYcrijZD1gLtar HFpSs13p7+NMwuQAR1bGkrrC5FXhunO6LEbJC313hC7YE3izaxEpBCXFGgi6ySpCE ceoF0dkcTO4MxlaFfg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from haruka.home.arpa ([85.22.113.159]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mnpnm-1tFmDk4AuY-00nWAL; Wed, 16 Apr 2025 12:24:23 +0200 From: Fiona Klute To: netdev@vger.kernel.org Cc: Andrew Lunn , Thangaraj Samynathan , Rengarajan Sundararajan , UNGLinuxDriver@microchip.com, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-list@raspberrypi.com, Fiona Klute Subject: [PATCH net v2] net: phy: microchip: force IRQ polling mode for lan88xx Date: Wed, 16 Apr 2025 12:24:13 +0200 Message-ID: <20250416102413.30654-1-fiona.klute@gmx.de> X-Mailer: git-send-email 2.49.0 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Provags-ID: V03:K1:K11aug/rBQsdo745LCFBdVhspCcbf/XlKyyietnwyNGMUzNbyLO wD28x74Vao5dMq4Y3kzANLrMtv+zmIR1FghOm3BbXFiv34lGjHcjrQnsW0GBsBnqkBIGJKy xdaf6zlPNDnXIE6yTIJkOYjQpalMHN3UAINawdDvEOBiAX0FfdYhyxoMxZ4UIg/OMn4R2xR Uxqic1IaxfgmDz0meUR1Q== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:sdNxHQs2iVk=;h1sr932vX5NifI2SN8Oii8jC0cM 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 EZ/Y4D9CyrByQ= With lan88xx based devices the lan78xx driver can get stuck in an interrupt loop while bringing the device up, flooding the kernel log with messages like the following: lan78xx 2-3:1.0 enp1s0u3: kevent 4 may have been dropped Removing interrupt support from the lan88xx PHY driver forces the driver to use polling instead, which avoids the problem. The issue has been observed with Raspberry Pi devices at least since 4.14 (see [1], bug report for their downstream kernel), as well as with Nvidia devices [2] in 2020, where disabling polling was the vendor-suggested workaround (together with the claim that phylib changes in 4.9 made the interrupt handling in lan78xx incompatible). Iperf reports well over 900Mbits/sec per direction with client in --dualtest mode, so there does not seem to be a significant impact on throughput (lan88xx device connected via switch to the peer). [1] https://github.com/raspberrypi/linux/issues/2447 [2] https://forums.developer.nvidia.com/t/jetson-xavier-and-lan7800-problem/142134/11 Link: https://lore.kernel.org/0901d90d-3f20-4a10-b680-9c978e04ddda@lunn.ch Fixes: 792aec47d59d ("add microchip LAN88xx phy driver") Signed-off-by: Fiona Klute Cc: kernel-list@raspberrypi.com Cc: stable@vger.kernel.org Reviewed-by: Andrew Lunn --- v2: - add comment why interrupt functions are missing - add Fixes reference v1: https://lore.kernel.org/netdev/20250414152634.2786447-1-fiona.klute@gmx.de/ drivers/net/phy/microchip.c | 46 +++---------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/drivers/net/phy/microchip.c b/drivers/net/phy/microchip.c index 0e17cc458efdc..93de88c1c8fd5 100644 --- a/drivers/net/phy/microchip.c +++ b/drivers/net/phy/microchip.c @@ -37,47 +37,6 @@ static int lan88xx_write_page(struct phy_device *phydev, int page) return __phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, page); } -static int lan88xx_phy_config_intr(struct phy_device *phydev) -{ - int rc; - - if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { - /* unmask all source and clear them before enable */ - rc = phy_write(phydev, LAN88XX_INT_MASK, 0x7FFF); - rc = phy_read(phydev, LAN88XX_INT_STS); - rc = phy_write(phydev, LAN88XX_INT_MASK, - LAN88XX_INT_MASK_MDINTPIN_EN_ | - LAN88XX_INT_MASK_LINK_CHANGE_); - } else { - rc = phy_write(phydev, LAN88XX_INT_MASK, 0); - if (rc) - return rc; - - /* Ack interrupts after they have been disabled */ - rc = phy_read(phydev, LAN88XX_INT_STS); - } - - return rc < 0 ? rc : 0; -} - -static irqreturn_t lan88xx_handle_interrupt(struct phy_device *phydev) -{ - int irq_status; - - irq_status = phy_read(phydev, LAN88XX_INT_STS); - if (irq_status < 0) { - phy_error(phydev); - return IRQ_NONE; - } - - if (!(irq_status & LAN88XX_INT_STS_LINK_CHANGE_)) - return IRQ_NONE; - - phy_trigger_machine(phydev); - - return IRQ_HANDLED; -} - static int lan88xx_suspend(struct phy_device *phydev) { struct lan88xx_priv *priv = phydev->priv; @@ -528,8 +487,9 @@ static struct phy_driver microchip_phy_driver[] = { .config_aneg = lan88xx_config_aneg, .link_change_notify = lan88xx_link_change_notify, - .config_intr = lan88xx_phy_config_intr, - .handle_interrupt = lan88xx_handle_interrupt, + /* Interrupt handling is broken, do not define related + * functions to force polling. + */ .suspend = lan88xx_suspend, .resume = genphy_resume,