Lines Matching refs:phydev
197 static int marvell_read_page(struct phy_device *phydev) in marvell_read_page() argument
199 return __phy_read(phydev, MII_MARVELL_PHY_PAGE); in marvell_read_page()
202 static int marvell_write_page(struct phy_device *phydev, int page) in marvell_write_page() argument
204 return __phy_write(phydev, MII_MARVELL_PHY_PAGE, page); in marvell_write_page()
207 static int marvell_set_page(struct phy_device *phydev, int page) in marvell_set_page() argument
209 return phy_write(phydev, MII_MARVELL_PHY_PAGE, page); in marvell_set_page()
212 static int marvell_ack_interrupt(struct phy_device *phydev) in marvell_ack_interrupt() argument
217 err = phy_read(phydev, MII_M1011_IEVENT); in marvell_ack_interrupt()
225 static int marvell_config_intr(struct phy_device *phydev) in marvell_config_intr() argument
229 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in marvell_config_intr()
230 err = phy_write(phydev, MII_M1011_IMASK, in marvell_config_intr()
233 err = phy_write(phydev, MII_M1011_IMASK, in marvell_config_intr()
239 static int marvell_set_polarity(struct phy_device *phydev, int polarity) in marvell_set_polarity() argument
246 reg = phy_read(phydev, MII_M1011_PHY_SCR); in marvell_set_polarity()
268 err = phy_write(phydev, MII_M1011_PHY_SCR, val); in marvell_set_polarity()
276 static int marvell_set_downshift(struct phy_device *phydev, bool enable, in marvell_set_downshift() argument
281 reg = phy_read(phydev, MII_M1011_PHY_SCR); in marvell_set_downshift()
290 return phy_write(phydev, MII_M1011_PHY_SCR, reg); in marvell_set_downshift()
293 static int marvell_config_aneg(struct phy_device *phydev) in marvell_config_aneg() argument
298 err = marvell_set_polarity(phydev, phydev->mdix_ctrl); in marvell_config_aneg()
304 err = phy_write(phydev, MII_M1111_PHY_LED_CONTROL, in marvell_config_aneg()
309 err = genphy_config_aneg(phydev); in marvell_config_aneg()
313 if (phydev->autoneg != AUTONEG_ENABLE || changed) { in marvell_config_aneg()
318 err = genphy_soft_reset(phydev); in marvell_config_aneg()
326 static int m88e1101_config_aneg(struct phy_device *phydev) in m88e1101_config_aneg() argument
334 err = genphy_soft_reset(phydev); in m88e1101_config_aneg()
338 err = phy_write(phydev, 0x1d, 0x1f); in m88e1101_config_aneg()
342 err = phy_write(phydev, 0x1e, 0x200c); in m88e1101_config_aneg()
346 err = phy_write(phydev, 0x1d, 0x5); in m88e1101_config_aneg()
350 err = phy_write(phydev, 0x1e, 0); in m88e1101_config_aneg()
354 err = phy_write(phydev, 0x1e, 0x100); in m88e1101_config_aneg()
358 return marvell_config_aneg(phydev); in m88e1101_config_aneg()
375 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
380 if (!phydev->mdio.dev.of_node) in marvell_of_reg_init()
383 paddr = of_get_property(phydev->mdio.dev.of_node, in marvell_of_reg_init()
388 saved_page = phy_save_page(phydev); in marvell_of_reg_init()
403 ret = marvell_write_page(phydev, page); in marvell_of_reg_init()
410 val = __phy_read(phydev, reg); in marvell_of_reg_init()
419 ret = __phy_write(phydev, reg, val); in marvell_of_reg_init()
424 return phy_restore_page(phydev, saved_page, ret); in marvell_of_reg_init()
427 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
433 static int m88e1121_config_aneg_rgmii_delays(struct phy_device *phydev) in m88e1121_config_aneg_rgmii_delays() argument
437 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) in m88e1121_config_aneg_rgmii_delays()
440 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) in m88e1121_config_aneg_rgmii_delays()
442 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) in m88e1121_config_aneg_rgmii_delays()
447 return phy_modify_paged(phydev, MII_MARVELL_MSCR_PAGE, in m88e1121_config_aneg_rgmii_delays()
452 static int m88e1121_config_aneg(struct phy_device *phydev) in m88e1121_config_aneg() argument
457 if (phy_interface_is_rgmii(phydev)) { in m88e1121_config_aneg()
458 err = m88e1121_config_aneg_rgmii_delays(phydev); in m88e1121_config_aneg()
463 err = marvell_set_polarity(phydev, phydev->mdix_ctrl); in m88e1121_config_aneg()
469 err = genphy_config_aneg(phydev); in m88e1121_config_aneg()
473 if (phydev->autoneg != AUTONEG_ENABLE || changed) { in m88e1121_config_aneg()
477 err = genphy_soft_reset(phydev); in m88e1121_config_aneg()
485 static int m88e1318_config_aneg(struct phy_device *phydev) in m88e1318_config_aneg() argument
489 err = phy_modify_paged(phydev, MII_MARVELL_MSCR_PAGE, in m88e1318_config_aneg()
495 return m88e1121_config_aneg(phydev); in m88e1318_config_aneg()
534 static int marvell_config_aneg_fiber(struct phy_device *phydev) in marvell_config_aneg_fiber() argument
540 if (phydev->autoneg != AUTONEG_ENABLE) in marvell_config_aneg_fiber()
541 return genphy_setup_forced(phydev); in marvell_config_aneg_fiber()
544 linkmode_and(phydev->advertising, phydev->advertising, in marvell_config_aneg_fiber()
545 phydev->supported); in marvell_config_aneg_fiber()
548 adv = phy_read(phydev, MII_ADVERTISE); in marvell_config_aneg_fiber()
555 adv |= linkmode_adv_to_fiber_adv_t(phydev->advertising); in marvell_config_aneg_fiber()
558 err = phy_write(phydev, MII_ADVERTISE, adv); in marvell_config_aneg_fiber()
569 int ctl = phy_read(phydev, MII_BMCR); in marvell_config_aneg_fiber()
582 changed = genphy_restart_aneg(phydev); in marvell_config_aneg_fiber()
587 static int m88e1510_config_aneg(struct phy_device *phydev) in m88e1510_config_aneg() argument
591 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1510_config_aneg()
596 err = m88e1318_config_aneg(phydev); in m88e1510_config_aneg()
601 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) in m88e1510_config_aneg()
605 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); in m88e1510_config_aneg()
609 err = marvell_config_aneg_fiber(phydev); in m88e1510_config_aneg()
613 return marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1510_config_aneg()
616 marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1510_config_aneg()
620 static void marvell_config_led(struct phy_device *phydev) in marvell_config_led() argument
625 switch (MARVELL_PHY_FAMILY_ID(phydev->phy_id)) { in marvell_config_led()
637 if (phydev->dev_flags & MARVELL_PHY_LED0_LINK_LED1_ACTIVE) in marvell_config_led()
646 err = phy_write_paged(phydev, MII_MARVELL_LED_PAGE, MII_PHY_LED_CTRL, in marvell_config_led()
649 phydev_warn(phydev, "Fail to config marvell phy LED.\n"); in marvell_config_led()
652 static int marvell_config_init(struct phy_device *phydev) in marvell_config_init() argument
655 marvell_config_led(phydev); in marvell_config_init()
658 return marvell_of_reg_init(phydev); in marvell_config_init()
661 static int m88e1116r_config_init(struct phy_device *phydev) in m88e1116r_config_init() argument
665 err = genphy_soft_reset(phydev); in m88e1116r_config_init()
671 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1116r_config_init()
675 err = marvell_set_polarity(phydev, phydev->mdix_ctrl); in m88e1116r_config_init()
679 err = marvell_set_downshift(phydev, true, 8); in m88e1116r_config_init()
683 if (phy_interface_is_rgmii(phydev)) { in m88e1116r_config_init()
684 err = m88e1121_config_aneg_rgmii_delays(phydev); in m88e1116r_config_init()
689 err = genphy_soft_reset(phydev); in m88e1116r_config_init()
693 return marvell_config_init(phydev); in m88e1116r_config_init()
696 static int m88e3016_config_init(struct phy_device *phydev) in m88e3016_config_init() argument
701 ret = phy_modify(phydev, MII_88E3016_PHY_SPEC_CTRL, in m88e3016_config_init()
707 return marvell_config_init(phydev); in m88e3016_config_init()
710 static int m88e1111_config_init_hwcfg_mode(struct phy_device *phydev, in m88e1111_config_init_hwcfg_mode() argument
717 return phy_modify(phydev, MII_M1111_PHY_EXT_SR, in m88e1111_config_init_hwcfg_mode()
724 static int m88e1111_config_init_rgmii_delays(struct phy_device *phydev) in m88e1111_config_init_rgmii_delays() argument
728 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1111_config_init_rgmii_delays()
730 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) { in m88e1111_config_init_rgmii_delays()
732 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) { in m88e1111_config_init_rgmii_delays()
738 return phy_modify(phydev, MII_M1111_PHY_EXT_CR, in m88e1111_config_init_rgmii_delays()
743 static int m88e1111_config_init_rgmii(struct phy_device *phydev) in m88e1111_config_init_rgmii() argument
748 err = m88e1111_config_init_rgmii_delays(phydev); in m88e1111_config_init_rgmii()
752 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init_rgmii()
763 return phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init_rgmii()
766 static int m88e1111_config_init_sgmii(struct phy_device *phydev) in m88e1111_config_init_sgmii() argument
771 phydev, in m88e1111_config_init_sgmii()
778 return marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1111_config_init_sgmii()
781 static int m88e1111_config_init_rtbi(struct phy_device *phydev) in m88e1111_config_init_rtbi() argument
785 err = m88e1111_config_init_rgmii_delays(phydev); in m88e1111_config_init_rtbi()
790 phydev, in m88e1111_config_init_rtbi()
797 err = genphy_soft_reset(phydev); in m88e1111_config_init_rtbi()
802 phydev, in m88e1111_config_init_rtbi()
807 static int m88e1111_config_init(struct phy_device *phydev) in m88e1111_config_init() argument
811 if (phy_interface_is_rgmii(phydev)) { in m88e1111_config_init()
812 err = m88e1111_config_init_rgmii(phydev); in m88e1111_config_init()
817 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1111_config_init()
818 err = m88e1111_config_init_sgmii(phydev); in m88e1111_config_init()
823 if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { in m88e1111_config_init()
824 err = m88e1111_config_init_rtbi(phydev); in m88e1111_config_init()
829 err = marvell_of_reg_init(phydev); in m88e1111_config_init()
833 return genphy_soft_reset(phydev); in m88e1111_config_init()
836 static int m88e1318_config_init(struct phy_device *phydev) in m88e1318_config_init() argument
838 if (phy_interrupt_is_valid(phydev)) { in m88e1318_config_init()
840 phydev, MII_MARVELL_LED_PAGE, in m88e1318_config_init()
849 return marvell_config_init(phydev); in m88e1318_config_init()
852 static int m88e1510_config_init(struct phy_device *phydev) in m88e1510_config_init() argument
857 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1510_config_init()
859 err = marvell_set_page(phydev, 18); in m88e1510_config_init()
864 err = phy_modify(phydev, MII_88E1510_GEN_CTRL_REG_1, in m88e1510_config_init()
871 err = phy_modify(phydev, MII_88E1510_GEN_CTRL_REG_1, 0, in m88e1510_config_init()
877 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1510_config_init()
882 return m88e1318_config_init(phydev); in m88e1510_config_init()
885 static int m88e1118_config_aneg(struct phy_device *phydev) in m88e1118_config_aneg() argument
889 err = genphy_soft_reset(phydev); in m88e1118_config_aneg()
893 err = marvell_set_polarity(phydev, phydev->mdix_ctrl); in m88e1118_config_aneg()
897 err = genphy_config_aneg(phydev); in m88e1118_config_aneg()
901 static int m88e1118_config_init(struct phy_device *phydev) in m88e1118_config_init() argument
906 err = marvell_set_page(phydev, MII_MARVELL_MSCR_PAGE); in m88e1118_config_init()
911 err = phy_write(phydev, 0x15, 0x1070); in m88e1118_config_init()
916 err = marvell_set_page(phydev, MII_MARVELL_LED_PAGE); in m88e1118_config_init()
921 if (phydev->dev_flags & MARVELL_PHY_M1118_DNS323_LEDS) in m88e1118_config_init()
922 err = phy_write(phydev, 0x10, 0x1100); in m88e1118_config_init()
924 err = phy_write(phydev, 0x10, 0x021e); in m88e1118_config_init()
928 err = marvell_of_reg_init(phydev); in m88e1118_config_init()
933 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1118_config_init()
937 return genphy_soft_reset(phydev); in m88e1118_config_init()
940 static int m88e1149_config_init(struct phy_device *phydev) in m88e1149_config_init() argument
945 err = marvell_set_page(phydev, MII_MARVELL_MSCR_PAGE); in m88e1149_config_init()
950 err = phy_write(phydev, 0x15, 0x1048); in m88e1149_config_init()
954 err = marvell_of_reg_init(phydev); in m88e1149_config_init()
959 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1149_config_init()
963 return genphy_soft_reset(phydev); in m88e1149_config_init()
966 static int m88e1145_config_init_rgmii(struct phy_device *phydev) in m88e1145_config_init_rgmii() argument
970 err = m88e1111_config_init_rgmii_delays(phydev); in m88e1145_config_init_rgmii()
974 if (phydev->dev_flags & MARVELL_PHY_M1145_FLAGS_RESISTANCE) { in m88e1145_config_init_rgmii()
975 err = phy_write(phydev, 0x1d, 0x0012); in m88e1145_config_init_rgmii()
979 err = phy_modify(phydev, 0x1e, 0x0fc0, in m88e1145_config_init_rgmii()
985 err = phy_write(phydev, 0x1d, 0x3); in m88e1145_config_init_rgmii()
989 err = phy_write(phydev, 0x1e, 0x8000); in m88e1145_config_init_rgmii()
994 static int m88e1145_config_init_sgmii(struct phy_device *phydev) in m88e1145_config_init_sgmii() argument
997 phydev, MII_M1111_HWCFG_MODE_SGMII_NO_CLK, in m88e1145_config_init_sgmii()
1001 static int m88e1145_config_init(struct phy_device *phydev) in m88e1145_config_init() argument
1006 err = phy_write(phydev, 0x1d, 0x001b); in m88e1145_config_init()
1010 err = phy_write(phydev, 0x1e, 0x418f); in m88e1145_config_init()
1014 err = phy_write(phydev, 0x1d, 0x0016); in m88e1145_config_init()
1018 err = phy_write(phydev, 0x1e, 0xa2da); in m88e1145_config_init()
1022 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1145_config_init()
1023 err = m88e1145_config_init_rgmii(phydev); in m88e1145_config_init()
1028 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1145_config_init()
1029 err = m88e1145_config_init_sgmii(phydev); in m88e1145_config_init()
1034 err = marvell_of_reg_init(phydev); in m88e1145_config_init()
1041 static int m88e1540_get_fld(struct phy_device *phydev, u8 *msecs) in m88e1540_get_fld() argument
1045 val = phy_read(phydev, MII_88E1540_COPPER_CTRL3); in m88e1540_get_fld()
1076 static int m88e1540_set_fld(struct phy_device *phydev, const u8 *msecs) in m88e1540_set_fld() argument
1082 return phy_clear_bits(phydev, MII_88E1540_COPPER_CTRL3, in m88e1540_set_fld()
1088 ret = phy_ethtool_get_eee(phydev, &eee); in m88e1540_set_fld()
1090 phydev_warn(phydev, "Fast Link Down detection requires EEE to be disabled!\n"); in m88e1540_set_fld()
1105 ret = phy_modify(phydev, MII_88E1540_COPPER_CTRL3, in m88e1540_set_fld()
1110 return phy_set_bits(phydev, MII_88E1540_COPPER_CTRL3, in m88e1540_set_fld()
1114 static int m88e1540_get_tunable(struct phy_device *phydev, in m88e1540_get_tunable() argument
1119 return m88e1540_get_fld(phydev, data); in m88e1540_get_tunable()
1125 static int m88e1540_set_tunable(struct phy_device *phydev, in m88e1540_set_tunable() argument
1130 return m88e1540_set_fld(phydev, data); in m88e1540_set_tunable()
1140 static int m88e6390_errata(struct phy_device *phydev) in m88e6390_errata() argument
1144 err = phy_write(phydev, MII_BMCR, in m88e6390_errata()
1151 err = phy_write_paged(phydev, 0xf8, 0x08, 0x36); in m88e6390_errata()
1155 return genphy_soft_reset(phydev); in m88e6390_errata()
1158 static int m88e6390_config_aneg(struct phy_device *phydev) in m88e6390_config_aneg() argument
1162 err = m88e6390_errata(phydev); in m88e6390_config_aneg()
1166 return m88e1510_config_aneg(phydev); in m88e6390_config_aneg()
1194 static int marvell_update_link(struct phy_device *phydev, int fiber) in marvell_update_link() argument
1202 status = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_update_link()
1207 phydev->link = 0; in marvell_update_link()
1209 phydev->link = 1; in marvell_update_link()
1211 return genphy_update_link(phydev); in marvell_update_link()
1217 static int marvell_read_status_page_an(struct phy_device *phydev, in marvell_read_status_page_an() argument
1224 status = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_read_status_page_an()
1228 lpa = phy_read(phydev, MII_LPA); in marvell_read_status_page_an()
1232 lpagb = phy_read(phydev, MII_STAT1000); in marvell_read_status_page_an()
1237 phydev->duplex = DUPLEX_FULL; in marvell_read_status_page_an()
1239 phydev->duplex = DUPLEX_HALF; in marvell_read_status_page_an()
1242 phydev->pause = 0; in marvell_read_status_page_an()
1243 phydev->asym_pause = 0; in marvell_read_status_page_an()
1247 phydev->speed = SPEED_1000; in marvell_read_status_page_an()
1251 phydev->speed = SPEED_100; in marvell_read_status_page_an()
1255 phydev->speed = SPEED_10; in marvell_read_status_page_an()
1260 mii_lpa_to_linkmode_lpa_t(phydev->lp_advertising, lpa); in marvell_read_status_page_an()
1261 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, lpagb); in marvell_read_status_page_an()
1263 if (phydev->duplex == DUPLEX_FULL) { in marvell_read_status_page_an()
1264 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; in marvell_read_status_page_an()
1265 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; in marvell_read_status_page_an()
1269 fiber_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa); in marvell_read_status_page_an()
1271 if (phydev->duplex == DUPLEX_FULL) { in marvell_read_status_page_an()
1273 phydev->pause = 0; in marvell_read_status_page_an()
1274 phydev->asym_pause = 0; in marvell_read_status_page_an()
1276 phydev->pause = 1; in marvell_read_status_page_an()
1277 phydev->asym_pause = 1; in marvell_read_status_page_an()
1279 phydev->pause = 1; in marvell_read_status_page_an()
1280 phydev->asym_pause = 0; in marvell_read_status_page_an()
1287 static int marvell_read_status_page_fixed(struct phy_device *phydev) in marvell_read_status_page_fixed() argument
1289 int bmcr = phy_read(phydev, MII_BMCR); in marvell_read_status_page_fixed()
1295 phydev->duplex = DUPLEX_FULL; in marvell_read_status_page_fixed()
1297 phydev->duplex = DUPLEX_HALF; in marvell_read_status_page_fixed()
1300 phydev->speed = SPEED_1000; in marvell_read_status_page_fixed()
1302 phydev->speed = SPEED_100; in marvell_read_status_page_fixed()
1304 phydev->speed = SPEED_10; in marvell_read_status_page_fixed()
1306 phydev->pause = 0; in marvell_read_status_page_fixed()
1307 phydev->asym_pause = 0; in marvell_read_status_page_fixed()
1308 linkmode_zero(phydev->lp_advertising); in marvell_read_status_page_fixed()
1321 static int marvell_read_status_page(struct phy_device *phydev, int page) in marvell_read_status_page() argument
1334 err = marvell_update_link(phydev, fiber); in marvell_read_status_page()
1338 if (phydev->autoneg == AUTONEG_ENABLE) in marvell_read_status_page()
1339 err = marvell_read_status_page_an(phydev, fiber); in marvell_read_status_page()
1341 err = marvell_read_status_page_fixed(phydev); in marvell_read_status_page()
1355 static int marvell_read_status(struct phy_device *phydev) in marvell_read_status() argument
1361 phydev->supported) && in marvell_read_status()
1362 phydev->interface != PHY_INTERFACE_MODE_SGMII) { in marvell_read_status()
1363 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); in marvell_read_status()
1367 err = marvell_read_status_page(phydev, MII_MARVELL_FIBER_PAGE); in marvell_read_status()
1378 if (phydev->link) in marvell_read_status()
1382 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_read_status()
1387 return marvell_read_status_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_read_status()
1390 marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_read_status()
1399 static int marvell_suspend(struct phy_device *phydev) in marvell_suspend() argument
1405 phydev->supported)) { in marvell_suspend()
1406 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); in marvell_suspend()
1411 err = genphy_suspend(phydev); in marvell_suspend()
1416 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_suspend()
1422 return genphy_suspend(phydev); in marvell_suspend()
1425 marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_suspend()
1434 static int marvell_resume(struct phy_device *phydev) in marvell_resume() argument
1440 phydev->supported)) { in marvell_resume()
1441 err = marvell_set_page(phydev, MII_MARVELL_FIBER_PAGE); in marvell_resume()
1446 err = genphy_resume(phydev); in marvell_resume()
1451 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_resume()
1457 return genphy_resume(phydev); in marvell_resume()
1460 marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE); in marvell_resume()
1464 static int marvell_aneg_done(struct phy_device *phydev) in marvell_aneg_done() argument
1466 int retval = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_aneg_done()
1471 static int m88e1121_did_interrupt(struct phy_device *phydev) in m88e1121_did_interrupt() argument
1475 imask = phy_read(phydev, MII_M1011_IEVENT); in m88e1121_did_interrupt()
1483 static void m88e1318_get_wol(struct phy_device *phydev, in m88e1318_get_wol() argument
1491 oldpage = phy_select_page(phydev, MII_MARVELL_WOL_PAGE); in m88e1318_get_wol()
1495 ret = __phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); in m88e1318_get_wol()
1500 phy_restore_page(phydev, oldpage, ret); in m88e1318_get_wol()
1503 static int m88e1318_set_wol(struct phy_device *phydev, in m88e1318_set_wol() argument
1508 oldpage = phy_save_page(phydev); in m88e1318_set_wol()
1514 err = marvell_write_page(phydev, MII_MARVELL_COPPER_PAGE); in m88e1318_set_wol()
1524 if (!phy_interrupt_is_valid(phydev)) in m88e1318_set_wol()
1525 __phy_read(phydev, MII_M1011_IEVENT); in m88e1318_set_wol()
1528 err = __phy_modify(phydev, MII_88E1318S_PHY_CSIER, 0, in m88e1318_set_wol()
1533 err = marvell_write_page(phydev, MII_MARVELL_LED_PAGE); in m88e1318_set_wol()
1538 err = __phy_modify(phydev, MII_88E1318S_PHY_LED_TCR, in m88e1318_set_wol()
1545 err = marvell_write_page(phydev, MII_MARVELL_WOL_PAGE); in m88e1318_set_wol()
1550 err = __phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD2, in m88e1318_set_wol()
1551 ((phydev->attached_dev->dev_addr[5] << 8) | in m88e1318_set_wol()
1552 phydev->attached_dev->dev_addr[4])); in m88e1318_set_wol()
1555 err = __phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD1, in m88e1318_set_wol()
1556 ((phydev->attached_dev->dev_addr[3] << 8) | in m88e1318_set_wol()
1557 phydev->attached_dev->dev_addr[2])); in m88e1318_set_wol()
1560 err = __phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD0, in m88e1318_set_wol()
1561 ((phydev->attached_dev->dev_addr[1] << 8) | in m88e1318_set_wol()
1562 phydev->attached_dev->dev_addr[0])); in m88e1318_set_wol()
1567 err = __phy_modify(phydev, MII_88E1318S_PHY_WOL_CTRL, 0, in m88e1318_set_wol()
1573 err = marvell_write_page(phydev, MII_MARVELL_WOL_PAGE); in m88e1318_set_wol()
1578 err = __phy_modify(phydev, MII_88E1318S_PHY_WOL_CTRL, in m88e1318_set_wol()
1586 return phy_restore_page(phydev, oldpage, err); in m88e1318_set_wol()
1589 static int marvell_get_sset_count(struct phy_device *phydev) in marvell_get_sset_count() argument
1592 phydev->supported)) in marvell_get_sset_count()
1598 static void marvell_get_strings(struct phy_device *phydev, u8 *data) in marvell_get_strings() argument
1600 int count = marvell_get_sset_count(phydev); in marvell_get_strings()
1609 static u64 marvell_get_stat(struct phy_device *phydev, int i) in marvell_get_stat() argument
1612 struct marvell_priv *priv = phydev->priv; in marvell_get_stat()
1616 val = phy_read_paged(phydev, stat.page, stat.reg); in marvell_get_stat()
1628 static void marvell_get_stats(struct phy_device *phydev, in marvell_get_stats() argument
1631 int count = marvell_get_sset_count(phydev); in marvell_get_stats()
1635 data[i] = marvell_get_stat(phydev, i); in marvell_get_stats()
1639 static int m88e1121_get_temp(struct phy_device *phydev, long *temp) in m88e1121_get_temp() argument
1647 oldpage = phy_select_page(phydev, MII_MARVELL_MISC_TEST_PAGE); in m88e1121_get_temp()
1652 ret = __phy_read(phydev, MII_88E1121_MISC_TEST); in m88e1121_get_temp()
1656 ret = __phy_write(phydev, MII_88E1121_MISC_TEST, in m88e1121_get_temp()
1664 val = __phy_read(phydev, MII_88E1121_MISC_TEST); in m88e1121_get_temp()
1671 ret = __phy_write(phydev, MII_88E1121_MISC_TEST, in m88e1121_get_temp()
1679 return phy_restore_page(phydev, oldpage, ret); in m88e1121_get_temp()
1686 struct phy_device *phydev = dev_get_drvdata(dev); in m88e1121_hwmon_read() local
1691 err = m88e1121_get_temp(phydev, temp); in m88e1121_hwmon_read()
1751 static int m88e1510_get_temp(struct phy_device *phydev, long *temp) in m88e1510_get_temp() argument
1757 ret = phy_read_paged(phydev, MII_MARVELL_MISC_TEST_PAGE, in m88e1510_get_temp()
1767 static int m88e1510_get_temp_critical(struct phy_device *phydev, long *temp) in m88e1510_get_temp_critical() argument
1773 ret = phy_read_paged(phydev, MII_MARVELL_MISC_TEST_PAGE, in m88e1510_get_temp_critical()
1786 static int m88e1510_set_temp_critical(struct phy_device *phydev, long temp) in m88e1510_set_temp_critical() argument
1791 return phy_modify_paged(phydev, MII_MARVELL_MISC_TEST_PAGE, in m88e1510_set_temp_critical()
1797 static int m88e1510_get_temp_alarm(struct phy_device *phydev, long *alarm) in m88e1510_get_temp_alarm() argument
1803 ret = phy_read_paged(phydev, MII_MARVELL_MISC_TEST_PAGE, in m88e1510_get_temp_alarm()
1817 struct phy_device *phydev = dev_get_drvdata(dev); in m88e1510_hwmon_read() local
1822 err = m88e1510_get_temp(phydev, temp); in m88e1510_hwmon_read()
1825 err = m88e1510_get_temp_critical(phydev, temp); in m88e1510_hwmon_read()
1828 err = m88e1510_get_temp_alarm(phydev, temp); in m88e1510_hwmon_read()
1841 struct phy_device *phydev = dev_get_drvdata(dev); in m88e1510_hwmon_write() local
1846 err = m88e1510_set_temp_critical(phydev, temp); in m88e1510_hwmon_write()
1899 static int m88e6390_get_temp(struct phy_device *phydev, long *temp) in m88e6390_get_temp() argument
1908 oldpage = phy_select_page(phydev, MII_MARVELL_MISC_TEST_PAGE); in m88e6390_get_temp()
1913 ret = __phy_read(phydev, MII_88E6390_MISC_TEST); in m88e6390_get_temp()
1921 ret = __phy_write(phydev, MII_88E6390_MISC_TEST, ret); in m88e6390_get_temp()
1932 ret = __phy_read(phydev, MII_88E6390_TEMP_SENSOR); in m88e6390_get_temp()
1942 ret = __phy_read(phydev, MII_88E6390_MISC_TEST); in m88e6390_get_temp()
1949 ret = __phy_write(phydev, MII_88E6390_MISC_TEST, ret); in m88e6390_get_temp()
1952 phy_restore_page(phydev, oldpage, ret); in m88e6390_get_temp()
1961 struct phy_device *phydev = dev_get_drvdata(dev); in m88e6390_hwmon_read() local
1966 err = m88e6390_get_temp(phydev, temp); in m88e6390_hwmon_read()
2016 static int marvell_hwmon_name(struct phy_device *phydev) in marvell_hwmon_name() argument
2018 struct marvell_priv *priv = phydev->priv; in marvell_hwmon_name()
2019 struct device *dev = &phydev->mdio.dev; in marvell_hwmon_name()
2036 static int marvell_hwmon_probe(struct phy_device *phydev, in marvell_hwmon_probe() argument
2039 struct marvell_priv *priv = phydev->priv; in marvell_hwmon_probe()
2040 struct device *dev = &phydev->mdio.dev; in marvell_hwmon_probe()
2043 err = marvell_hwmon_name(phydev); in marvell_hwmon_probe()
2048 dev, priv->hwmon_name, phydev, chip, NULL); in marvell_hwmon_probe()
2053 static int m88e1121_hwmon_probe(struct phy_device *phydev) in m88e1121_hwmon_probe() argument
2055 return marvell_hwmon_probe(phydev, &m88e1121_hwmon_chip_info); in m88e1121_hwmon_probe()
2058 static int m88e1510_hwmon_probe(struct phy_device *phydev) in m88e1510_hwmon_probe() argument
2060 return marvell_hwmon_probe(phydev, &m88e1510_hwmon_chip_info); in m88e1510_hwmon_probe()
2063 static int m88e6390_hwmon_probe(struct phy_device *phydev) in m88e6390_hwmon_probe() argument
2065 return marvell_hwmon_probe(phydev, &m88e6390_hwmon_chip_info); in m88e6390_hwmon_probe()
2068 static int m88e1121_hwmon_probe(struct phy_device *phydev) in m88e1121_hwmon_probe() argument
2073 static int m88e1510_hwmon_probe(struct phy_device *phydev) in m88e1510_hwmon_probe() argument
2078 static int m88e6390_hwmon_probe(struct phy_device *phydev) in m88e6390_hwmon_probe() argument
2084 static int marvell_probe(struct phy_device *phydev) in marvell_probe() argument
2088 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); in marvell_probe()
2092 phydev->priv = priv; in marvell_probe()
2097 static int m88e1121_probe(struct phy_device *phydev) in m88e1121_probe() argument
2101 err = marvell_probe(phydev); in m88e1121_probe()
2105 return m88e1121_hwmon_probe(phydev); in m88e1121_probe()
2108 static int m88e1510_probe(struct phy_device *phydev) in m88e1510_probe() argument
2112 err = marvell_probe(phydev); in m88e1510_probe()
2116 return m88e1510_hwmon_probe(phydev); in m88e1510_probe()
2119 static int m88e6390_probe(struct phy_device *phydev) in m88e6390_probe() argument
2123 err = marvell_probe(phydev); in m88e6390_probe()
2127 return m88e6390_hwmon_probe(phydev); in m88e6390_probe()