Lines Matching refs:phy_data
398 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_redrv_write() local
423 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
437 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
515 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_put_mux() local
519 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_put_mux()
525 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_put_mux()
534 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_get_mux() local
538 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_get_mux()
542 mux_channel = 1 << phy_data->sfp_mux_channel; in xgbe_phy_sfp_get_mux()
544 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_get_mux()
558 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_comm_ownership() local
574 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id); in xgbe_phy_get_comm_ownership()
603 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_write() local
606 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_write()
609 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_write()
641 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_write() local
648 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_write()
650 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_write()
663 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_read() local
666 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_read()
669 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_read()
701 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_read() local
708 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_read()
710 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_read()
723 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_phy_settings() local
725 if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed) in xgbe_phy_sfp_phy_settings()
730 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_phy_settings()
747 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
759 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) { in xgbe_phy_sfp_phy_settings()
760 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_sfp_phy_settings()
762 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
765 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
778 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_sfp_phy_settings()
779 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
808 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
848 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_free_phy_device() local
850 if (phy_data->phydev) { in xgbe_phy_free_phy_device()
851 phy_detach(phy_data->phydev); in xgbe_phy_free_phy_device()
852 phy_device_remove(phy_data->phydev); in xgbe_phy_free_phy_device()
853 phy_device_free(phy_data->phydev); in xgbe_phy_free_phy_device()
854 phy_data->phydev = NULL; in xgbe_phy_free_phy_device()
860 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_finisar_phy_quirks() local
861 unsigned int phy_id = phy_data->phydev->phy_id; in xgbe_phy_finisar_phy_quirks()
863 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_finisar_phy_quirks()
870 phy_write(phy_data->phydev, 0x16, 0x0001); in xgbe_phy_finisar_phy_quirks()
871 phy_write(phy_data->phydev, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
872 phy_write(phy_data->phydev, 0x16, 0x0000); in xgbe_phy_finisar_phy_quirks()
875 phy_write(phy_data->phydev, 0x1b, 0x9084); in xgbe_phy_finisar_phy_quirks()
876 phy_write(phy_data->phydev, 0x09, 0x0e00); in xgbe_phy_finisar_phy_quirks()
877 phy_write(phy_data->phydev, 0x00, 0x8140); in xgbe_phy_finisar_phy_quirks()
878 phy_write(phy_data->phydev, 0x04, 0x0d01); in xgbe_phy_finisar_phy_quirks()
879 phy_write(phy_data->phydev, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
881 phy_data->phydev->supported = PHY_GBIT_FEATURES; in xgbe_phy_finisar_phy_quirks()
882 phy_data->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; in xgbe_phy_finisar_phy_quirks()
883 phy_data->phydev->advertising = phy_data->phydev->supported; in xgbe_phy_finisar_phy_quirks()
893 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_belfuse_phy_quirks() local
894 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_belfuse_phy_quirks()
895 unsigned int phy_id = phy_data->phydev->phy_id; in xgbe_phy_belfuse_phy_quirks()
898 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_belfuse_phy_quirks()
916 phy_write(phy_data->phydev, 0x18, 0x7007); in xgbe_phy_belfuse_phy_quirks()
917 reg = phy_read(phy_data->phydev, 0x18); in xgbe_phy_belfuse_phy_quirks()
918 phy_write(phy_data->phydev, 0x18, reg & ~0x0080); in xgbe_phy_belfuse_phy_quirks()
921 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
922 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
925 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0001); in xgbe_phy_belfuse_phy_quirks()
928 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
929 phy_write(phy_data->phydev, 0x00, reg | 0x00800); in xgbe_phy_belfuse_phy_quirks()
932 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
933 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
936 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0004); in xgbe_phy_belfuse_phy_quirks()
939 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
940 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
943 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
944 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
947 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg); in xgbe_phy_belfuse_phy_quirks()
950 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
951 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
953 phy_data->phydev->supported = PHY_GBIT_FEATURES; in xgbe_phy_belfuse_phy_quirks()
954 phy_data->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; in xgbe_phy_belfuse_phy_quirks()
955 phy_data->phydev->advertising = phy_data->phydev->supported; in xgbe_phy_belfuse_phy_quirks()
975 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_find_phy_device() local
981 if (phy_data->phydev) in xgbe_phy_find_phy_device()
988 if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE) in xgbe_phy_find_phy_device()
992 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_find_phy_device()
993 !phy_data->sfp_phy_avail) in xgbe_phy_find_phy_device()
997 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
998 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1002 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1007 phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
1008 (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45)); in xgbe_phy_find_phy_device()
1033 phy_data->phydev = phydev; in xgbe_phy_find_phy_device()
1041 phy_start_aneg(phy_data->phydev); in xgbe_phy_find_phy_device()
1048 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_external_phy() local
1051 if (!phy_data->sfp_changed) in xgbe_phy_sfp_external_phy()
1054 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_external_phy()
1056 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_sfp_external_phy()
1065 phy_data->sfp_phy_avail = 1; in xgbe_phy_sfp_external_phy()
1068 static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_rx_los() argument
1070 u8 *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_rx_los()
1075 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) in xgbe_phy_check_sfp_rx_los()
1078 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) in xgbe_phy_check_sfp_rx_los()
1084 static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_tx_fault() argument
1086 u8 *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_tx_fault()
1091 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) in xgbe_phy_check_sfp_tx_fault()
1094 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) in xgbe_phy_check_sfp_tx_fault()
1100 static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_mod_absent() argument
1102 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) in xgbe_phy_check_sfp_mod_absent()
1105 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) in xgbe_phy_check_sfp_mod_absent()
1113 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_parse_eeprom() local
1114 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_sfp_parse_eeprom()
1126 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); in xgbe_phy_sfp_parse_eeprom()
1127 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); in xgbe_phy_sfp_parse_eeprom()
1131 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; in xgbe_phy_sfp_parse_eeprom()
1132 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN]; in xgbe_phy_sfp_parse_eeprom()
1134 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; in xgbe_phy_sfp_parse_eeprom()
1139 phy_data->sfp_base = XGBE_SFP_BASE_10000_SR; in xgbe_phy_sfp_parse_eeprom()
1141 phy_data->sfp_base = XGBE_SFP_BASE_10000_LR; in xgbe_phy_sfp_parse_eeprom()
1143 phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM; in xgbe_phy_sfp_parse_eeprom()
1145 phy_data->sfp_base = XGBE_SFP_BASE_10000_ER; in xgbe_phy_sfp_parse_eeprom()
1147 phy_data->sfp_base = XGBE_SFP_BASE_1000_SX; in xgbe_phy_sfp_parse_eeprom()
1149 phy_data->sfp_base = XGBE_SFP_BASE_1000_LX; in xgbe_phy_sfp_parse_eeprom()
1151 phy_data->sfp_base = XGBE_SFP_BASE_1000_CX; in xgbe_phy_sfp_parse_eeprom()
1153 phy_data->sfp_base = XGBE_SFP_BASE_1000_T; in xgbe_phy_sfp_parse_eeprom()
1154 else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) && in xgbe_phy_sfp_parse_eeprom()
1156 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; in xgbe_phy_sfp_parse_eeprom()
1158 switch (phy_data->sfp_base) { in xgbe_phy_sfp_parse_eeprom()
1160 phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000; in xgbe_phy_sfp_parse_eeprom()
1165 phy_data->sfp_speed = XGBE_SFP_SPEED_1000; in xgbe_phy_sfp_parse_eeprom()
1172 phy_data->sfp_speed = XGBE_SFP_SPEED_10000; in xgbe_phy_sfp_parse_eeprom()
1223 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_read_eeprom() local
1262 if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) { in xgbe_phy_sfp_read_eeprom()
1263 phy_data->sfp_changed = 1; in xgbe_phy_sfp_read_eeprom()
1268 memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); in xgbe_phy_sfp_read_eeprom()
1272 phy_data->sfp_changed = 0; in xgbe_phy_sfp_read_eeprom()
1283 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_signals() local
1289 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, in xgbe_phy_sfp_signals()
1298 phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_phy_sfp_signals()
1300 phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); in xgbe_phy_sfp_signals()
1305 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_mod_absent() local
1309 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_mod_absent()
1310 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_mod_absent()
1311 memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom)); in xgbe_phy_sfp_mod_absent()
1314 static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data) in xgbe_phy_sfp_reset() argument
1316 phy_data->sfp_rx_los = 0; in xgbe_phy_sfp_reset()
1317 phy_data->sfp_tx_fault = 0; in xgbe_phy_sfp_reset()
1318 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_reset()
1319 phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN; in xgbe_phy_sfp_reset()
1320 phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN; in xgbe_phy_sfp_reset()
1321 phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN; in xgbe_phy_sfp_reset()
1326 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_detect() local
1330 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1338 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_detect()
1346 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1364 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_eeprom() local
1382 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_module_eeprom()
1392 if (phy_data->sfp_mod_absent) { in xgbe_phy_module_eeprom()
1463 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_info() local
1465 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_module_info()
1471 if (phy_data->sfp_mod_absent) in xgbe_phy_module_info()
1474 if (XGBE_SFP_DIAGS_SUPPORTED(&phy_data->sfp_eeprom)) { in xgbe_phy_module_info()
1488 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_phydev_flowctrl() local
1495 if (!phy_data->phydev) in xgbe_phy_phydev_flowctrl()
1498 if (phy_data->phydev->advertising & ADVERTISED_Pause) in xgbe_phy_phydev_flowctrl()
1500 if (phy_data->phydev->advertising & ADVERTISED_Asym_Pause) in xgbe_phy_phydev_flowctrl()
1503 if (phy_data->phydev->pause) { in xgbe_phy_phydev_flowctrl()
1507 if (phy_data->phydev->asym_pause) { in xgbe_phy_phydev_flowctrl()
1605 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an73_redrv_outcome() local
1626 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1635 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1643 switch (phy_data->sfp_base) { in xgbe_phy_an73_redrv_outcome()
1645 if (phy_data->phydev && in xgbe_phy_an73_redrv_outcome()
1646 (phy_data->phydev->speed == SPEED_100)) in xgbe_phy_an73_redrv_outcome()
1660 if (phy_data->phydev && in xgbe_phy_an73_redrv_outcome()
1661 (phy_data->phydev->speed == SPEED_100)) in xgbe_phy_an73_redrv_outcome()
1758 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_advertising() local
1763 if (!phy_data->redrv) in xgbe_phy_an_advertising()
1774 switch (phy_data->port_mode) { in xgbe_phy_an_advertising()
1787 if (phy_data->phydev && in xgbe_phy_an_advertising()
1788 (phy_data->phydev->speed == SPEED_10000)) in xgbe_phy_an_advertising()
1797 switch (phy_data->sfp_base) { in xgbe_phy_an_advertising()
1818 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_config() local
1826 if (!phy_data->phydev) in xgbe_phy_an_config()
1832 phy_data->phydev->autoneg = pdata->phy.autoneg; in xgbe_phy_an_config()
1833 phy_data->phydev->advertising = phy_data->phydev->supported & in xgbe_phy_an_config()
1837 phy_data->phydev->speed = pdata->phy.speed; in xgbe_phy_an_config()
1838 phy_data->phydev->duplex = pdata->phy.duplex; in xgbe_phy_an_config()
1841 ret = phy_start_aneg(phy_data->phydev); in xgbe_phy_an_config()
1846 static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data) in xgbe_phy_an_sfp_mode() argument
1848 switch (phy_data->sfp_base) { in xgbe_phy_an_sfp_mode()
1862 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_mode() local
1865 if (phy_data->redrv) in xgbe_phy_an_mode()
1868 switch (phy_data->port_mode) { in xgbe_phy_an_mode()
1884 return xgbe_phy_an_sfp_mode(phy_data); in xgbe_phy_an_mode()
1893 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_mdio() local
1896 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_mdio()
1899 return pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr, in xgbe_phy_set_redrv_mode_mdio()
1906 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_i2c() local
1911 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_i2c()
1920 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode() local
1924 if (!phy_data->redrv) in xgbe_phy_set_redrv_mode()
1928 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_set_redrv_mode()
1929 (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) && in xgbe_phy_set_redrv_mode()
1930 (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR)) in xgbe_phy_set_redrv_mode()
1937 if (phy_data->redrv_if) in xgbe_phy_set_redrv_mode()
1988 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_power_off() local
1993 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_power_off()
2000 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfi_mode() local
2005 if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) { in xgbe_phy_sfi_mode()
2008 if (phy_data->sfp_cable_len <= 1) in xgbe_phy_sfi_mode()
2010 else if (phy_data->sfp_cable_len <= 3) in xgbe_phy_sfi_mode()
2016 phy_data->cur_mode = XGBE_MODE_SFI; in xgbe_phy_sfi_mode()
2023 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_x_mode() local
2030 phy_data->cur_mode = XGBE_MODE_X; in xgbe_phy_x_mode()
2037 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_1000_mode() local
2044 phy_data->cur_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_sgmii_1000_mode()
2051 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_100_mode() local
2058 phy_data->cur_mode = XGBE_MODE_SGMII_100; in xgbe_phy_sgmii_100_mode()
2065 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kr_mode() local
2072 phy_data->cur_mode = XGBE_MODE_KR; in xgbe_phy_kr_mode()
2079 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_2500_mode() local
2086 phy_data->cur_mode = XGBE_MODE_KX_2500; in xgbe_phy_kx_2500_mode()
2093 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_1000_mode() local
2100 phy_data->cur_mode = XGBE_MODE_KX_1000; in xgbe_phy_kx_1000_mode()
2107 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cur_mode() local
2109 return phy_data->cur_mode; in xgbe_phy_cur_mode()
2114 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_baset_mode() local
2117 if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_switch_baset_mode()
2149 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_mode() local
2151 switch (phy_data->port_mode) { in xgbe_phy_switch_mode()
2170 static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_basex_mode() argument
2183 static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_baset_mode() argument
2200 static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_sfp_mode() argument
2207 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_get_sfp_mode()
2244 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_mode() local
2246 switch (phy_data->port_mode) { in xgbe_phy_get_mode()
2254 return xgbe_phy_get_baset_mode(phy_data, speed); in xgbe_phy_get_mode()
2257 return xgbe_phy_get_basex_mode(phy_data, speed); in xgbe_phy_get_mode()
2259 return xgbe_phy_get_sfp_mode(phy_data, speed); in xgbe_phy_get_mode()
2354 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_sfp_mode() local
2358 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2363 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2368 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2373 if (phy_data->sfp_mod_absent) in xgbe_phy_use_sfp_mode()
2419 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_mode() local
2421 switch (phy_data->port_mode) { in xgbe_phy_use_mode()
2440 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_basex_mode() argument
2445 return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X); in xgbe_phy_valid_speed_basex_mode()
2447 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R); in xgbe_phy_valid_speed_basex_mode()
2453 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_baset_mode() argument
2461 return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T); in xgbe_phy_valid_speed_baset_mode()
2463 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T); in xgbe_phy_valid_speed_baset_mode()
2469 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_sfp_mode() argument
2474 return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000); in xgbe_phy_valid_speed_sfp_mode()
2476 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) || in xgbe_phy_valid_speed_sfp_mode()
2477 (phy_data->sfp_speed == XGBE_SFP_SPEED_1000)); in xgbe_phy_valid_speed_sfp_mode()
2479 return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000); in xgbe_phy_valid_speed_sfp_mode()
2508 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_valid_speed() local
2510 switch (phy_data->port_mode) { in xgbe_phy_valid_speed()
2518 return xgbe_phy_valid_speed_baset_mode(phy_data, speed); in xgbe_phy_valid_speed()
2521 return xgbe_phy_valid_speed_basex_mode(phy_data, speed); in xgbe_phy_valid_speed()
2523 return xgbe_phy_valid_speed_sfp_mode(phy_data, speed); in xgbe_phy_valid_speed()
2531 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_link_status() local
2537 if (phy_data->port_mode == XGBE_PORT_MODE_SFP) { in xgbe_phy_link_status()
2541 if (phy_data->sfp_changed) { in xgbe_phy_link_status()
2546 if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) in xgbe_phy_link_status()
2550 if (phy_data->phydev) { in xgbe_phy_link_status()
2552 ret = phy_read_status(phy_data->phydev); in xgbe_phy_link_status()
2557 !phy_aneg_done(phy_data->phydev)) in xgbe_phy_link_status()
2560 if (!phy_data->phydev->link) in xgbe_phy_link_status()
2573 if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { in xgbe_phy_link_status()
2574 phy_data->rrc_count = 0; in xgbe_phy_link_status()
2583 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_gpio_setup() local
2585 phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_sfp_gpio_setup()
2589 phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2592 phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2594 phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2596 phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2598 phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2603 phy_data->sfp_gpio_address); in xgbe_phy_sfp_gpio_setup()
2605 phy_data->sfp_gpio_mask); in xgbe_phy_sfp_gpio_setup()
2607 phy_data->sfp_gpio_rx_los); in xgbe_phy_sfp_gpio_setup()
2609 phy_data->sfp_gpio_tx_fault); in xgbe_phy_sfp_gpio_setup()
2611 phy_data->sfp_gpio_mod_absent); in xgbe_phy_sfp_gpio_setup()
2613 phy_data->sfp_gpio_rate_select); in xgbe_phy_sfp_gpio_setup()
2619 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_comm_setup() local
2627 phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; in xgbe_phy_sfp_comm_setup()
2628 phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; in xgbe_phy_sfp_comm_setup()
2629 phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, in xgbe_phy_sfp_comm_setup()
2634 phy_data->sfp_mux_address); in xgbe_phy_sfp_comm_setup()
2636 phy_data->sfp_mux_channel); in xgbe_phy_sfp_comm_setup()
2648 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_int_mdio_reset() local
2651 ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2655 ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2662 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_i2c_mdio_reset() local
2668 ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2680 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
2681 gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2683 gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2686 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2692 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
2693 gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2695 gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2698 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2706 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset() local
2709 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset()
2716 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) in xgbe_phy_mdio_reset()
2718 else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset()
2726 static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) in xgbe_phy_redrv_error() argument
2728 if (!phy_data->redrv) in xgbe_phy_redrv_error()
2731 if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX) in xgbe_phy_redrv_error()
2734 switch (phy_data->redrv_model) { in xgbe_phy_redrv_error()
2736 if (phy_data->redrv_lane > 3) in xgbe_phy_redrv_error()
2740 if (phy_data->redrv_lane > 1) in xgbe_phy_redrv_error()
2752 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset_setup() local
2754 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset_setup()
2757 phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); in xgbe_phy_mdio_reset_setup()
2758 switch (phy_data->mdio_reset) { in xgbe_phy_mdio_reset_setup()
2765 phy_data->mdio_reset); in xgbe_phy_mdio_reset_setup()
2769 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { in xgbe_phy_mdio_reset_setup()
2770 phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_mdio_reset_setup()
2773 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
2775 } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) { in xgbe_phy_mdio_reset_setup()
2776 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
2785 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_port_mode_mismatch() local
2787 switch (phy_data->port_mode) { in xgbe_phy_port_mode_mismatch()
2789 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2790 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2794 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) in xgbe_phy_port_mode_mismatch()
2798 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2799 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)) in xgbe_phy_port_mode_mismatch()
2803 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_port_mode_mismatch()
2807 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2808 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2809 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)) in xgbe_phy_port_mode_mismatch()
2813 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2814 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2815 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2819 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_port_mode_mismatch()
2823 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2824 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2825 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2837 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_conn_type_mismatch() local
2839 switch (phy_data->port_mode) { in xgbe_phy_conn_type_mismatch()
2842 if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE) in xgbe_phy_conn_type_mismatch()
2850 if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO) in xgbe_phy_conn_type_mismatch()
2854 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_conn_type_mismatch()
2876 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_track() local
2881 if (!phy_data->phy_cdr_notrack) in xgbe_phy_cdr_track()
2884 usleep_range(phy_data->phy_cdr_delay, in xgbe_phy_cdr_track()
2885 phy_data->phy_cdr_delay + 500); in xgbe_phy_cdr_track()
2891 phy_data->phy_cdr_notrack = 0; in xgbe_phy_cdr_track()
2896 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_notrack() local
2901 if (phy_data->phy_cdr_notrack) in xgbe_phy_cdr_notrack()
2910 phy_data->phy_cdr_notrack = 1; in xgbe_phy_cdr_notrack()
2927 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_post() local
2932 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_post()
2942 if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) in xgbe_phy_an_post()
2943 phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; in xgbe_phy_an_post()
2945 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_an_post()
2956 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_pre() local
2961 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_pre()
2973 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_stop() local
2979 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_stop()
2994 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_start() local
3003 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_start()
3004 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_start()
3009 phy_data->redrv_addr); in xgbe_phy_start()
3015 xgbe_phy_set_mode(pdata, phy_data->start_mode); in xgbe_phy_start()
3021 switch (phy_data->port_mode) { in xgbe_phy_start()
3044 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_reset() local
3049 cur_mode = phy_data->cur_mode; in xgbe_phy_reset()
3053 if (!phy_data->phydev) in xgbe_phy_reset()
3061 return phy_init_hw(phy_data->phydev); in xgbe_phy_reset()
3066 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_exit() local
3069 mdiobus_unregister(phy_data->mii); in xgbe_phy_exit()
3075 struct xgbe_phy_data *phy_data; in xgbe_phy_init() local
3090 phy_data = devm_kzalloc(pdata->dev, sizeof(*phy_data), GFP_KERNEL); in xgbe_phy_init()
3091 if (!phy_data) in xgbe_phy_init()
3093 pdata->phy_data = phy_data; in xgbe_phy_init()
3095 phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); in xgbe_phy_init()
3096 phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); in xgbe_phy_init()
3097 phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); in xgbe_phy_init()
3098 phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); in xgbe_phy_init()
3099 phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); in xgbe_phy_init()
3101 dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode); in xgbe_phy_init()
3102 dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id); in xgbe_phy_init()
3103 dev_dbg(pdata->dev, "port speeds=%#x\n", phy_data->port_speeds); in xgbe_phy_init()
3104 dev_dbg(pdata->dev, "conn type=%u\n", phy_data->conn_type); in xgbe_phy_init()
3105 dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr); in xgbe_phy_init()
3108 phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); in xgbe_phy_init()
3109 phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); in xgbe_phy_init()
3110 phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); in xgbe_phy_init()
3111 phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); in xgbe_phy_init()
3112 phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); in xgbe_phy_init()
3113 if (phy_data->redrv && netif_msg_probe(pdata)) { in xgbe_phy_init()
3115 dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if); in xgbe_phy_init()
3116 dev_dbg(pdata->dev, "redrv addr=%#x\n", phy_data->redrv_addr); in xgbe_phy_init()
3117 dev_dbg(pdata->dev, "redrv lane=%u\n", phy_data->redrv_lane); in xgbe_phy_init()
3118 dev_dbg(pdata->dev, "redrv model=%u\n", phy_data->redrv_model); in xgbe_phy_init()
3124 phy_data->port_mode, phy_data->conn_type); in xgbe_phy_init()
3131 phy_data->port_mode, phy_data->port_speeds); in xgbe_phy_init()
3141 if (xgbe_phy_redrv_error(phy_data)) { in xgbe_phy_init()
3145 pdata->kr_redrv = phy_data->redrv; in xgbe_phy_init()
3148 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_init()
3153 switch (phy_data->port_mode) { in xgbe_phy_init()
3160 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3162 phy_data->start_mode = XGBE_MODE_KX_1000; in xgbe_phy_init()
3164 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3168 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3171 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3178 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3180 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3189 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3191 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3193 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3195 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3198 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3208 phy_data->start_mode = XGBE_MODE_X; in xgbe_phy_init()
3210 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3219 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3221 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3223 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3225 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3227 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { in xgbe_phy_init()
3229 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3232 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3241 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3243 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3245 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3247 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3249 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3251 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3254 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3269 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3271 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3281 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_init()
3282 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3283 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_init()
3284 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3285 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_init()
3286 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3288 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3301 if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) && in xgbe_phy_init()
3302 (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) { in xgbe_phy_init()
3303 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_init()
3304 phy_data->phydev_mode); in xgbe_phy_init()
3308 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_init()
3313 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_init()
3314 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_init()
3319 phy_data->redrv_addr); in xgbe_phy_init()
3324 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_init()
3345 phy_data->mii = mii; in xgbe_phy_init()