genphy_update_link(9)
π genphy_update_link(9) β a real one from the Kernel API Manual
okay bestie, gather round, because this one is short but it matters. It lives in the Kernel API Manual (yes, that's the whole manual name, no cap), and it's the lil function that makes sure your network interface knows whether the cable's actually plugged in. literally the vibe check of the PHY world. β¨
πΈ SYNOPSIS
int genphy_update_link (struct phy_device *phydev );
that's it. that's the whole signature. she's compact, she's iconic, she returns an int. π
π ARGUMENTS
phydevβ the targetphy_devicestruct. like, the specific PHY device you're trying to update. that one. the main character. π«Ά
β¨ DESCRIPTION
okay so here's the tea: this function updates the value in phydev->link so it reflects the current link value. basically syncing the struct up with reality. no cap.
and the way it does it?? it has to read the status register twice, keeping the second value. yes, twice. once is not enough, bestie β it reads, then reads again, and the second read is the one that gets kept. that's the whole method. that's the whole bit. π€
π¦ SEE ALSO
the whole friend group, fr fr β first the kernel file it lives in: ./drivers/net/phy/phy_device.c, then: phy_uses_state_machine(9), phy_register_fixup(9), genphy_match_phy_device(9), get_phy_c45_ids(9), get_phy_c22_id(9), get_phy_device(9), phy_device_register(9), phy_device_remove(9), phy_get_c45_ids(9), phy_find_next(9), phy_prepare_link(9), phy_connect_direct(9), phy_connect(9), phy_disconnect(9), phy_poll_reset(9), phy_sfp_connect_phy(9), phy_sfp_disconnect_phy(9), phy_sfp_attach(9), phy_sfp_detach(9), phy_sfp_probe(9), phy_attach_direct(9), phy_detach(9), phy_reset_after_clk_enable(9), genphy_config_advert(9), genphy_c37_config_advert(9), genphy_setup_forced(9), genphy_restart_aneg(9).
and continuing because the squad is BIG: genphy_check_and_restart_aneg(9), __genphy_config_aneg(9), genphy_c37_config_aneg(9), genphy_aneg_done(9), genphy_read_status_fixed(9), genphy_read_status(9), genphy_c37_read_status(9), genphy_soft_reset(9), genphy_read_abilities(9), phy_remove_link_mode(9), phy_advertise_supported(9), phy_advertise_eee_all(9), phy_support_eee(9), phy_disable_eee(9), phy_support_sym_pause(9), phy_support_asym_pause(9), phy_set_sym_pause(9), phy_set_asym_pause(9), phy_validate_pause(9), phy_get_pause(9), phy_get_internal_delay(9), phy_get_tx_amplitude_gain(9), phy_get_mac_termination(9), phy_get_sfp_port(9).
last batch, promise π: fwnode_mdio_find_device(9), fwnode_phy_find_device(9), fwnode_get_phy_node(9), phy_probe(9), phy_driver_register(9).
lowkey a flex how many of these exist. go read them. iykyk. π
and that's the whole page, bestie β sourced from ./drivers/net/phy, dated October 2026, the genphy_update_link(9) page from the Kernel API Manual, signed off with so much love. go read your status register twice, you icon. πππ¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms