phy_poll_reset(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so bestie, welcome to phy_poll_reset(9) from the Kernel API Manual 🫢✨ this one is literally about waiting for a PHY reset to finish properly instead of rushing in and causing chaos. πŸ’…

πŸ’– NAME πŸ’–

phy_poll_reset β€” safely wait until a PHY reset has properly completed πŸŽ€

✨ SYNOPSIS ✨

int phy_poll_reset (struct phy_device *phydev );

πŸŽ€ ARGUMENTS πŸŽ€

  • phydev β€” the PHY device to poll. that’s the cutie we’re checking on, no cap πŸ’–

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so according to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as published in 2008, a PHY reset may take up to 0.5 seconds. the MII BMCR register must be polled until the BMCR_RESET bit clears. periodt. ⏳

also? any attempts to write to PHY registers may have no effect or even generate MDIO bus errors until this is complete. so like… do not rush her, bestie 😭

some PHYs (such as the Marvell 88E1111) don’t entirely conform to the standard and do not fully reset after the BMCR_RESET bit is set, and may even REQUIRE a soft-reset to properly restart autonegotiation. yes, REQUIRE in all caps, she’s dramatic but valid πŸ’…

in an effort to support such broken PHYs, this function is separate from the standard phy_init_hw which will zero all the other bits in the BMCR and reapply all driver-specific and board-specific fixups. so phy_poll_reset is doing its own little waiting ritual, not the whole phy_init_hw reset-and-reapply-everything situation. fr fr 🌸

🌈 SEE ALSO 🌈

Kernel file: ./drivers/net/phy/phy_device.c


πŸ’– cute sign-off: this page lives in ./drivers/net/phy, is dated October 2026, and answers to phy_poll_reset(9) β€” mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from