--- /dev/null
+From c9e1e41fa0cf8003d3a8f0af1c53236b7e4d7e17 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Mon, 12 May 2025 16:01:41 +0200
+Subject: Revert "net: phy: microchip: force IRQ polling mode for lan88xx"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit 853e14cf36f6b16a372444a1eff54a3d7c6c1268 which is
+commit 30a41ed32d3088cd0d682a13d7f30b23baed7e93 upstream.
+
+It is reported to cause NFS boot problems on a Raspberry Pi 3b so revert
+it from this branch for now.
+
+Cc: Fiona Klute <fiona.klute@gmx.de>
+Cc: Andrew Lunn <andrew@lunn.ch>
+Cc: Paolo Abeni <pabeni@redhat.com>
+Cc: Sasha Levin <sashal@kernel.org>
+Link: https://lore.kernel.org/r/aB6uurX99AZWM9I1@finisterre.sirena.org.uk
+Reported-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/phy/microchip.c | 46 +++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 43 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/phy/microchip.c
++++ b/drivers/net/phy/microchip.c
+@@ -31,6 +31,47 @@ static int lan88xx_write_page(struct phy
+ 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;
+@@ -347,9 +388,8 @@ static struct phy_driver microchip_phy_d
+ .config_aneg = lan88xx_config_aneg,
+ .link_change_notify = lan88xx_link_change_notify,
+
+- /* Interrupt handling is broken, do not define related
+- * functions to force polling.
+- */
++ .config_intr = lan88xx_phy_config_intr,
++ .handle_interrupt = lan88xx_handle_interrupt,
+
+ .suspend = lan88xx_suspend,
+ .resume = genphy_resume,