Lines Matching refs:phydev
137 static int marvell_ack_interrupt(struct phy_device *phydev) in marvell_ack_interrupt() argument
142 err = phy_read(phydev, MII_M1011_IEVENT); in marvell_ack_interrupt()
150 static int marvell_config_intr(struct phy_device *phydev) in marvell_config_intr() argument
154 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in marvell_config_intr()
155 err = phy_write(phydev, MII_M1011_IMASK, MII_M1011_IMASK_INIT); in marvell_config_intr()
157 err = phy_write(phydev, MII_M1011_IMASK, MII_M1011_IMASK_CLEAR); in marvell_config_intr()
162 static int marvell_config_aneg(struct phy_device *phydev) in marvell_config_aneg() argument
169 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in marvell_config_aneg()
174 err = phy_write(phydev, 0x1d, 0x1f); in marvell_config_aneg()
178 err = phy_write(phydev, 0x1e, 0x200c); in marvell_config_aneg()
182 err = phy_write(phydev, 0x1d, 0x5); in marvell_config_aneg()
186 err = phy_write(phydev, 0x1e, 0); in marvell_config_aneg()
190 err = phy_write(phydev, 0x1e, 0x100); in marvell_config_aneg()
194 err = phy_write(phydev, MII_M1011_PHY_SCR, in marvell_config_aneg()
199 err = phy_write(phydev, MII_M1111_PHY_LED_CONTROL, in marvell_config_aneg()
204 err = genphy_config_aneg(phydev); in marvell_config_aneg()
208 if (phydev->autoneg != AUTONEG_ENABLE) { in marvell_config_aneg()
216 bmcr = phy_read(phydev, MII_BMCR); in marvell_config_aneg()
220 err = phy_write(phydev, MII_BMCR, bmcr | BMCR_RESET); in marvell_config_aneg()
243 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
248 if (!phydev->dev.of_node) in marvell_of_reg_init()
251 paddr = of_get_property(phydev->dev.of_node, "marvell,reg-init", &len); in marvell_of_reg_init()
255 saved_page = phy_read(phydev, MII_MARVELL_PHY_PAGE); in marvell_of_reg_init()
273 ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, reg_page); in marvell_of_reg_init()
280 val = phy_read(phydev, reg); in marvell_of_reg_init()
289 ret = phy_write(phydev, reg, val); in marvell_of_reg_init()
296 i = phy_write(phydev, MII_MARVELL_PHY_PAGE, saved_page); in marvell_of_reg_init()
303 static int marvell_of_reg_init(struct phy_device *phydev) in marvell_of_reg_init() argument
309 static int m88e1121_config_aneg(struct phy_device *phydev) in m88e1121_config_aneg() argument
313 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1121_config_aneg()
315 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1121_config_aneg()
320 if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) || in m88e1121_config_aneg()
321 (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) || in m88e1121_config_aneg()
322 (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) || in m88e1121_config_aneg()
323 (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) { in m88e1121_config_aneg()
325 mscr = phy_read(phydev, MII_88E1121_PHY_MSCR_REG) & in m88e1121_config_aneg()
328 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) in m88e1121_config_aneg()
331 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) in m88e1121_config_aneg()
333 else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) in m88e1121_config_aneg()
336 err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr); in m88e1121_config_aneg()
341 phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1121_config_aneg()
343 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1121_config_aneg()
347 err = phy_write(phydev, MII_M1011_PHY_SCR, in m88e1121_config_aneg()
352 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1121_config_aneg()
354 phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_88E1121_PHY_LED_PAGE); in m88e1121_config_aneg()
355 phy_write(phydev, MII_88E1121_PHY_LED_CTRL, MII_88E1121_PHY_LED_DEF); in m88e1121_config_aneg()
356 phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1121_config_aneg()
358 err = genphy_config_aneg(phydev); in m88e1121_config_aneg()
363 static int m88e1318_config_aneg(struct phy_device *phydev) in m88e1318_config_aneg() argument
367 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1318_config_aneg()
369 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_config_aneg()
374 mscr = phy_read(phydev, MII_88E1318S_PHY_MSCR1_REG); in m88e1318_config_aneg()
377 err = phy_write(phydev, MII_88E1318S_PHY_MSCR1_REG, mscr); in m88e1318_config_aneg()
381 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1318_config_aneg()
385 return m88e1121_config_aneg(phydev); in m88e1318_config_aneg()
388 static int m88e1510_config_aneg(struct phy_device *phydev) in m88e1510_config_aneg() argument
392 err = m88e1318_config_aneg(phydev); in m88e1510_config_aneg()
396 return marvell_of_reg_init(phydev); in m88e1510_config_aneg()
399 static int m88e1116r_config_init(struct phy_device *phydev) in m88e1116r_config_init() argument
404 temp = phy_read(phydev, MII_BMCR); in m88e1116r_config_init()
406 err = phy_write(phydev, MII_BMCR, temp); in m88e1116r_config_init()
412 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0); in m88e1116r_config_init()
416 temp = phy_read(phydev, MII_M1011_PHY_SCR); in m88e1116r_config_init()
420 err = phy_write(phydev, MII_M1011_PHY_SCR, temp); in m88e1116r_config_init()
424 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 2); in m88e1116r_config_init()
427 temp = phy_read(phydev, MII_M1116R_CONTROL_REG_MAC); in m88e1116r_config_init()
430 err = phy_write(phydev, MII_M1116R_CONTROL_REG_MAC, temp); in m88e1116r_config_init()
433 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0); in m88e1116r_config_init()
437 temp = phy_read(phydev, MII_BMCR); in m88e1116r_config_init()
439 err = phy_write(phydev, MII_BMCR, temp); in m88e1116r_config_init()
448 static int m88e3016_config_init(struct phy_device *phydev) in m88e3016_config_init() argument
453 reg = phy_read(phydev, MII_88E3016_PHY_SPEC_CTRL); in m88e3016_config_init()
460 reg = phy_write(phydev, MII_88E3016_PHY_SPEC_CTRL, reg); in m88e3016_config_init()
467 static int m88e1111_config_init(struct phy_device *phydev) in m88e1111_config_init() argument
472 if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) || in m88e1111_config_init()
473 (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) || in m88e1111_config_init()
474 (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) || in m88e1111_config_init()
475 (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) { in m88e1111_config_init()
477 temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); in m88e1111_config_init()
481 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1111_config_init()
483 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) { in m88e1111_config_init()
486 } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) { in m88e1111_config_init()
491 err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); in m88e1111_config_init()
495 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
506 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
511 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1111_config_init()
512 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
520 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
525 if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { in m88e1111_config_init()
526 temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); in m88e1111_config_init()
530 err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); in m88e1111_config_init()
534 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 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1111_config_init()
548 temp = phy_read(phydev, MII_BMCR); in m88e1111_config_init()
551 temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); in m88e1111_config_init()
556 err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); in m88e1111_config_init()
561 err = marvell_of_reg_init(phydev); in m88e1111_config_init()
565 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1111_config_init()
568 static int m88e1118_config_aneg(struct phy_device *phydev) in m88e1118_config_aneg() argument
572 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1118_config_aneg()
576 err = phy_write(phydev, MII_M1011_PHY_SCR, in m88e1118_config_aneg()
581 err = genphy_config_aneg(phydev); in m88e1118_config_aneg()
585 static int m88e1118_config_init(struct phy_device *phydev) in m88e1118_config_init() argument
590 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002); in m88e1118_config_init()
595 err = phy_write(phydev, 0x15, 0x1070); in m88e1118_config_init()
600 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0003); in m88e1118_config_init()
605 if (phydev->dev_flags & MARVELL_PHY_M1118_DNS323_LEDS) in m88e1118_config_init()
606 err = phy_write(phydev, 0x10, 0x1100); in m88e1118_config_init()
608 err = phy_write(phydev, 0x10, 0x021e); in m88e1118_config_init()
612 err = marvell_of_reg_init(phydev); in m88e1118_config_init()
617 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0); in m88e1118_config_init()
621 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1118_config_init()
624 static int m88e1149_config_init(struct phy_device *phydev) in m88e1149_config_init() argument
629 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002); in m88e1149_config_init()
634 err = phy_write(phydev, 0x15, 0x1048); in m88e1149_config_init()
638 err = marvell_of_reg_init(phydev); in m88e1149_config_init()
643 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0); in m88e1149_config_init()
647 return phy_write(phydev, MII_BMCR, BMCR_RESET); in m88e1149_config_init()
650 static int m88e1145_config_init(struct phy_device *phydev) in m88e1145_config_init() argument
656 err = phy_write(phydev, 0x1d, 0x001b); in m88e1145_config_init()
660 err = phy_write(phydev, 0x1e, 0x418f); in m88e1145_config_init()
664 err = phy_write(phydev, 0x1d, 0x0016); in m88e1145_config_init()
668 err = phy_write(phydev, 0x1e, 0xa2da); in m88e1145_config_init()
672 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) { in m88e1145_config_init()
673 int temp = phy_read(phydev, MII_M1145_PHY_EXT_CR); in m88e1145_config_init()
679 err = phy_write(phydev, MII_M1145_PHY_EXT_CR, temp); in m88e1145_config_init()
683 if (phydev->dev_flags & MARVELL_PHY_M1145_FLAGS_RESISTANCE) { in m88e1145_config_init()
684 err = phy_write(phydev, 0x1d, 0x0012); in m88e1145_config_init()
688 temp = phy_read(phydev, 0x1e); in m88e1145_config_init()
696 err = phy_write(phydev, 0x1e, temp); in m88e1145_config_init()
700 err = phy_write(phydev, 0x1d, 0x3); in m88e1145_config_init()
704 err = phy_write(phydev, 0x1e, 0x8000); in m88e1145_config_init()
710 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) { in m88e1145_config_init()
711 temp = phy_read(phydev, MII_M1145_PHY_EXT_SR); in m88e1145_config_init()
719 err = phy_write(phydev, MII_M1145_PHY_EXT_SR, temp); in m88e1145_config_init()
724 err = marvell_of_reg_init(phydev); in m88e1145_config_init()
740 static int marvell_read_status(struct phy_device *phydev) in marvell_read_status() argument
749 err = genphy_update_link(phydev); in marvell_read_status()
753 if (AUTONEG_ENABLE == phydev->autoneg) { in marvell_read_status()
754 status = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_read_status()
758 lpa = phy_read(phydev, MII_LPA); in marvell_read_status()
762 adv = phy_read(phydev, MII_ADVERTISE); in marvell_read_status()
769 phydev->duplex = DUPLEX_FULL; in marvell_read_status()
771 phydev->duplex = DUPLEX_HALF; in marvell_read_status()
774 phydev->pause = phydev->asym_pause = 0; in marvell_read_status()
778 phydev->speed = SPEED_1000; in marvell_read_status()
782 phydev->speed = SPEED_100; in marvell_read_status()
786 phydev->speed = SPEED_10; in marvell_read_status()
790 if (phydev->duplex == DUPLEX_FULL) { in marvell_read_status()
791 phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; in marvell_read_status()
792 phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; in marvell_read_status()
795 int bmcr = phy_read(phydev, MII_BMCR); in marvell_read_status()
801 phydev->duplex = DUPLEX_FULL; in marvell_read_status()
803 phydev->duplex = DUPLEX_HALF; in marvell_read_status()
806 phydev->speed = SPEED_1000; in marvell_read_status()
808 phydev->speed = SPEED_100; in marvell_read_status()
810 phydev->speed = SPEED_10; in marvell_read_status()
812 phydev->pause = phydev->asym_pause = 0; in marvell_read_status()
818 static int marvell_aneg_done(struct phy_device *phydev) in marvell_aneg_done() argument
820 int retval = phy_read(phydev, MII_M1011_PHY_STATUS); in marvell_aneg_done()
824 static int m88e1121_did_interrupt(struct phy_device *phydev) in m88e1121_did_interrupt() argument
828 imask = phy_read(phydev, MII_M1011_IEVENT); in m88e1121_did_interrupt()
836 static void m88e1318_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in m88e1318_get_wol() argument
841 if (phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_get_wol()
845 if (phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL) & in m88e1318_get_wol()
849 if (phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x00) < 0) in m88e1318_get_wol()
853 static int m88e1318_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in m88e1318_set_wol() argument
857 oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE); in m88e1318_set_wol()
861 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x00); in m88e1318_set_wol()
866 temp = phy_read(phydev, MII_88E1318S_PHY_CSIER); in m88e1318_set_wol()
868 err = phy_write(phydev, MII_88E1318S_PHY_CSIER, temp); in m88e1318_set_wol()
872 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
878 temp = phy_read(phydev, MII_88E1318S_PHY_LED_TCR); in m88e1318_set_wol()
882 err = phy_write(phydev, MII_88E1318S_PHY_LED_TCR, temp); in m88e1318_set_wol()
886 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
892 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD2, in m88e1318_set_wol()
893 ((phydev->attached_dev->dev_addr[5] << 8) | in m88e1318_set_wol()
894 phydev->attached_dev->dev_addr[4])); in m88e1318_set_wol()
897 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD1, in m88e1318_set_wol()
898 ((phydev->attached_dev->dev_addr[3] << 8) | in m88e1318_set_wol()
899 phydev->attached_dev->dev_addr[2])); in m88e1318_set_wol()
902 err = phy_write(phydev, MII_88E1318S_PHY_MAGIC_PACKET_WORD0, in m88e1318_set_wol()
903 ((phydev->attached_dev->dev_addr[1] << 8) | in m88e1318_set_wol()
904 phydev->attached_dev->dev_addr[0])); in m88e1318_set_wol()
909 temp = phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); in m88e1318_set_wol()
912 err = phy_write(phydev, MII_88E1318S_PHY_WOL_CTRL, temp); in m88e1318_set_wol()
916 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, in m88e1318_set_wol()
922 temp = phy_read(phydev, MII_88E1318S_PHY_WOL_CTRL); in m88e1318_set_wol()
925 err = phy_write(phydev, MII_88E1318S_PHY_WOL_CTRL, temp); in m88e1318_set_wol()
930 err = phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage); in m88e1318_set_wol()