From: Greg Kroah-Hartman Date: Mon, 12 May 2025 14:04:49 +0000 (+0200) Subject: 5.15-stable patches X-Git-Tag: v5.15.183~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d82a977ee7a3479cb13b35794387b42913cd7e63;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: revert-net-phy-microchip-force-irq-polling-mode-for-lan88xx.patch --- diff --git a/queue-5.15/revert-net-phy-microchip-force-irq-polling-mode-for-lan88xx.patch b/queue-5.15/revert-net-phy-microchip-force-irq-polling-mode-for-lan88xx.patch new file mode 100644 index 0000000000..56aaa8adcc --- /dev/null +++ b/queue-5.15/revert-net-phy-microchip-force-irq-polling-mode-for-lan88xx.patch @@ -0,0 +1,86 @@ +From c9e1e41fa0cf8003d3a8f0af1c53236b7e4d7e17 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Mon, 12 May 2025 16:01:41 +0200 +Subject: Revert "net: phy: microchip: force IRQ polling mode for lan88xx" + +From: Greg Kroah-Hartman + +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 +Cc: Andrew Lunn +Cc: Paolo Abeni +Cc: Sasha Levin +Link: https://lore.kernel.org/r/aB6uurX99AZWM9I1@finisterre.sirena.org.uk +Reported-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + 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, diff --git a/queue-5.15/series b/queue-5.15/series index 18d35c11f9..225f3ebbe3 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -48,3 +48,4 @@ mips-fix-max_reg_offset.patch drm-panel-simple-update-timings-for-auo-g101evn010.patch nvme-unblock-ctrl-state-transition-for-firmware-upda.patch do_umount-add-missing-barrier-before-refcount-checks.patch +revert-net-phy-microchip-force-irq-polling-mode-for-lan88xx.patch