Lines Matching defs:phydev

19 int __bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val)
23 rc = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg);
27 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, val);
31 int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val)
35 phy_lock_mdio_bus(phydev);
36 rc = __bcm_phy_write_exp(phydev, reg, val);
37 phy_unlock_mdio_bus(phydev);
43 int __bcm_phy_read_exp(struct phy_device *phydev, u16 reg)
47 val = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg);
51 val = __phy_read(phydev, MII_BCM54XX_EXP_DATA);
54 __phy_write(phydev, MII_BCM54XX_EXP_SEL, 0);
60 int bcm_phy_read_exp(struct phy_device *phydev, u16 reg)
64 phy_lock_mdio_bus(phydev);
65 rc = __bcm_phy_read_exp(phydev, reg);
66 phy_unlock_mdio_bus(phydev);
72 int __bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set)
76 ret = __phy_write(phydev, MII_BCM54XX_EXP_SEL, reg);
80 ret = __phy_read(phydev, MII_BCM54XX_EXP_DATA);
88 return __phy_write(phydev, MII_BCM54XX_EXP_DATA, new);
92 int bcm_phy_modify_exp(struct phy_device *phydev, u16 reg, u16 mask, u16 set)
96 phy_lock_mdio_bus(phydev);
97 ret = __bcm_phy_modify_exp(phydev, reg, mask, set);
98 phy_unlock_mdio_bus(phydev);
104 int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum)
109 phy_write(phydev, MII_BCM54XX_AUX_CTL, MII_BCM54XX_AUXCTL_SHDWSEL_MASK |
111 return phy_read(phydev, MII_BCM54XX_AUX_CTL);
115 int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val)
117 return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val);
121 int bcm_phy_write_misc(struct phy_device *phydev,
127 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL,
132 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL);
134 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp);
139 rc = bcm_phy_write_exp(phydev, tmp, val);
145 int bcm_phy_read_misc(struct phy_device *phydev,
151 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL,
156 tmp = phy_read(phydev, MII_BCM54XX_AUX_CTL);
158 rc = phy_write(phydev, MII_BCM54XX_AUX_CTL, tmp);
163 rc = bcm_phy_read_exp(phydev, tmp);
169 int bcm_phy_ack_intr(struct phy_device *phydev)
174 reg = phy_read(phydev, MII_BCM54XX_ISR);
182 int bcm_phy_config_intr(struct phy_device *phydev)
186 reg = phy_read(phydev, MII_BCM54XX_ECR);
190 if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
195 return phy_write(phydev, MII_BCM54XX_ECR, reg);
199 int bcm_phy_read_shadow(struct phy_device *phydev, u16 shadow)
201 phy_write(phydev, MII_BCM54XX_SHD, MII_BCM54XX_SHD_VAL(shadow));
202 return MII_BCM54XX_SHD_DATA(phy_read(phydev, MII_BCM54XX_SHD));
206 int bcm_phy_write_shadow(struct phy_device *phydev, u16 shadow,
209 return phy_write(phydev, MII_BCM54XX_SHD,
216 int __bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb)
220 val = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
224 return __phy_read(phydev, MII_BCM54XX_RDB_DATA);
228 int bcm_phy_read_rdb(struct phy_device *phydev, u16 rdb)
232 phy_lock_mdio_bus(phydev);
233 ret = __bcm_phy_read_rdb(phydev, rdb);
234 phy_unlock_mdio_bus(phydev);
240 int __bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val)
244 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
248 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, val);
252 int bcm_phy_write_rdb(struct phy_device *phydev, u16 rdb, u16 val)
256 phy_lock_mdio_bus(phydev);
257 ret = __bcm_phy_write_rdb(phydev, rdb, val);
258 phy_unlock_mdio_bus(phydev);
264 int __bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set)
268 ret = __phy_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
272 ret = __phy_read(phydev, MII_BCM54XX_RDB_DATA);
280 return __phy_write(phydev, MII_BCM54XX_RDB_DATA, new);
284 int bcm_phy_modify_rdb(struct phy_device *phydev, u16 rdb, u16 mask, u16 set)
288 phy_lock_mdio_bus(phydev);
289 ret = __bcm_phy_modify_rdb(phydev, rdb, mask, set);
290 phy_unlock_mdio_bus(phydev);
296 int bcm_phy_enable_apd(struct phy_device *phydev, bool dll_pwr_down)
301 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
306 bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR3, val);
309 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_APD);
316 if (phydev->autoneg == AUTONEG_ENABLE)
325 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_APD, val);
329 int bcm_phy_set_eee(struct phy_device *phydev, bool enable)
334 val = phy_read_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL);
343 phy_write_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL, (u32)val);
346 val = phy_read_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV);
351 phydev->supported))
354 phydev->supported))
362 phy_write_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV, (u32)val);
368 int bcm_phy_downshift_get(struct phy_device *phydev, u8 *count)
372 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC);
382 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2);
400 int bcm_phy_downshift_set(struct phy_device *phydev, u8 count)
411 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC);
420 return bcm54xx_auxctl_write(phydev,
425 ret = bcm54xx_auxctl_write(phydev,
432 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR2);
450 return bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR2, val);
470 int bcm_phy_get_sset_count(struct phy_device *phydev)
476 void bcm_phy_get_strings(struct phy_device *phydev, u8 *data)
489 static u64 bcm_phy_get_stat(struct phy_device *phydev, u64 *shadow,
496 val = phy_read(phydev, stat.reg);
509 void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow,
515 data[i] = bcm_phy_get_stat(phydev, shadow, i);
519 void bcm_phy_r_rc_cal_reset(struct phy_device *phydev)
522 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010);
525 bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000);
529 int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev)
534 bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048);
537 bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b);
542 bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20);
545 bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b);
548 phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd);
550 bcm_phy_r_rc_cal_reset(phydev);
553 bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19);
556 bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f);
559 bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0);
562 bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b);
565 bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800);
571 int bcm_phy_enable_jumbo(struct phy_device *phydev)
575 ret = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL);
580 ret = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL,
589 return phy_set_bits(phydev, MII_BCM54XX_ECR, MII_BCM54XX_ECR_FIFOE);
593 static int __bcm_phy_enable_rdb_access(struct phy_device *phydev)
595 return __bcm_phy_write_exp(phydev, BCM54XX_EXP_REG7E, 0);
598 static int __bcm_phy_enable_legacy_access(struct phy_device *phydev)
600 return __bcm_phy_write_rdb(phydev, BCM54XX_RDB_REG0087,
604 static int _bcm_phy_cable_test_start(struct phy_device *phydev, bool is_rdb)
612 phy_write(phydev, MII_BMCR, BMCR_ANENABLE);
613 phy_write(phydev, MII_ADVERTISE, ADVERTISE_CSMA);
614 phy_write(phydev, MII_CTRL1000, 0);
616 phy_lock_mdio_bus(phydev);
618 ret = __bcm_phy_enable_legacy_access(phydev);
628 ret = __bcm_phy_modify_exp(phydev, BCM54XX_EXP_ECD_CTRL, mask, set);
633 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret;
635 phy_unlock_mdio_bus(phydev);
669 static int bcm_phy_report_length(struct phy_device *phydev, int pair)
673 val = __bcm_phy_read_exp(phydev,
681 ethnl_cable_test_fault_length(phydev, pair, val);
686 static int _bcm_phy_cable_test_get_status(struct phy_device *phydev,
693 phy_lock_mdio_bus(phydev);
696 ret = __bcm_phy_enable_legacy_access(phydev);
701 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_CTRL);
710 ret = __bcm_phy_read_exp(phydev, BCM54XX_EXP_ECD_FAULT_TYPE);
719 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_A,
721 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_B,
723 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_C,
725 ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_D,
729 bcm_phy_report_length(phydev, 0);
731 bcm_phy_report_length(phydev, 1);
733 bcm_phy_report_length(phydev, 2);
735 bcm_phy_report_length(phydev, 3);
742 ret = __bcm_phy_enable_rdb_access(phydev) ? : ret;
744 phy_unlock_mdio_bus(phydev);
749 int bcm_phy_cable_test_start(struct phy_device *phydev)
751 return _bcm_phy_cable_test_start(phydev, false);
755 int bcm_phy_cable_test_get_status(struct phy_device *phydev, bool *finished)
757 return _bcm_phy_cable_test_get_status(phydev, finished, false);
765 int bcm_phy_cable_test_start_rdb(struct phy_device *phydev)
767 return _bcm_phy_cable_test_start(phydev, true);
771 int bcm_phy_cable_test_get_status_rdb(struct phy_device *phydev,
774 return _bcm_phy_cable_test_get_status(phydev, finished, true);