Lines Matching refs:phy_data
402 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_redrv_write() local
427 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
441 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
519 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_put_mux() local
523 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_put_mux()
529 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_put_mux()
538 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_get_mux() local
542 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_get_mux()
546 mux_channel = 1 << phy_data->sfp_mux_channel; in xgbe_phy_sfp_get_mux()
548 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_get_mux()
562 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_comm_ownership() local
578 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id); in xgbe_phy_get_comm_ownership()
607 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_write() local
610 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_write()
613 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_write()
645 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_write() local
652 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_write()
654 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_write()
667 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_read() local
670 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_read()
673 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_read()
705 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_read() local
712 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_read()
714 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_read()
727 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_phy_settings() local
729 if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed) in xgbe_phy_sfp_phy_settings()
734 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_phy_settings()
751 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
763 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) { in xgbe_phy_sfp_phy_settings()
764 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_sfp_phy_settings()
766 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
769 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
782 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_sfp_phy_settings()
783 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
812 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
856 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_free_phy_device() local
858 if (phy_data->phydev) { in xgbe_phy_free_phy_device()
859 phy_detach(phy_data->phydev); in xgbe_phy_free_phy_device()
860 phy_device_remove(phy_data->phydev); in xgbe_phy_free_phy_device()
861 phy_device_free(phy_data->phydev); in xgbe_phy_free_phy_device()
862 phy_data->phydev = NULL; in xgbe_phy_free_phy_device()
869 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_finisar_phy_quirks() local
870 unsigned int phy_id = phy_data->phydev->phy_id; in xgbe_phy_finisar_phy_quirks()
872 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_finisar_phy_quirks()
879 phy_write(phy_data->phydev, 0x16, 0x0001); in xgbe_phy_finisar_phy_quirks()
880 phy_write(phy_data->phydev, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
881 phy_write(phy_data->phydev, 0x16, 0x0000); in xgbe_phy_finisar_phy_quirks()
884 phy_write(phy_data->phydev, 0x1b, 0x9084); in xgbe_phy_finisar_phy_quirks()
885 phy_write(phy_data->phydev, 0x09, 0x0e00); in xgbe_phy_finisar_phy_quirks()
886 phy_write(phy_data->phydev, 0x00, 0x8140); in xgbe_phy_finisar_phy_quirks()
887 phy_write(phy_data->phydev, 0x04, 0x0d01); in xgbe_phy_finisar_phy_quirks()
888 phy_write(phy_data->phydev, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
897 linkmode_copy(phy_data->phydev->supported, supported); in xgbe_phy_finisar_phy_quirks()
899 phy_support_asym_pause(phy_data->phydev); in xgbe_phy_finisar_phy_quirks()
910 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_belfuse_phy_quirks() local
911 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_belfuse_phy_quirks()
912 unsigned int phy_id = phy_data->phydev->phy_id; in xgbe_phy_belfuse_phy_quirks()
915 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_belfuse_phy_quirks()
933 genphy_soft_reset(phy_data->phydev); in xgbe_phy_belfuse_phy_quirks()
936 phy_write(phy_data->phydev, 0x18, 0x7007); in xgbe_phy_belfuse_phy_quirks()
937 reg = phy_read(phy_data->phydev, 0x18); in xgbe_phy_belfuse_phy_quirks()
938 phy_write(phy_data->phydev, 0x18, reg & ~0x0080); in xgbe_phy_belfuse_phy_quirks()
941 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
942 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
945 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0001); in xgbe_phy_belfuse_phy_quirks()
948 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
949 phy_write(phy_data->phydev, 0x00, reg | 0x00800); in xgbe_phy_belfuse_phy_quirks()
952 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
953 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
956 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0004); in xgbe_phy_belfuse_phy_quirks()
959 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
960 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
963 phy_write(phy_data->phydev, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
964 reg = phy_read(phy_data->phydev, 0x1c); in xgbe_phy_belfuse_phy_quirks()
967 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg); in xgbe_phy_belfuse_phy_quirks()
970 reg = phy_read(phy_data->phydev, 0x00); in xgbe_phy_belfuse_phy_quirks()
971 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
979 linkmode_copy(phy_data->phydev->supported, supported); in xgbe_phy_belfuse_phy_quirks()
980 phy_support_asym_pause(phy_data->phydev); in xgbe_phy_belfuse_phy_quirks()
1000 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_find_phy_device() local
1005 if (phy_data->phydev) in xgbe_phy_find_phy_device()
1012 if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE) in xgbe_phy_find_phy_device()
1016 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_find_phy_device()
1017 !phy_data->sfp_phy_avail) in xgbe_phy_find_phy_device()
1021 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
1022 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1026 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1031 phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
1032 (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45)); in xgbe_phy_find_phy_device()
1057 phy_data->phydev = phydev; in xgbe_phy_find_phy_device()
1064 phy_start_aneg(phy_data->phydev); in xgbe_phy_find_phy_device()
1071 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_external_phy() local
1074 if (!phy_data->sfp_changed) in xgbe_phy_sfp_external_phy()
1077 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_external_phy()
1079 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_sfp_external_phy()
1088 phy_data->sfp_phy_avail = 1; in xgbe_phy_sfp_external_phy()
1091 static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_rx_los() argument
1093 u8 *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_rx_los()
1098 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) in xgbe_phy_check_sfp_rx_los()
1101 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) in xgbe_phy_check_sfp_rx_los()
1107 static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_tx_fault() argument
1109 u8 *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_tx_fault()
1114 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) in xgbe_phy_check_sfp_tx_fault()
1117 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) in xgbe_phy_check_sfp_tx_fault()
1123 static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_mod_absent() argument
1125 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) in xgbe_phy_check_sfp_mod_absent()
1128 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) in xgbe_phy_check_sfp_mod_absent()
1136 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_parse_eeprom() local
1137 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_sfp_parse_eeprom()
1149 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); in xgbe_phy_sfp_parse_eeprom()
1150 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); in xgbe_phy_sfp_parse_eeprom()
1154 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; in xgbe_phy_sfp_parse_eeprom()
1155 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN]; in xgbe_phy_sfp_parse_eeprom()
1157 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; in xgbe_phy_sfp_parse_eeprom()
1161 if (phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE && in xgbe_phy_sfp_parse_eeprom()
1163 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; in xgbe_phy_sfp_parse_eeprom()
1165 phy_data->sfp_base = XGBE_SFP_BASE_10000_SR; in xgbe_phy_sfp_parse_eeprom()
1167 phy_data->sfp_base = XGBE_SFP_BASE_10000_LR; in xgbe_phy_sfp_parse_eeprom()
1169 phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM; in xgbe_phy_sfp_parse_eeprom()
1171 phy_data->sfp_base = XGBE_SFP_BASE_10000_ER; in xgbe_phy_sfp_parse_eeprom()
1173 phy_data->sfp_base = XGBE_SFP_BASE_1000_SX; in xgbe_phy_sfp_parse_eeprom()
1175 phy_data->sfp_base = XGBE_SFP_BASE_1000_LX; in xgbe_phy_sfp_parse_eeprom()
1177 phy_data->sfp_base = XGBE_SFP_BASE_1000_CX; in xgbe_phy_sfp_parse_eeprom()
1179 phy_data->sfp_base = XGBE_SFP_BASE_1000_T; in xgbe_phy_sfp_parse_eeprom()
1181 switch (phy_data->sfp_base) { in xgbe_phy_sfp_parse_eeprom()
1183 phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000; in xgbe_phy_sfp_parse_eeprom()
1188 phy_data->sfp_speed = XGBE_SFP_SPEED_1000; in xgbe_phy_sfp_parse_eeprom()
1195 phy_data->sfp_speed = XGBE_SFP_SPEED_10000; in xgbe_phy_sfp_parse_eeprom()
1246 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_read_eeprom() local
1285 if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) { in xgbe_phy_sfp_read_eeprom()
1286 phy_data->sfp_changed = 1; in xgbe_phy_sfp_read_eeprom()
1291 memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); in xgbe_phy_sfp_read_eeprom()
1295 phy_data->sfp_changed = 0; in xgbe_phy_sfp_read_eeprom()
1306 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_signals() local
1312 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, in xgbe_phy_sfp_signals()
1321 phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_phy_sfp_signals()
1323 phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); in xgbe_phy_sfp_signals()
1328 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_mod_absent() local
1332 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_mod_absent()
1333 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_mod_absent()
1334 memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom)); in xgbe_phy_sfp_mod_absent()
1337 static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data) in xgbe_phy_sfp_reset() argument
1339 phy_data->sfp_rx_los = 0; in xgbe_phy_sfp_reset()
1340 phy_data->sfp_tx_fault = 0; in xgbe_phy_sfp_reset()
1341 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_reset()
1342 phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN; in xgbe_phy_sfp_reset()
1343 phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN; in xgbe_phy_sfp_reset()
1344 phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN; in xgbe_phy_sfp_reset()
1349 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_detect() local
1353 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1361 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_detect()
1369 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1387 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_eeprom() local
1405 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_module_eeprom()
1415 if (phy_data->sfp_mod_absent) { in xgbe_phy_module_eeprom()
1486 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_info() local
1488 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_module_info()
1494 if (phy_data->sfp_mod_absent) in xgbe_phy_module_info()
1497 if (XGBE_SFP_DIAGS_SUPPORTED(&phy_data->sfp_eeprom)) { in xgbe_phy_module_info()
1511 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_phydev_flowctrl() local
1518 if (!phy_data->phydev) in xgbe_phy_phydev_flowctrl()
1521 lcl_adv = linkmode_adv_to_lcl_adv_t(phy_data->phydev->advertising); in xgbe_phy_phydev_flowctrl()
1523 if (phy_data->phydev->pause) { in xgbe_phy_phydev_flowctrl()
1527 if (phy_data->phydev->asym_pause) { in xgbe_phy_phydev_flowctrl()
1625 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an73_redrv_outcome() local
1646 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1656 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1665 switch (phy_data->sfp_base) { in xgbe_phy_an73_redrv_outcome()
1667 if (phy_data->phydev && in xgbe_phy_an73_redrv_outcome()
1668 (phy_data->phydev->speed == SPEED_100)) in xgbe_phy_an73_redrv_outcome()
1682 if (phy_data->phydev && in xgbe_phy_an73_redrv_outcome()
1683 (phy_data->phydev->speed == SPEED_100)) in xgbe_phy_an73_redrv_outcome()
1780 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_advertising() local
1785 if (!phy_data->redrv) in xgbe_phy_an_advertising()
1796 switch (phy_data->port_mode) { in xgbe_phy_an_advertising()
1810 if (phy_data->phydev && in xgbe_phy_an_advertising()
1811 (phy_data->phydev->speed == SPEED_10000)) in xgbe_phy_an_advertising()
1820 switch (phy_data->sfp_base) { in xgbe_phy_an_advertising()
1841 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_config() local
1848 if (!phy_data->phydev) in xgbe_phy_an_config()
1851 phy_data->phydev->autoneg = pdata->phy.autoneg; in xgbe_phy_an_config()
1852 linkmode_and(phy_data->phydev->advertising, in xgbe_phy_an_config()
1853 phy_data->phydev->supported, in xgbe_phy_an_config()
1857 phy_data->phydev->speed = pdata->phy.speed; in xgbe_phy_an_config()
1858 phy_data->phydev->duplex = pdata->phy.duplex; in xgbe_phy_an_config()
1861 ret = phy_start_aneg(phy_data->phydev); in xgbe_phy_an_config()
1866 static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data) in xgbe_phy_an_sfp_mode() argument
1868 switch (phy_data->sfp_base) { in xgbe_phy_an_sfp_mode()
1882 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_mode() local
1885 if (phy_data->redrv) in xgbe_phy_an_mode()
1888 switch (phy_data->port_mode) { in xgbe_phy_an_mode()
1905 return xgbe_phy_an_sfp_mode(phy_data); in xgbe_phy_an_mode()
1914 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_mdio() local
1917 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_mdio()
1920 return pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr, in xgbe_phy_set_redrv_mode_mdio()
1927 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_i2c() local
1932 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_i2c()
1941 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode() local
1945 if (!phy_data->redrv) in xgbe_phy_set_redrv_mode()
1949 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_set_redrv_mode()
1950 (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) && in xgbe_phy_set_redrv_mode()
1951 (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR)) in xgbe_phy_set_redrv_mode()
1958 if (phy_data->redrv_if) in xgbe_phy_set_redrv_mode()
2059 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_power_off() local
2064 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_power_off()
2071 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfi_mode() local
2076 if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) { in xgbe_phy_sfi_mode()
2079 if (phy_data->sfp_cable_len <= 1) in xgbe_phy_sfi_mode()
2082 else if (phy_data->sfp_cable_len <= 3) in xgbe_phy_sfi_mode()
2090 phy_data->cur_mode = XGBE_MODE_SFI; in xgbe_phy_sfi_mode()
2097 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_x_mode() local
2104 phy_data->cur_mode = XGBE_MODE_X; in xgbe_phy_x_mode()
2111 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_1000_mode() local
2118 phy_data->cur_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_sgmii_1000_mode()
2125 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_100_mode() local
2132 phy_data->cur_mode = XGBE_MODE_SGMII_100; in xgbe_phy_sgmii_100_mode()
2139 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kr_mode() local
2146 phy_data->cur_mode = XGBE_MODE_KR; in xgbe_phy_kr_mode()
2153 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_2500_mode() local
2160 phy_data->cur_mode = XGBE_MODE_KX_2500; in xgbe_phy_kx_2500_mode()
2167 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_1000_mode() local
2174 phy_data->cur_mode = XGBE_MODE_KX_1000; in xgbe_phy_kx_1000_mode()
2181 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cur_mode() local
2183 return phy_data->cur_mode; in xgbe_phy_cur_mode()
2188 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_baset_mode() local
2191 if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_switch_baset_mode()
2223 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_mode() local
2225 switch (phy_data->port_mode) { in xgbe_phy_switch_mode()
2245 static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_basex_mode() argument
2258 static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_baset_mode() argument
2275 static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_get_sfp_mode() argument
2282 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_get_sfp_mode()
2319 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_mode() local
2321 switch (phy_data->port_mode) { in xgbe_phy_get_mode()
2330 return xgbe_phy_get_baset_mode(phy_data, speed); in xgbe_phy_get_mode()
2333 return xgbe_phy_get_basex_mode(phy_data, speed); in xgbe_phy_get_mode()
2335 return xgbe_phy_get_sfp_mode(phy_data, speed); in xgbe_phy_get_mode()
2430 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_sfp_mode() local
2434 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2439 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2444 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2449 if (phy_data->sfp_mod_absent) in xgbe_phy_use_sfp_mode()
2495 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_mode() local
2497 switch (phy_data->port_mode) { in xgbe_phy_use_mode()
2517 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_basex_mode() argument
2522 return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X); in xgbe_phy_valid_speed_basex_mode()
2524 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R); in xgbe_phy_valid_speed_basex_mode()
2530 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_baset_mode() argument
2538 return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T); in xgbe_phy_valid_speed_baset_mode()
2540 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T); in xgbe_phy_valid_speed_baset_mode()
2546 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data *phy_data, in xgbe_phy_valid_speed_sfp_mode() argument
2551 return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000); in xgbe_phy_valid_speed_sfp_mode()
2553 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) || in xgbe_phy_valid_speed_sfp_mode()
2554 (phy_data->sfp_speed == XGBE_SFP_SPEED_1000)); in xgbe_phy_valid_speed_sfp_mode()
2556 return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000); in xgbe_phy_valid_speed_sfp_mode()
2585 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_valid_speed() local
2587 switch (phy_data->port_mode) { in xgbe_phy_valid_speed()
2596 return xgbe_phy_valid_speed_baset_mode(phy_data, speed); in xgbe_phy_valid_speed()
2599 return xgbe_phy_valid_speed_basex_mode(phy_data, speed); in xgbe_phy_valid_speed()
2601 return xgbe_phy_valid_speed_sfp_mode(phy_data, speed); in xgbe_phy_valid_speed()
2609 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_link_status() local
2615 if (phy_data->port_mode == XGBE_PORT_MODE_SFP) { in xgbe_phy_link_status()
2619 if (phy_data->sfp_changed) { in xgbe_phy_link_status()
2624 if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) in xgbe_phy_link_status()
2628 if (phy_data->phydev) { in xgbe_phy_link_status()
2630 ret = phy_read_status(phy_data->phydev); in xgbe_phy_link_status()
2635 !phy_aneg_done(phy_data->phydev)) in xgbe_phy_link_status()
2638 if (!phy_data->phydev->link) in xgbe_phy_link_status()
2651 phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) { in xgbe_phy_link_status()
2659 if (pdata->vdata->enable_rrc && phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { in xgbe_phy_link_status()
2660 phy_data->rrc_count = 0; in xgbe_phy_link_status()
2669 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_gpio_setup() local
2671 phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_sfp_gpio_setup()
2675 phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2678 phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2680 phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2682 phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2684 phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2689 phy_data->sfp_gpio_address); in xgbe_phy_sfp_gpio_setup()
2691 phy_data->sfp_gpio_mask); in xgbe_phy_sfp_gpio_setup()
2693 phy_data->sfp_gpio_rx_los); in xgbe_phy_sfp_gpio_setup()
2695 phy_data->sfp_gpio_tx_fault); in xgbe_phy_sfp_gpio_setup()
2697 phy_data->sfp_gpio_mod_absent); in xgbe_phy_sfp_gpio_setup()
2699 phy_data->sfp_gpio_rate_select); in xgbe_phy_sfp_gpio_setup()
2705 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_comm_setup() local
2713 phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; in xgbe_phy_sfp_comm_setup()
2714 phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; in xgbe_phy_sfp_comm_setup()
2715 phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, in xgbe_phy_sfp_comm_setup()
2720 phy_data->sfp_mux_address); in xgbe_phy_sfp_comm_setup()
2722 phy_data->sfp_mux_channel); in xgbe_phy_sfp_comm_setup()
2734 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_int_mdio_reset() local
2737 ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2741 ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2748 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_i2c_mdio_reset() local
2754 ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2766 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
2767 gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2769 gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2772 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2778 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
2779 gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2781 gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2784 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2792 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset() local
2795 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset()
2802 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) in xgbe_phy_mdio_reset()
2804 else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset()
2812 static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) in xgbe_phy_redrv_error() argument
2814 if (!phy_data->redrv) in xgbe_phy_redrv_error()
2817 if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX) in xgbe_phy_redrv_error()
2820 switch (phy_data->redrv_model) { in xgbe_phy_redrv_error()
2822 if (phy_data->redrv_lane > 3) in xgbe_phy_redrv_error()
2826 if (phy_data->redrv_lane > 1) in xgbe_phy_redrv_error()
2838 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset_setup() local
2840 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset_setup()
2843 phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); in xgbe_phy_mdio_reset_setup()
2844 switch (phy_data->mdio_reset) { in xgbe_phy_mdio_reset_setup()
2851 phy_data->mdio_reset); in xgbe_phy_mdio_reset_setup()
2855 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { in xgbe_phy_mdio_reset_setup()
2856 phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_mdio_reset_setup()
2859 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
2861 } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) { in xgbe_phy_mdio_reset_setup()
2862 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
2871 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_port_mode_mismatch() local
2873 switch (phy_data->port_mode) { in xgbe_phy_port_mode_mismatch()
2876 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2877 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2881 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) in xgbe_phy_port_mode_mismatch()
2885 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2886 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)) in xgbe_phy_port_mode_mismatch()
2890 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_port_mode_mismatch()
2894 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2895 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2896 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)) in xgbe_phy_port_mode_mismatch()
2900 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2901 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2902 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2906 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_port_mode_mismatch()
2910 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
2911 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
2912 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
2924 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_conn_type_mismatch() local
2926 switch (phy_data->port_mode) { in xgbe_phy_conn_type_mismatch()
2930 if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE) in xgbe_phy_conn_type_mismatch()
2938 if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO) in xgbe_phy_conn_type_mismatch()
2942 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_conn_type_mismatch()
2964 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_track() local
2969 if (!phy_data->phy_cdr_notrack) in xgbe_phy_cdr_track()
2972 usleep_range(phy_data->phy_cdr_delay, in xgbe_phy_cdr_track()
2973 phy_data->phy_cdr_delay + 500); in xgbe_phy_cdr_track()
2979 phy_data->phy_cdr_notrack = 0; in xgbe_phy_cdr_track()
2984 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_notrack() local
2989 if (phy_data->phy_cdr_notrack) in xgbe_phy_cdr_notrack()
2998 phy_data->phy_cdr_notrack = 1; in xgbe_phy_cdr_notrack()
3015 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_post() local
3020 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_post()
3030 if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) in xgbe_phy_an_post()
3031 phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; in xgbe_phy_an_post()
3033 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_an_post()
3044 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_pre() local
3049 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_pre()
3061 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_stop() local
3067 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_stop()
3082 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_start() local
3091 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_start()
3092 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_start()
3097 phy_data->redrv_addr); in xgbe_phy_start()
3103 xgbe_phy_set_mode(pdata, phy_data->start_mode); in xgbe_phy_start()
3109 switch (phy_data->port_mode) { in xgbe_phy_start()
3132 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_reset() local
3137 cur_mode = phy_data->cur_mode; in xgbe_phy_reset()
3141 if (!phy_data->phydev) in xgbe_phy_reset()
3149 return phy_init_hw(phy_data->phydev); in xgbe_phy_reset()
3154 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_exit() local
3157 mdiobus_unregister(phy_data->mii); in xgbe_phy_exit()
3163 struct xgbe_phy_data *phy_data; in xgbe_phy_init() local
3178 phy_data = devm_kzalloc(pdata->dev, sizeof(*phy_data), GFP_KERNEL); in xgbe_phy_init()
3179 if (!phy_data) in xgbe_phy_init()
3181 pdata->phy_data = phy_data; in xgbe_phy_init()
3183 phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); in xgbe_phy_init()
3184 phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); in xgbe_phy_init()
3185 phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); in xgbe_phy_init()
3186 phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); in xgbe_phy_init()
3187 phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); in xgbe_phy_init()
3189 dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode); in xgbe_phy_init()
3190 dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id); in xgbe_phy_init()
3191 dev_dbg(pdata->dev, "port speeds=%#x\n", phy_data->port_speeds); in xgbe_phy_init()
3192 dev_dbg(pdata->dev, "conn type=%u\n", phy_data->conn_type); in xgbe_phy_init()
3193 dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr); in xgbe_phy_init()
3196 phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); in xgbe_phy_init()
3197 phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); in xgbe_phy_init()
3198 phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); in xgbe_phy_init()
3199 phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); in xgbe_phy_init()
3200 phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); in xgbe_phy_init()
3201 if (phy_data->redrv && netif_msg_probe(pdata)) { in xgbe_phy_init()
3203 dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if); in xgbe_phy_init()
3204 dev_dbg(pdata->dev, "redrv addr=%#x\n", phy_data->redrv_addr); in xgbe_phy_init()
3205 dev_dbg(pdata->dev, "redrv lane=%u\n", phy_data->redrv_lane); in xgbe_phy_init()
3206 dev_dbg(pdata->dev, "redrv model=%u\n", phy_data->redrv_model); in xgbe_phy_init()
3212 phy_data->port_mode, phy_data->conn_type); in xgbe_phy_init()
3219 phy_data->port_mode, phy_data->port_speeds); in xgbe_phy_init()
3229 if (xgbe_phy_redrv_error(phy_data)) { in xgbe_phy_init()
3233 pdata->kr_redrv = phy_data->redrv; in xgbe_phy_init()
3236 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_init()
3241 switch (phy_data->port_mode) { in xgbe_phy_init()
3250 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3252 phy_data->start_mode = XGBE_MODE_KX_1000; in xgbe_phy_init()
3254 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3258 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3261 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3268 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3270 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3279 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3281 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()
3285 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3288 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3298 phy_data->start_mode = XGBE_MODE_X; in xgbe_phy_init()
3300 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3309 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3311 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3313 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3315 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3317 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { in xgbe_phy_init()
3319 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3322 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3331 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3333 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3335 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3337 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3339 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3341 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3344 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3359 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3361 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3371 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_init()
3372 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3373 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_init()
3374 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3375 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_init()
3376 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3378 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3391 if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) && in xgbe_phy_init()
3392 (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) { in xgbe_phy_init()
3393 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_init()
3394 phy_data->phydev_mode); in xgbe_phy_init()
3398 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_init()
3403 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_init()
3404 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_init()
3409 phy_data->redrv_addr); in xgbe_phy_init()
3414 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_init()
3435 phy_data->mii = mii; in xgbe_phy_init()