Lines Matching full:phydev
19 int __bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val) in __bcm_phy_write_exp() argument
23 rc = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_write_exp()
27 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, val); in __bcm_phy_write_exp()
31 int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val) in bcm_phy_write_exp() argument
35 phy_lock_mdio_bus(phydev); in bcm_phy_write_exp()
36 rc = __bcm_phy_write_exp(phydev, reg, val); in bcm_phy_write_exp()
37 phy_unlock_mdio_bus(phydev); in bcm_phy_write_exp()
43 int __bcm_phy_read_exp(struct phy_device *phydev, u16 reg) in __bcm_phy_read_exp() argument
47 val = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_read_exp()
51 val = __phy_read(phydev, MII_BCM54XX_EXP_DATA); in __bcm_phy_read_exp()
54 __phy_write(phydev, MII_BCM54XX_EXP_SEL, 0); in __bcm_phy_read_exp()
60 int bcm_phy_read_exp(struct phy_device *phydev, u16 reg) in bcm_phy_read_exp() argument
64 phy_lock_mdio_bus(phydev); in bcm_phy_read_exp()
65 rc = __bcm_phy_read_exp(phydev, reg); in bcm_phy_read_exp()
66 phy_unlock_mdio_bus(phydev); in bcm_phy_read_exp()
72 int __bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set) in __bcm_phy_modify_exp() argument
76 ret = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg); in __bcm_phy_modify_exp()
80 ret = __phy_read(phydev, MII_BCM54XX_EXP_DATA); in __bcm_phy_modify_exp()
88 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, new); in __bcm_phy_modify_exp()
92 int bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set) in bcm_phy_modify_exp() argument
96 phy_lock_mdio_bus(phydev); in bcm_phy_modify_exp()
97 ret = __bcm_phy_modify_exp(phydev, reg, mask, set); in bcm_phy_modify_exp()
98 phy_unlock_mdio_bus(phydev); in bcm_phy_modify_exp()
104 int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum) in bcm54xx_auxctl_read() argument
109 phy_write(phydev, MII_BCM54XX_AUX_CTL, MII_BCM54XX_AUXCTL_SHDWSEL_MASK | in bcm54xx_auxctl_read()
111 return phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm54xx_auxctl_read()
115 int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val) in bcm54xx_auxctl_write() argument
117 return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val); in bcm54xx_auxctl_write()
121 int bcm_phy_write_misc(struct phy_device *phydev, in bcm_phy_write_misc() argument
127 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, in bcm_phy_write_misc()
132 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm_phy_write_misc()
134 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp); in bcm_phy_write_misc()
139 rc = bcm_phy_write_exp(phydev, tmp, val); in bcm_phy_write_misc()
145 int bcm_phy_read_misc(struct phy_device *phydev, in bcm_phy_read_misc() argument
151 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, in bcm_phy_read_misc()
156 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL); in bcm_phy_read_misc()
158 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp); in bcm_phy_read_misc()
163 rc = bcm_phy_read_exp(phydev, tmp); in bcm_phy_read_misc()
169 int bcm_phy_ack_intr(struct phy_device *phydev) in bcm_phy_ack_intr() argument
174 reg = phy_read(phydev, MII_BCM54XX_ISR); in bcm_phy_ack_intr()
182 int bcm_phy_config_intr(struct phy_device *phydev) in bcm_phy_config_intr() argument
186 reg = phy_read(phydev, MII_BCM54XX_ECR); in bcm_phy_config_intr()
190 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in bcm_phy_config_intr()
195 return phy_write(phydev, MII_BCM54XX_ECR, reg); in bcm_phy_config_intr()
199 int bcm_phy_read_shadow(struct phy_device *phydev, u16 shadow) in bcm_phy_read_shadow() argument
201 phy_write(phydev, MII_BCM54XX_SHD, MII_BCM54XX_SHD_VAL(shadow)); in bcm_phy_read_shadow()
202 return MII_BCM54XX_SHD_DATA(phy_read(phydev, MII_BCM54XX_SHD)); in bcm_phy_read_shadow()
206 int bcm_phy_write_shadow(struct phy_device *phydev, u16 shadow, in bcm_phy_write_shadow() argument
209 return phy_write(phydev, MII_BCM54XX_SHD, in bcm_phy_write_shadow()
216 int __bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb) in __bcm_phy_read_rdb() argument
220 val = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_read_rdb()
224 return __phy_read(phydev, MII_BCM54XX_RDB_DATA); in __bcm_phy_read_rdb()
228 int bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb) in bcm_phy_read_rdb() argument
232 phy_lock_mdio_bus(phydev); in bcm_phy_read_rdb()
233 ret = __bcm_phy_read_rdb(phydev, rdb); in bcm_phy_read_rdb()
234 phy_unlock_mdio_bus(phydev); in bcm_phy_read_rdb()
240 int __bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val) in __bcm_phy_write_rdb() argument
244 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_write_rdb()
248 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, val); in __bcm_phy_write_rdb()
252 int bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val) in bcm_phy_write_rdb() argument
256 phy_lock_mdio_bus(phydev); in bcm_phy_write_rdb()
257 ret = __bcm_phy_write_rdb(phydev, rdb, val); in bcm_phy_write_rdb()
258 phy_unlock_mdio_bus(phydev); in bcm_phy_write_rdb()
264 int __bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set) in __bcm_phy_modify_rdb() argument
268 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb); in __bcm_phy_modify_rdb()
272 ret = __phy_read(phydev, MII_BCM54XX_RDB_DATA); in __bcm_phy_modify_rdb()
280 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, new); in __bcm_phy_modify_rdb()
284 int bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set) in bcm_phy_modify_rdb() argument
288 phy_lock_mdio_bus(phydev); in bcm_phy_modify_rdb()
289 ret = __bcm_phy_modify_rdb(phydev, rdb, mask, set); in bcm_phy_modify_rdb()
290 phy_unlock_mdio_bus(phydev); in bcm_phy_modify_rdb()
296 int bcm_phy_enable_apd(struct phy_device *phydev, bool dll_pwr_down) in bcm_phy_enable_apd() argument
301 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3); in bcm_phy_enable_apd()
306 bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR3, val); in bcm_phy_enable_apd()
309 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_APD); in bcm_phy_enable_apd()
316 if (phydev->autoneg == AUTONEG_ENABLE) in bcm_phy_enable_apd()
325 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_APD, val); in bcm_phy_enable_apd()
329 int bcm_phy_set_eee(struct phy_device *phydev, bool enable) in bcm_phy_set_eee() argument
334 val = phy_read_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL); in bcm_phy_set_eee()
343 phy_write_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL, (u32)val); in bcm_phy_set_eee()
346 val = phy_read_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV); in bcm_phy_set_eee()
355 phy_write_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV, (u32)val); in bcm_phy_set_eee()
361 int bcm_phy_downshift_get(struct phy_device *phydev, u8 *count) in bcm_phy_downshift_get() argument
365 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm_phy_downshift_get()
375 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2); in bcm_phy_downshift_get()
393 int bcm_phy_downshift_set(struct phy_device *phydev, u8 count) in bcm_phy_downshift_set() argument
404 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm_phy_downshift_set()
413 return bcm54xx_auxctl_write(phydev, in bcm_phy_downshift_set()
418 ret = bcm54xx_auxctl_write(phydev, in bcm_phy_downshift_set()
425 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2); in bcm_phy_downshift_set()
443 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR2, val); in bcm_phy_downshift_set()
463 int bcm_phy_get_sset_count(struct phy_device *phydev) in bcm_phy_get_sset_count() argument
469 void bcm_phy_get_strings(struct phy_device *phydev, u8 *data) in bcm_phy_get_strings() argument
482 static u64 bcm_phy_get_stat(struct phy_device *phydev, u64 *shadow, in bcm_phy_get_stat() argument
489 val = phy_read(phydev, stat.reg); in bcm_phy_get_stat()
502 void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow, in bcm_phy_get_stats() argument
508 data[i] = bcm_phy_get_stat(phydev, shadow, i); in bcm_phy_get_stats()
512 void bcm_phy_r_rc_cal_reset(struct phy_device *phydev) in bcm_phy_r_rc_cal_reset() argument
515 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010); in bcm_phy_r_rc_cal_reset()
518 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000); in bcm_phy_r_rc_cal_reset()
522 int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev) in bcm_phy_28nm_a0b0_afe_config_init() argument
527 bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048); in bcm_phy_28nm_a0b0_afe_config_init()
530 bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b); in bcm_phy_28nm_a0b0_afe_config_init()
535 bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20); in bcm_phy_28nm_a0b0_afe_config_init()
538 bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b); in bcm_phy_28nm_a0b0_afe_config_init()
541 phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd); in bcm_phy_28nm_a0b0_afe_config_init()
543 bcm_phy_r_rc_cal_reset(phydev); in bcm_phy_28nm_a0b0_afe_config_init()
546 bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19); in bcm_phy_28nm_a0b0_afe_config_init()
549 bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f); in bcm_phy_28nm_a0b0_afe_config_init()
552 bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0); in bcm_phy_28nm_a0b0_afe_config_init()
555 bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b); in bcm_phy_28nm_a0b0_afe_config_init()
558 bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800); in bcm_phy_28nm_a0b0_afe_config_init()
564 int bcm_phy_enable_jumbo(struct phy_device *phydev) in bcm_phy_enable_jumbo() argument
568 ret = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL); in bcm_phy_enable_jumbo()
573 ret = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL, in bcm_phy_enable_jumbo()
582 return phy_set_bits(phydev, MII_BCM54XX_ECR, MII_BCM54XX_ECR_FIFOE); in bcm_phy_enable_jumbo()
586 static int __bcm_phy_enable_rdb_access(struct phy_device *phydev) in __bcm_phy_enable_rdb_access() argument
588 return __bcm_phy_write_exp(phydev, BCM54XX_EXP_REG7E, 0); in __bcm_phy_enable_rdb_access()
591 static int __bcm_phy_enable_legacy_access(struct phy_device *phydev) in __bcm_phy_enable_legacy_access() argument
593 return __bcm_phy_write_rdb(phydev, BCM54XX_RDB_REG0087, in __bcm_phy_enable_legacy_access()
597 static int _bcm_phy_cable_test_start(struct phy_device *phydev, bool is_rdb) in _bcm_phy_cable_test_start() argument
605 phy_write(phydev, MII_BMCR, BMCR_ANENABLE); in _bcm_phy_cable_test_start()
606 phy_write(phydev, MII_ADVERTISE, ADVERTISE_CSMA); in _bcm_phy_cable_test_start()
607 phy_write(phydev, MII_CTRL1000, 0); in _bcm_phy_cable_test_start()
609 phy_lock_mdio_bus(phydev); in _bcm_phy_cable_test_start()
611 ret = __bcm_phy_enable_legacy_access(phydev); in _bcm_phy_cable_test_start()
621 ret = __bcm_phy_modify_exp(phydev, BCM54XX_EXP_ECD_CTRL, mask, set); in _bcm_phy_cable_test_start()
626 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret; in _bcm_phy_cable_test_start()
628 phy_unlock_mdio_bus(phydev); in _bcm_phy_cable_test_start()
662 static int bcm_phy_report_length(struct phy_device *phydev, int pair) in bcm_phy_report_length() argument
666 val = __bcm_phy_read_exp(phydev, in bcm_phy_report_length()
674 ethnl_cable_test_fault_length(phydev, pair, val); in bcm_phy_report_length()
679 static int _bcm_phy_cable_test_get_status(struct phy_device *phydev, in _bcm_phy_cable_test_get_status() argument
686 phy_lock_mdio_bus(phydev); in _bcm_phy_cable_test_get_status()
689 ret = __bcm_phy_enable_legacy_access(phydev); in _bcm_phy_cable_test_get_status()
694 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_CTRL); in _bcm_phy_cable_test_get_status()
703 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_FAULT_TYPE); in _bcm_phy_cable_test_get_status()
712 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_A, in _bcm_phy_cable_test_get_status()
714 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_B, in _bcm_phy_cable_test_get_status()
716 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_C, in _bcm_phy_cable_test_get_status()
718 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_D, in _bcm_phy_cable_test_get_status()
722 bcm_phy_report_length(phydev, 0); in _bcm_phy_cable_test_get_status()
724 bcm_phy_report_length(phydev, 1); in _bcm_phy_cable_test_get_status()
726 bcm_phy_report_length(phydev, 2); in _bcm_phy_cable_test_get_status()
728 bcm_phy_report_length(phydev, 3); in _bcm_phy_cable_test_get_status()
735 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret; in _bcm_phy_cable_test_get_status()
737 phy_unlock_mdio_bus(phydev); in _bcm_phy_cable_test_get_status()
742 int bcm_phy_cable_test_start(struct phy_device *phydev) in bcm_phy_cable_test_start() argument
744 return _bcm_phy_cable_test_start(phydev, false); in bcm_phy_cable_test_start()
748 int bcm_phy_cable_test_get_status(struct phy_device *phydev, bool *finished) in bcm_phy_cable_test_get_status() argument
750 return _bcm_phy_cable_test_get_status(phydev, finished, false); in bcm_phy_cable_test_get_status()
758 int bcm_phy_cable_test_start_rdb(struct phy_device *phydev) in bcm_phy_cable_test_start_rdb() argument
760 return _bcm_phy_cable_test_start(phydev, true); in bcm_phy_cable_test_start_rdb()
764 int bcm_phy_cable_test_get_status_rdb(struct phy_device *phydev, in bcm_phy_cable_test_get_status_rdb() argument
767 return _bcm_phy_cable_test_get_status(phydev, finished, true); in bcm_phy_cable_test_get_status_rdb()