Lines Matching full:phydev

21 int __bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val)  in __bcm_phy_write_exp()  argument
25 rc = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_write_exp()
29 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, val); in __bcm_phy_write_exp()
33 int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val) in bcm_phy_write_exp() argument
37 phy_lock_mdio_bus(phydev); in bcm_phy_write_exp()
38 rc = __bcm_phy_write_exp(phydev, reg, val); in bcm_phy_write_exp()
39 phy_unlock_mdio_bus(phydev); in bcm_phy_write_exp()
45 int __bcm_phy_read_exp(struct phy_device *phydev, u16 reg) in __bcm_phy_read_exp() argument
49 val = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_read_exp()
53 val = __phy_read(phydev, MII_BCM54XX_EXP_DATA); in __bcm_phy_read_exp()
56 __phy_write(phydev, MII_BCM54XX_EXP_SEL, 0); in __bcm_phy_read_exp()
62 int bcm_phy_read_exp(struct phy_device *phydev, u16 reg) in bcm_phy_read_exp() argument
66 phy_lock_mdio_bus(phydev); in bcm_phy_read_exp()
67 rc = __bcm_phy_read_exp(phydev, reg); in bcm_phy_read_exp()
68 phy_unlock_mdio_bus(phydev); in bcm_phy_read_exp()
74 int __bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set) in __bcm_phy_modify_exp() argument
78 ret = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_modify_exp()
82 ret = __phy_read(phydev, MII_BCM54XX_EXP_DATA); in __bcm_phy_modify_exp()
90 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, new); in __bcm_phy_modify_exp()
94 int bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set) in bcm_phy_modify_exp() argument
98 phy_lock_mdio_bus(phydev); in bcm_phy_modify_exp()
99 ret = __bcm_phy_modify_exp(phydev, reg, mask, set); in bcm_phy_modify_exp()
100 phy_unlock_mdio_bus(phydev); in bcm_phy_modify_exp()
106 int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum) in bcm54xx_auxctl_read() argument
111 phy_write(phydev, MII_BCM54XX_AUX_CTL, MII_BCM54XX_AUXCTL_SHDWSEL_MASK | in bcm54xx_auxctl_read()
113 return phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm54xx_auxctl_read()
117 int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val) in bcm54xx_auxctl_write() argument
119 return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val); in bcm54xx_auxctl_write()
123 int bcm_phy_write_misc(struct phy_device *phydev, in bcm_phy_write_misc() argument
129 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, in bcm_phy_write_misc()
134 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm_phy_write_misc()
136 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp); in bcm_phy_write_misc()
141 rc = bcm_phy_write_exp(phydev, tmp, val); in bcm_phy_write_misc()
147 int bcm_phy_read_misc(struct phy_device *phydev, in bcm_phy_read_misc() argument
153 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, in bcm_phy_read_misc()
158 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm_phy_read_misc()
160 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp); in bcm_phy_read_misc()
165 rc = bcm_phy_read_exp(phydev, tmp); in bcm_phy_read_misc()
171 int bcm_phy_ack_intr(struct phy_device *phydev) in bcm_phy_ack_intr() argument
176 reg = phy_read(phydev, MII_BCM54XX_ISR); in bcm_phy_ack_intr()
184 int bcm_phy_config_intr(struct phy_device *phydev) in bcm_phy_config_intr() argument
188 reg = phy_read(phydev, MII_BCM54XX_ECR); in bcm_phy_config_intr()
192 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in bcm_phy_config_intr()
193 err = bcm_phy_ack_intr(phydev); in bcm_phy_config_intr()
198 err = phy_write(phydev, MII_BCM54XX_ECR, reg); in bcm_phy_config_intr()
201 err = phy_write(phydev, MII_BCM54XX_ECR, reg); in bcm_phy_config_intr()
205 err = bcm_phy_ack_intr(phydev); in bcm_phy_config_intr()
211 irqreturn_t bcm_phy_handle_interrupt(struct phy_device *phydev) in bcm_phy_handle_interrupt() argument
215 irq_status = phy_read(phydev, MII_BCM54XX_ISR); in bcm_phy_handle_interrupt()
217 phy_error(phydev); in bcm_phy_handle_interrupt()
226 irq_mask = phy_read(phydev, MII_BCM54XX_IMR); in bcm_phy_handle_interrupt()
228 phy_error(phydev); in bcm_phy_handle_interrupt()
236 phy_trigger_machine(phydev); in bcm_phy_handle_interrupt()
242 int bcm_phy_read_shadow(struct phy_device *phydev, u16 shadow) in bcm_phy_read_shadow() argument
244 phy_write(phydev, MII_BCM54XX_SHD, MII_BCM54XX_SHD_VAL(shadow)); in bcm_phy_read_shadow()
245 return MII_BCM54XX_SHD_DATA(phy_read(phydev, MII_BCM54XX_SHD)); in bcm_phy_read_shadow()
249 int bcm_phy_write_shadow(struct phy_device *phydev, u16 shadow, in bcm_phy_write_shadow() argument
252 return phy_write(phydev, MII_BCM54XX_SHD, in bcm_phy_write_shadow()
259 int __bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb) in __bcm_phy_read_rdb() argument
263 val = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_read_rdb()
267 return __phy_read(phydev, MII_BCM54XX_RDB_DATA); in __bcm_phy_read_rdb()
271 int bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb) in bcm_phy_read_rdb() argument
275 phy_lock_mdio_bus(phydev); in bcm_phy_read_rdb()
276 ret = __bcm_phy_read_rdb(phydev, rdb); in bcm_phy_read_rdb()
277 phy_unlock_mdio_bus(phydev); in bcm_phy_read_rdb()
283 int __bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val) in __bcm_phy_write_rdb() argument
287 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_write_rdb()
291 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, val); in __bcm_phy_write_rdb()
295 int bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val) in bcm_phy_write_rdb() argument
299 phy_lock_mdio_bus(phydev); in bcm_phy_write_rdb()
300 ret = __bcm_phy_write_rdb(phydev, rdb, val); in bcm_phy_write_rdb()
301 phy_unlock_mdio_bus(phydev); in bcm_phy_write_rdb()
307 int __bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set) in __bcm_phy_modify_rdb() argument
311 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_modify_rdb()
315 ret = __phy_read(phydev, MII_BCM54XX_RDB_DATA); in __bcm_phy_modify_rdb()
323 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, new); in __bcm_phy_modify_rdb()
327 int bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set) in bcm_phy_modify_rdb() argument
331 phy_lock_mdio_bus(phydev); in bcm_phy_modify_rdb()
332 ret = __bcm_phy_modify_rdb(phydev, rdb, mask, set); in bcm_phy_modify_rdb()
333 phy_unlock_mdio_bus(phydev); in bcm_phy_modify_rdb()
339 int bcm_phy_enable_apd(struct phy_device *phydev, bool dll_pwr_down) in bcm_phy_enable_apd() argument
344 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3); in bcm_phy_enable_apd()
349 bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR3, val); in bcm_phy_enable_apd()
352 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_APD); in bcm_phy_enable_apd()
359 if (phydev->autoneg == AUTONEG_ENABLE) in bcm_phy_enable_apd()
368 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_APD, val); in bcm_phy_enable_apd()
372 int bcm_phy_set_eee(struct phy_device *phydev, bool enable) in bcm_phy_set_eee() argument
377 val = phy_read_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL); in bcm_phy_set_eee()
386 phy_write_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL, (u32)val); in bcm_phy_set_eee()
389 val = phy_read_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV); in bcm_phy_set_eee()
394 phydev->supported)) in bcm_phy_set_eee()
397 phydev->supported)) in bcm_phy_set_eee()
405 phy_write_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV, (u32)val); in bcm_phy_set_eee()
411 int bcm_phy_downshift_get(struct phy_device *phydev, u8 *count) in bcm_phy_downshift_get() argument
415 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm_phy_downshift_get()
425 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2); in bcm_phy_downshift_get()
443 int bcm_phy_downshift_set(struct phy_device *phydev, u8 count) in bcm_phy_downshift_set() argument
454 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm_phy_downshift_set()
463 return bcm54xx_auxctl_write(phydev, in bcm_phy_downshift_set()
468 ret = bcm54xx_auxctl_write(phydev, in bcm_phy_downshift_set()
475 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2); in bcm_phy_downshift_set()
493 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR2, val); in bcm_phy_downshift_set()
515 int bcm_phy_get_sset_count(struct phy_device *phydev) in bcm_phy_get_sset_count() argument
521 void bcm_phy_get_strings(struct phy_device *phydev, u8 *data) in bcm_phy_get_strings() argument
533 static u64 bcm_phy_get_stat(struct phy_device *phydev, u64 *shadow, in bcm_phy_get_stat() argument
541 val = phy_read(phydev, stat.reg); in bcm_phy_get_stat()
543 val = phy_read_mmd(phydev, stat.devad, stat.reg); in bcm_phy_get_stat()
556 void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow, in bcm_phy_get_stats() argument
562 data[i] = bcm_phy_get_stat(phydev, shadow, i); in bcm_phy_get_stats()
566 void bcm_phy_r_rc_cal_reset(struct phy_device *phydev) in bcm_phy_r_rc_cal_reset() argument
569 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010); in bcm_phy_r_rc_cal_reset()
572 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000); in bcm_phy_r_rc_cal_reset()
576 int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev) in bcm_phy_28nm_a0b0_afe_config_init() argument
581 bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048); in bcm_phy_28nm_a0b0_afe_config_init()
584 bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b); in bcm_phy_28nm_a0b0_afe_config_init()
589 bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20); in bcm_phy_28nm_a0b0_afe_config_init()
592 bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b); in bcm_phy_28nm_a0b0_afe_config_init()
595 phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd); in bcm_phy_28nm_a0b0_afe_config_init()
597 bcm_phy_r_rc_cal_reset(phydev); in bcm_phy_28nm_a0b0_afe_config_init()
600 bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19); in bcm_phy_28nm_a0b0_afe_config_init()
603 bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f); in bcm_phy_28nm_a0b0_afe_config_init()
606 bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0); in bcm_phy_28nm_a0b0_afe_config_init()
609 bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b); in bcm_phy_28nm_a0b0_afe_config_init()
612 bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800); in bcm_phy_28nm_a0b0_afe_config_init()
618 int bcm_phy_enable_jumbo(struct phy_device *phydev) in bcm_phy_enable_jumbo() argument
622 ret = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL); in bcm_phy_enable_jumbo()
627 ret = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL, in bcm_phy_enable_jumbo()
636 return phy_set_bits(phydev, MII_BCM54XX_ECR, MII_BCM54XX_ECR_FIFOE); in bcm_phy_enable_jumbo()
640 static int __bcm_phy_enable_rdb_access(struct phy_device *phydev) in __bcm_phy_enable_rdb_access() argument
642 return __bcm_phy_write_exp(phydev, BCM54XX_EXP_REG7E, 0); in __bcm_phy_enable_rdb_access()
645 static int __bcm_phy_enable_legacy_access(struct phy_device *phydev) in __bcm_phy_enable_legacy_access() argument
647 return __bcm_phy_write_rdb(phydev, BCM54XX_RDB_REG0087, in __bcm_phy_enable_legacy_access()
651 static int _bcm_phy_cable_test_start(struct phy_device *phydev, bool is_rdb) in _bcm_phy_cable_test_start() argument
659 phy_write(phydev, MII_BMCR, BMCR_ANENABLE); in _bcm_phy_cable_test_start()
660 phy_write(phydev, MII_ADVERTISE, ADVERTISE_CSMA); in _bcm_phy_cable_test_start()
661 phy_write(phydev, MII_CTRL1000, 0); in _bcm_phy_cable_test_start()
663 phy_lock_mdio_bus(phydev); in _bcm_phy_cable_test_start()
665 ret = __bcm_phy_enable_legacy_access(phydev); in _bcm_phy_cable_test_start()
675 ret = __bcm_phy_modify_exp(phydev, BCM54XX_EXP_ECD_CTRL, mask, set); in _bcm_phy_cable_test_start()
680 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret; in _bcm_phy_cable_test_start()
682 phy_unlock_mdio_bus(phydev); in _bcm_phy_cable_test_start()
716 static int bcm_phy_report_length(struct phy_device *phydev, int pair) in bcm_phy_report_length() argument
720 val = __bcm_phy_read_exp(phydev, in bcm_phy_report_length()
728 ethnl_cable_test_fault_length(phydev, pair, val); in bcm_phy_report_length()
733 static int _bcm_phy_cable_test_get_status(struct phy_device *phydev, in _bcm_phy_cable_test_get_status() argument
740 phy_lock_mdio_bus(phydev); in _bcm_phy_cable_test_get_status()
743 ret = __bcm_phy_enable_legacy_access(phydev); in _bcm_phy_cable_test_get_status()
748 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_CTRL); in _bcm_phy_cable_test_get_status()
757 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_FAULT_TYPE); in _bcm_phy_cable_test_get_status()
766 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_A, in _bcm_phy_cable_test_get_status()
768 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_B, in _bcm_phy_cable_test_get_status()
770 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_C, in _bcm_phy_cable_test_get_status()
772 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_D, in _bcm_phy_cable_test_get_status()
776 bcm_phy_report_length(phydev, 0); in _bcm_phy_cable_test_get_status()
778 bcm_phy_report_length(phydev, 1); in _bcm_phy_cable_test_get_status()
780 bcm_phy_report_length(phydev, 2); in _bcm_phy_cable_test_get_status()
782 bcm_phy_report_length(phydev, 3); in _bcm_phy_cable_test_get_status()
789 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret; in _bcm_phy_cable_test_get_status()
791 phy_unlock_mdio_bus(phydev); in _bcm_phy_cable_test_get_status()
796 static int bcm_setup_lre_forced(struct phy_device *phydev) in bcm_setup_lre_forced() argument
800 phydev->pause = 0; in bcm_setup_lre_forced()
801 phydev->asym_pause = 0; in bcm_setup_lre_forced()
803 if (phydev->speed == SPEED_100) in bcm_setup_lre_forced()
806 if (phydev->duplex != DUPLEX_FULL) in bcm_setup_lre_forced()
809 return phy_modify(phydev, MII_BCM54XX_LRECR, LRECR_SPEED100, ctl); in bcm_setup_lre_forced()
839 int bcm_phy_cable_test_start(struct phy_device *phydev) in bcm_phy_cable_test_start() argument
841 return _bcm_phy_cable_test_start(phydev, false); in bcm_phy_cable_test_start()
845 int bcm_phy_cable_test_get_status(struct phy_device *phydev, bool *finished) in bcm_phy_cable_test_get_status() argument
847 return _bcm_phy_cable_test_get_status(phydev, finished, false); in bcm_phy_cable_test_get_status()
855 int bcm_phy_cable_test_start_rdb(struct phy_device *phydev) in bcm_phy_cable_test_start_rdb() argument
857 return _bcm_phy_cable_test_start(phydev, true); in bcm_phy_cable_test_start_rdb()
861 int bcm_phy_cable_test_get_status_rdb(struct phy_device *phydev, in bcm_phy_cable_test_get_status_rdb() argument
864 return _bcm_phy_cable_test_get_status(phydev, finished, true); in bcm_phy_cable_test_get_status_rdb()
874 int bcm_phy_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in bcm_phy_set_wol() argument
876 struct net_device *ndev = phydev->attached_dev; in bcm_phy_set_wol()
894 ret = bcm_phy_read_exp(phydev, BCM54XX_WOL_INT_STATUS); in bcm_phy_set_wol()
898 ret = bcm_phy_read_exp(phydev, BCM54XX_WOL_MAIN_CTL); in bcm_phy_set_wol()
905 if (phy_interrupt_is_valid(phydev)) in bcm_phy_set_wol()
906 disable_irq_wake(phydev->irq); in bcm_phy_set_wol()
909 ret = bcm_phy_write_exp(phydev, BCM54XX_WOL_INT_MASK, in bcm_phy_set_wol()
917 return bcm_phy_write_exp(phydev, BCM54XX_WOL_MAIN_CTL, ctl); in bcm_phy_set_wol()
961 ret = bcm_phy_write_exp(phydev, in bcm_phy_set_wol()
969 ret = bcm_phy_write_exp(phydev, BCM54XX_WOL_MPD_DATA2(2 - i), in bcm_phy_set_wol()
974 ret = bcm_phy_write_exp(phydev, BCM54XX_WOL_MASK(2 - i), in bcm_phy_set_wol()
998 ret = bcm_phy_write_exp(phydev, BCM54XX_WOL_MAIN_CTL, ctl); in bcm_phy_set_wol()
1003 ret = bcm_phy_read_exp(phydev, BCM54XX_TOP_MISC_LED_CTL); in bcm_phy_set_wol()
1008 ret = bcm_phy_write_exp(phydev, BCM54XX_TOP_MISC_LED_CTL, ret); in bcm_phy_set_wol()
1013 ret = bcm_phy_write_exp(phydev, BCM54XX_WOL_INT_MASK, 0); in bcm_phy_set_wol()
1017 if (phy_interrupt_is_valid(phydev)) in bcm_phy_set_wol()
1018 enable_irq_wake(phydev->irq); in bcm_phy_set_wol()
1024 void bcm_phy_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in bcm_phy_get_wol() argument
1026 struct net_device *ndev = phydev->attached_dev; in bcm_phy_get_wol()
1035 ret = bcm_phy_read_exp(phydev, BCM54XX_WOL_MAIN_CTL); in bcm_phy_get_wol()
1045 ret = bcm_phy_read_exp(phydev, in bcm_phy_get_wol()
1084 int bcm_phy_led_brightness_set(struct phy_device *phydev, in bcm_phy_led_brightness_set() argument
1098 ret = bcm_phy_read_shadow(phydev, reg); in bcm_phy_led_brightness_set()
1107 return bcm_phy_write_shadow(phydev, reg, ret); in bcm_phy_led_brightness_set()
1111 int bcm_setup_lre_master_slave(struct phy_device *phydev) in bcm_setup_lre_master_slave() argument
1115 switch (phydev->master_slave_set) { in bcm_setup_lre_master_slave()
1127 phydev_warn(phydev, "Unsupported Master/Slave mode\n"); in bcm_setup_lre_master_slave()
1131 return phy_modify_changed(phydev, MII_BCM54XX_LRECR, LRECR_MASTER, ctl); in bcm_setup_lre_master_slave()
1135 int bcm_config_lre_aneg(struct phy_device *phydev, bool changed) in bcm_config_lre_aneg() argument
1139 if (genphy_c45_an_config_eee_aneg(phydev) > 0) in bcm_config_lre_aneg()
1142 err = bcm_setup_lre_master_slave(phydev); in bcm_config_lre_aneg()
1148 if (phydev->autoneg != AUTONEG_ENABLE) in bcm_config_lre_aneg()
1149 return bcm_setup_lre_forced(phydev); in bcm_config_lre_aneg()
1151 err = bcm_config_lre_advert(phydev); in bcm_config_lre_aneg()
1157 return genphy_check_and_restart_aneg(phydev, changed); in bcm_config_lre_aneg()
1164 * @phydev: target phy_device struct
1172 int bcm_config_lre_advert(struct phy_device *phydev) in bcm_config_lre_advert() argument
1174 u32 adv = bcm_linkmode_adv_to_lre_adv_t(phydev->advertising); in bcm_config_lre_advert()
1177 return phy_modify_changed(phydev, MII_BCM54XX_LREANAA, in bcm_config_lre_advert()