Lines Matching refs:phydev
140 static int marvell_ack_interrupt(struct phy_device *phydev) in marvell_ack_interrupt() argument
145 err = phy_read(phydev, MII_M1011_IEVENT); in marvell_ack_interrupt()
153 static int marvell_config_intr(struct phy_device *phydev) in marvell_config_intr() argument
157 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in marvell_config_intr()
158 err = phy_write(phydev, MII_M1011_IMASK, MII_M1011_IMASK_INIT); in marvell_config_intr()
160 err = phy_write(phydev, MII_M1011_IMASK, MII_M1011_IMASK_CLEAR); in marvell_config_intr()
165 static int marvell_set_polarity(struct phy_device *phydev, int polarity) in marvell_set_polarity() argument
172 reg = phy_read(phydev, MII_M1011_PHY_SCR); in marvell_set_polarity()
194 err = phy_write(phydev, MII_M1011_PHY_SCR, val); in marvell_set_polarity()
202 static int marvell_config_aneg(struct phy_device *phydev) in marvell_config_aneg() argument
209 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in marvell_config_aneg()
214 err = phy_write(phydev, 0x1d, 0x1f); in marvell_config_aneg()
218 err = phy_write(phydev, 0x1e, 0x200c); in marvell_config_aneg()
222 err = phy_write(phydev, 0x1d, 0x5); in marvell_config_aneg()
226 err = phy_write(phydev, 0x1e, 0); in marvell_config_aneg()
230 err = phy_write(phydev, 0x1e, 0x100); in marvell_config_aneg()
234 err = marvell_set_polarity(phydev, phydev->mdix); in marvell_config_aneg()
238 err = phy_write(phydev, MII_M1111_PHY_LED_CONTROL, in marvell_config_aneg()
243 err = genphy_config_aneg(phydev); in marvell_config_aneg()
247 if (phydev->autoneg != AUTONEG_ENABLE) { in marvell_config_aneg()
255 bmcr = phy_read(phydev, MII_BMCR); in marvell_config_aneg()
259 err = phy_write(phydev, MII_BMCR, bmcr | BMCR_RESET); in marvell_config_aneg()
282 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
287 if (!phydev->dev.of_node) in marvell_of_reg_init()
290 paddr = of_get_property(phydev->dev.of_node, "marvell,reg-init", &len); in marvell_of_reg_init()
294 saved_page = phy_read(phydev, MII_MARVELL_PHY_PAGE); in marvell_of_reg_init()
312 ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, reg_page); in marvell_of_reg_init()
319 val = phy_read(phydev, reg); in marvell_of_reg_init()
328 ret = phy_write(phydev, reg, val); in marvell_of_reg_init()
335 i = phy_write(phydev, MII_MARVELL_PHY_PAGE, saved_page); in marvell_of_reg_init()
342 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
348 static int m88e1121_config_aneg(struct phy_device *phydev) in m88e1121_config_aneg() argument
352 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1121_config_aneg()
354 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1121_config_aneg()
359 if (phy_interface_is_rgmii(phydev)) { in m88e1121_config_aneg()
361 mscr = phy_read(phydev, MII_88E1121_PHY_MSCR_REG) & in m88e1121_config_aneg()
364 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) in m88e1121_config_aneg()
367 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) in m88e1121_config_aneg()
369 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) in m88e1121_config_aneg()
372 err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr); in m88e1121_config_aneg()
377 phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1121_config_aneg()
379 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1121_config_aneg()
383 err = phy_write(phydev, MII_M1011_PHY_SCR, in m88e1121_config_aneg()
388 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1121_config_aneg()
390 phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_88E1121_PHY_LED_PAGE); in m88e1121_config_aneg()
391 phy_write(phydev, MII_88E1121_PHY_LED_CTRL, MII_88E1121_PHY_LED_DEF); in m88e1121_config_aneg()
392 phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1121_config_aneg()
394 err = genphy_config_aneg(phydev); in m88e1121_config_aneg()
399 static int m88e1318_config_aneg(struct phy_device *phydev) in m88e1318_config_aneg() argument
403 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1318_config_aneg()
405 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_config_aneg()
410 mscr = phy_read(phydev, MII_88E1318S_PHY_MSCR1_REG); in m88e1318_config_aneg()
413 err = phy_write(phydev, MII_88E1318S_PHY_MSCR1_REG, mscr); in m88e1318_config_aneg()
417 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1318_config_aneg()
421 return m88e1121_config_aneg(phydev); in m88e1318_config_aneg()
424 static int m88e1510_config_aneg(struct phy_device *phydev) in m88e1510_config_aneg() argument
428 err = m88e1318_config_aneg(phydev); in m88e1510_config_aneg()
432 return marvell_of_reg_init(phydev); in m88e1510_config_aneg()
435 static int m88e1116r_config_init(struct phy_device *phydev) in m88e1116r_config_init() argument
440 temp = phy_read(phydev, MII_BMCR); in m88e1116r_config_init()
442 err = phy_write(phydev, MII_BMCR, temp); in m88e1116r_config_init()
448 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0); in m88e1116r_config_init()
452 temp = phy_read(phydev, MII_M1011_PHY_SCR); in m88e1116r_config_init()
456 err = phy_write(phydev, MII_M1011_PHY_SCR, temp); in m88e1116r_config_init()
460 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 2); in m88e1116r_config_init()
463 temp = phy_read(phydev, MII_M1116R_CONTROL_REG_MAC); in m88e1116r_config_init()
466 err = phy_write(phydev, MII_M1116R_CONTROL_REG_MAC, temp); in m88e1116r_config_init()
469 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0); in m88e1116r_config_init()
473 temp = phy_read(phydev, MII_BMCR); in m88e1116r_config_init()
475 err = phy_write(phydev, MII_BMCR, temp); in m88e1116r_config_init()
484 static int m88e3016_config_init(struct phy_device *phydev) in m88e3016_config_init() argument
489 reg = phy_read(phydev, MII_88E3016_PHY_SPEC_CTRL); in m88e3016_config_init()
496 reg = phy_write(phydev, MII_88E3016_PHY_SPEC_CTRL, reg); in m88e3016_config_init()
503 static int m88e1111_config_init(struct phy_device *phydev) in m88e1111_config_init() argument
508 if (phy_interface_is_rgmii(phydev)) { in m88e1111_config_init()
510 temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); in m88e1111_config_init()
514 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1111_config_init()
516 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) { in m88e1111_config_init()
519 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) { in m88e1111_config_init()
524 err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); in m88e1111_config_init()
528 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
539 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
544 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1111_config_init()
545 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
553 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
558 err = phy_read(phydev, MII_M1145_PHY_EXT_ADDR_PAGE); in m88e1111_config_init()
562 err = phy_write(phydev, MII_M1145_PHY_EXT_ADDR_PAGE, in m88e1111_config_init()
568 if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { in m88e1111_config_init()
569 temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); in m88e1111_config_init()
573 err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); in m88e1111_config_init()
577 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
582 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
587 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1111_config_init()
591 temp = phy_read(phydev, MII_BMCR); in m88e1111_config_init()
594 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
599 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
604 err = marvell_of_reg_init(phydev); in m88e1111_config_init()
608 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1111_config_init()
611 static int m88e1118_config_aneg(struct phy_device *phydev) in m88e1118_config_aneg() argument
615 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1118_config_aneg()
619 err = phy_write(phydev, MII_M1011_PHY_SCR, in m88e1118_config_aneg()
624 err = genphy_config_aneg(phydev); in m88e1118_config_aneg()
628 static int m88e1118_config_init(struct phy_device *phydev) in m88e1118_config_init() argument
633 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002); in m88e1118_config_init()
638 err = phy_write(phydev, 0x15, 0x1070); in m88e1118_config_init()
643 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0003); in m88e1118_config_init()
648 if (phydev->dev_flags & MARVELL_PHY_M1118_DNS323_LEDS) in m88e1118_config_init()
649 err = phy_write(phydev, 0x10, 0x1100); in m88e1118_config_init()
651 err = phy_write(phydev, 0x10, 0x021e); in m88e1118_config_init()
655 err = marvell_of_reg_init(phydev); in m88e1118_config_init()
660 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0); in m88e1118_config_init()
664 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1118_config_init()
667 static int m88e1149_config_init(struct phy_device *phydev) in m88e1149_config_init() argument
672 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002); in m88e1149_config_init()
677 err = phy_write(phydev, 0x15, 0x1048); in m88e1149_config_init()
681 err = marvell_of_reg_init(phydev); in m88e1149_config_init()
686 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0); in m88e1149_config_init()
690 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1149_config_init()
693 static int m88e1145_config_init(struct phy_device *phydev) in m88e1145_config_init() argument
699 err = phy_write(phydev, 0x1d, 0x001b); in m88e1145_config_init()
703 err = phy_write(phydev, 0x1e, 0x418f); in m88e1145_config_init()
707 err = phy_write(phydev, 0x1d, 0x0016); in m88e1145_config_init()
711 err = phy_write(phydev, 0x1e, 0xa2da); in m88e1145_config_init()
715 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1145_config_init()
716 int temp = phy_read(phydev, MII_M1145_PHY_EXT_CR); in m88e1145_config_init()
722 err = phy_write(phydev, MII_M1145_PHY_EXT_CR, temp); in m88e1145_config_init()
726 if (phydev->dev_flags & MARVELL_PHY_M1145_FLAGS_RESISTANCE) { in m88e1145_config_init()
727 err = phy_write(phydev, 0x1d, 0x0012); in m88e1145_config_init()
731 temp = phy_read(phydev, 0x1e); in m88e1145_config_init()
739 err = phy_write(phydev, 0x1e, temp); in m88e1145_config_init()
743 err = phy_write(phydev, 0x1d, 0x3); in m88e1145_config_init()
747 err = phy_write(phydev, 0x1e, 0x8000); in m88e1145_config_init()
753 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1145_config_init()
754 temp = phy_read(phydev, MII_M1145_PHY_EXT_SR); in m88e1145_config_init()
762 err = phy_write(phydev, MII_M1145_PHY_EXT_SR, temp); in m88e1145_config_init()
767 err = marvell_of_reg_init(phydev); in m88e1145_config_init()
783 static int marvell_read_status(struct phy_device *phydev) in marvell_read_status() argument
793 err = genphy_update_link(phydev); in marvell_read_status()
797 if (AUTONEG_ENABLE == phydev->autoneg) { in marvell_read_status()
798 status = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_read_status()
802 lpa = phy_read(phydev, MII_LPA); in marvell_read_status()
806 lpagb = phy_read(phydev, MII_STAT1000); in marvell_read_status()
810 adv = phy_read(phydev, MII_ADVERTISE); in marvell_read_status()
814 phydev->lp_advertising = mii_stat1000_to_ethtool_lpa_t(lpagb) | in marvell_read_status()
820 phydev->duplex = DUPLEX_FULL; in marvell_read_status()
822 phydev->duplex = DUPLEX_HALF; in marvell_read_status()
825 phydev->pause = phydev->asym_pause = 0; in marvell_read_status()
829 phydev->speed = SPEED_1000; in marvell_read_status()
833 phydev->speed = SPEED_100; in marvell_read_status()
837 phydev->speed = SPEED_10; in marvell_read_status()
841 if (phydev->duplex == DUPLEX_FULL) { in marvell_read_status()
842 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; in marvell_read_status()
843 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; in marvell_read_status()
846 int bmcr = phy_read(phydev, MII_BMCR); in marvell_read_status()
852 phydev->duplex = DUPLEX_FULL; in marvell_read_status()
854 phydev->duplex = DUPLEX_HALF; in marvell_read_status()
857 phydev->speed = SPEED_1000; in marvell_read_status()
859 phydev->speed = SPEED_100; in marvell_read_status()
861 phydev->speed = SPEED_10; in marvell_read_status()
863 phydev->pause = phydev->asym_pause = 0; in marvell_read_status()
864 phydev->lp_advertising = 0; in marvell_read_status()
870 static int marvell_aneg_done(struct phy_device *phydev) in marvell_aneg_done() argument
872 int retval = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_aneg_done()
876 static int m88e1121_did_interrupt(struct phy_device *phydev) in m88e1121_did_interrupt() argument
880 imask = phy_read(phydev, MII_M1011_IEVENT); in m88e1121_did_interrupt()
888 static void m88e1318_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in m88e1318_get_wol() argument
893 if (phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_get_wol()
897 if (phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL) & in m88e1318_get_wol()
901 if (phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x00) < 0) in m88e1318_get_wol()
905 static int m88e1318_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in m88e1318_set_wol() argument
909 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1318_set_wol()
913 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x00); in m88e1318_set_wol()
918 temp = phy_read(phydev, MII_88E1318S_PHY_CSIER); in m88e1318_set_wol()
920 err = phy_write(phydev, MII_88E1318S_PHY_CSIER, temp); in m88e1318_set_wol()
924 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
930 temp = phy_read(phydev, MII_88E1318S_PHY_LED_TCR); in m88e1318_set_wol()
934 err = phy_write(phydev, MII_88E1318S_PHY_LED_TCR, temp); in m88e1318_set_wol()
938 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
944 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD2, in m88e1318_set_wol()
945 ((phydev->attached_dev->dev_addr[5] << 8) | in m88e1318_set_wol()
946 phydev->attached_dev->dev_addr[4])); in m88e1318_set_wol()
949 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD1, in m88e1318_set_wol()
950 ((phydev->attached_dev->dev_addr[3] << 8) | in m88e1318_set_wol()
951 phydev->attached_dev->dev_addr[2])); in m88e1318_set_wol()
954 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD0, in m88e1318_set_wol()
955 ((phydev->attached_dev->dev_addr[1] << 8) | in m88e1318_set_wol()
956 phydev->attached_dev->dev_addr[0])); in m88e1318_set_wol()
961 temp = phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); in m88e1318_set_wol()
964 err = phy_write(phydev, MII_88E1318S_PHY_WOL_CTRL, temp); in m88e1318_set_wol()
968 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
974 temp = phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); in m88e1318_set_wol()
977 err = phy_write(phydev, MII_88E1318S_PHY_WOL_CTRL, temp); in m88e1318_set_wol()
982 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1318_set_wol()