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()
520 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_put_mux() local
524 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_put_mux()
530 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_put_mux()
540 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_get_mux() local
544 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_get_mux()
548 mux_channel = 1 << phy_data->sfp_mux_channel; in xgbe_phy_sfp_get_mux()
550 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_get_mux()
566 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_comm_ownership() local
582 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id); in xgbe_phy_get_comm_ownership()
612 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_write() local
615 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_write()
618 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_write()
651 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_write() local
659 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_write()
661 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_write()
674 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_read() local
677 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_read()
680 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_read()
713 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_read() local
721 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_read()
723 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_read()
736 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_phy_settings() local
738 if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed) in xgbe_phy_sfp_phy_settings()
743 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_phy_settings()
760 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
772 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) { in xgbe_phy_sfp_phy_settings()
773 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_sfp_phy_settings()
775 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_1000) in xgbe_phy_sfp_phy_settings()
791 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_sfp_phy_settings()
792 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
821 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
836 phy_data->sfp_base, pdata->phy.pause_autoneg, in xgbe_phy_sfp_phy_settings()
868 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_free_phy_device() local
870 if (phy_data->phydev) in xgbe_phy_free_phy_device()
871 phy_data->phydev = 0; in xgbe_phy_free_phy_device()
877 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_finisar_phy_quirks() local
878 unsigned int phy_id = phy_data->phy_id; in xgbe_phy_finisar_phy_quirks()
880 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_finisar_phy_quirks()
887 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x16, 0x0001); in xgbe_phy_finisar_phy_quirks()
888 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
889 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x16, 0x0000); in xgbe_phy_finisar_phy_quirks()
892 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1b, 0x9084); in xgbe_phy_finisar_phy_quirks()
893 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x09, 0x0e00); in xgbe_phy_finisar_phy_quirks()
894 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x8140); in xgbe_phy_finisar_phy_quirks()
895 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x04, 0x0d01); in xgbe_phy_finisar_phy_quirks()
896 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
906 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_belfuse_phy_quirks() local
907 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_belfuse_phy_quirks()
908 unsigned int phy_id = phy_data->phy_id; in xgbe_phy_belfuse_phy_quirks()
911 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_belfuse_phy_quirks()
929 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x18, 0x7007); in xgbe_phy_belfuse_phy_quirks()
930 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x18); in xgbe_phy_belfuse_phy_quirks()
931 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x18, reg & ~0x0080); in xgbe_phy_belfuse_phy_quirks()
934 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
935 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
938 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
942 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
943 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg | 0x00800); in xgbe_phy_belfuse_phy_quirks()
946 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
947 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
950 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
954 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
955 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
958 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
959 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
962 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
966 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
967 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
987 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_get_phy_id() local
991 phy_reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x02); in xgbe_get_phy_id()
996 phy_data->phy_id = (phy_reg & 0xffff) << 16; in xgbe_get_phy_id()
998 phy_reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x03); in xgbe_get_phy_id()
1003 phy_data->phy_id |= (phy_reg & 0xffff); in xgbe_get_phy_id()
1060 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_find_phy_device() local
1064 "0x%08x\n", __func__, phy_data->phydev, phy_data->phydev_mode, in xgbe_phy_find_phy_device()
1065 phy_data->sfp_phy_avail, phy_data->phy_id); in xgbe_phy_find_phy_device()
1068 if (phy_data->phydev) { in xgbe_phy_find_phy_device()
1077 if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE) { in xgbe_phy_find_phy_device()
1079 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1084 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_find_phy_device()
1085 !phy_data->sfp_phy_avail) { in xgbe_phy_find_phy_device()
1087 phy_data->port_mode, phy_data->sfp_phy_avail); in xgbe_phy_find_phy_device()
1092 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
1093 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1096 phy_data->mdio_addr, phy_data->phydev_mode, ret); in xgbe_phy_find_phy_device()
1103 axgbe_printf(2, "Get phy_id 0x%08x\n", phy_data->phy_id); in xgbe_phy_find_phy_device()
1105 phy_data->phydev = 1; in xgbe_phy_find_phy_device()
1115 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_external_phy() local
1119 phy_data->sfp_changed); in xgbe_phy_sfp_external_phy()
1120 if (!phy_data->sfp_changed) in xgbe_phy_sfp_external_phy()
1123 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_external_phy()
1125 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_sfp_external_phy()
1136 phy_data->sfp_phy_avail = 1; in xgbe_phy_sfp_external_phy()
1141 xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_rx_los() argument
1143 uint8_t *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_rx_los()
1148 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) in xgbe_phy_check_sfp_rx_los()
1151 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) in xgbe_phy_check_sfp_rx_los()
1158 xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_tx_fault() argument
1160 uint8_t *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_tx_fault()
1165 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) in xgbe_phy_check_sfp_tx_fault()
1168 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) in xgbe_phy_check_sfp_tx_fault()
1175 xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_mod_absent() argument
1177 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) in xgbe_phy_check_sfp_mod_absent()
1180 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) in xgbe_phy_check_sfp_mod_absent()
1189 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_parse_eeprom() local
1190 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_sfp_parse_eeprom()
1206 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); in xgbe_phy_sfp_parse_eeprom()
1207 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); in xgbe_phy_sfp_parse_eeprom()
1211 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; in xgbe_phy_sfp_parse_eeprom()
1212 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN]; in xgbe_phy_sfp_parse_eeprom()
1214 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; in xgbe_phy_sfp_parse_eeprom()
1222 (phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE)) && in xgbe_phy_sfp_parse_eeprom()
1224 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; in xgbe_phy_sfp_parse_eeprom()
1226 phy_data->sfp_base = XGBE_SFP_BASE_10000_SR; in xgbe_phy_sfp_parse_eeprom()
1228 phy_data->sfp_base = XGBE_SFP_BASE_10000_LR; in xgbe_phy_sfp_parse_eeprom()
1230 phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM; in xgbe_phy_sfp_parse_eeprom()
1232 phy_data->sfp_base = XGBE_SFP_BASE_10000_ER; in xgbe_phy_sfp_parse_eeprom()
1234 phy_data->sfp_base = XGBE_SFP_BASE_1000_SX; in xgbe_phy_sfp_parse_eeprom()
1236 phy_data->sfp_base = XGBE_SFP_BASE_1000_LX; in xgbe_phy_sfp_parse_eeprom()
1238 phy_data->sfp_base = XGBE_SFP_BASE_1000_CX; in xgbe_phy_sfp_parse_eeprom()
1240 phy_data->sfp_base = XGBE_SFP_BASE_1000_T; in xgbe_phy_sfp_parse_eeprom()
1242 switch (phy_data->sfp_base) { in xgbe_phy_sfp_parse_eeprom()
1244 phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000; in xgbe_phy_sfp_parse_eeprom()
1249 phy_data->sfp_speed = XGBE_SFP_SPEED_1000; in xgbe_phy_sfp_parse_eeprom()
1256 phy_data->sfp_speed = XGBE_SFP_SPEED_10000; in xgbe_phy_sfp_parse_eeprom()
1262 "rx_los 0x%x tx_fault 0x%x\n", __func__, phy_data->sfp_base, in xgbe_phy_sfp_parse_eeprom()
1263 phy_data->sfp_speed, phy_data->sfp_cable, phy_data->sfp_rx_los, in xgbe_phy_sfp_parse_eeprom()
1264 phy_data->sfp_tx_fault); in xgbe_phy_sfp_parse_eeprom()
1325 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_read_eeprom() local
1366 if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) { in xgbe_phy_sfp_read_eeprom()
1367 phy_data->sfp_changed = 1; in xgbe_phy_sfp_read_eeprom()
1371 memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); in xgbe_phy_sfp_read_eeprom()
1375 phy_data->sfp_changed = 0; in xgbe_phy_sfp_read_eeprom()
1386 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_signals() local
1388 int ret, prev_sfp_inputs = phy_data->port_sfp_inputs; in xgbe_phy_sfp_signals()
1389 int shift = GPIO_MASK_WIDTH * (3 - phy_data->port_id); in xgbe_phy_sfp_signals()
1393 __func__, phy_data->sfp_mod_absent, phy_data->sfp_gpio_address); in xgbe_phy_sfp_signals()
1396 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, &gpio_reg, in xgbe_phy_sfp_signals()
1400 __func__, phy_data->sfp_gpio_address); in xgbe_phy_sfp_signals()
1404 phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_phy_sfp_signals()
1405 phy_data->port_sfp_inputs = (phy_data->sfp_gpio_inputs >> shift) & 0x0F; in xgbe_phy_sfp_signals()
1407 if (prev_sfp_inputs != phy_data->port_sfp_inputs) in xgbe_phy_sfp_signals()
1409 phy_data->port_sfp_inputs); in xgbe_phy_sfp_signals()
1411 phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); in xgbe_phy_sfp_signals()
1414 __func__, phy_data->sfp_mod_absent, phy_data->sfp_gpio_inputs); in xgbe_phy_sfp_signals()
1420 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_mod_absent() local
1424 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_mod_absent()
1425 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_mod_absent()
1426 memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom)); in xgbe_phy_sfp_mod_absent()
1430 xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data) in xgbe_phy_sfp_reset() argument
1432 phy_data->sfp_rx_los = 0; in xgbe_phy_sfp_reset()
1433 phy_data->sfp_tx_fault = 0; in xgbe_phy_sfp_reset()
1434 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_reset()
1435 phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN; in xgbe_phy_sfp_reset()
1436 phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN; in xgbe_phy_sfp_reset()
1437 phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN; in xgbe_phy_sfp_reset()
1443 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_detect() local
1444 int ret, prev_sfp_state = phy_data->sfp_mod_absent; in xgbe_phy_sfp_detect()
1447 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1455 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_detect()
1456 if (prev_sfp_state != phy_data->sfp_mod_absent) in xgbe_phy_sfp_detect()
1466 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1488 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_eeprom() local
1493 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_module_eeprom()
1498 if (phy_data->sfp_mod_absent) { in xgbe_phy_module_eeprom()
1556 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_info() local
1558 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_module_info()
1561 if (phy_data->sfp_mod_absent) in xgbe_phy_module_info()
1570 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_phydev_flowctrl() local
1575 if (!phy_data->phydev) in xgbe_phy_phydev_flowctrl()
1683 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an73_redrv_outcome() local
1707 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1716 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1724 switch (phy_data->sfp_base) { in xgbe_phy_an73_redrv_outcome()
1726 if ((phy_data->phydev) && in xgbe_phy_an73_redrv_outcome()
1741 if ((phy_data->phydev) && in xgbe_phy_an73_redrv_outcome()
1845 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_advertising() local
1850 if (!phy_data->redrv) in xgbe_phy_an_advertising()
1861 switch (phy_data->port_mode) { in xgbe_phy_an_advertising()
1874 if ((phy_data->phydev) && in xgbe_phy_an_advertising()
1884 switch (phy_data->sfp_base) { in xgbe_phy_an_advertising()
1905 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_config() local
1915 if (!phy_data->phydev) in xgbe_phy_an_config()
1923 xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data) in xgbe_phy_an_sfp_mode() argument
1925 switch (phy_data->sfp_base) { in xgbe_phy_an_sfp_mode()
1940 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_mode() local
1943 if (phy_data->redrv) in xgbe_phy_an_mode()
1946 switch (phy_data->port_mode) { in xgbe_phy_an_mode()
1962 return (xgbe_phy_an_sfp_mode(phy_data)); in xgbe_phy_an_mode()
1972 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_mdio() local
1975 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_mdio()
1978 return (pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr, in xgbe_phy_set_redrv_mode_mdio()
1986 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_i2c() local
1991 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_i2c()
2001 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode() local
2005 if (!phy_data->redrv) in xgbe_phy_set_redrv_mode()
2009 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_set_redrv_mode()
2010 (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) && in xgbe_phy_set_redrv_mode()
2011 (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR)) in xgbe_phy_set_redrv_mode()
2018 axgbe_printf(2, "%s: redrv_if set: %d\n", __func__, phy_data->redrv_if); in xgbe_phy_set_redrv_mode()
2019 if (phy_data->redrv_if) in xgbe_phy_set_redrv_mode()
2073 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_power_off() local
2078 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_power_off()
2086 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfi_mode() local
2091 axgbe_printf(3, "%s: cable %d len %d\n", __func__, phy_data->sfp_cable, in xgbe_phy_sfi_mode()
2092 phy_data->sfp_cable_len); in xgbe_phy_sfi_mode()
2094 if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) in xgbe_phy_sfi_mode()
2097 if (phy_data->sfp_cable_len <= 1) in xgbe_phy_sfi_mode()
2099 else if (phy_data->sfp_cable_len <= 3) in xgbe_phy_sfi_mode()
2105 phy_data->cur_mode = XGBE_MODE_SFI; in xgbe_phy_sfi_mode()
2113 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_x_mode() local
2120 phy_data->cur_mode = XGBE_MODE_X; in xgbe_phy_x_mode()
2128 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_1000_mode() local
2135 phy_data->cur_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_sgmii_1000_mode()
2143 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_100_mode() local
2150 phy_data->cur_mode = XGBE_MODE_SGMII_100; in xgbe_phy_sgmii_100_mode()
2158 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kr_mode() local
2165 phy_data->cur_mode = XGBE_MODE_KR; in xgbe_phy_kr_mode()
2173 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_2500_mode() local
2180 phy_data->cur_mode = XGBE_MODE_KX_2500; in xgbe_phy_kx_2500_mode()
2188 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_1000_mode() local
2195 phy_data->cur_mode = XGBE_MODE_KX_1000; in xgbe_phy_kx_1000_mode()
2203 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cur_mode() local
2205 return (phy_data->cur_mode); in xgbe_phy_cur_mode()
2211 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_baset_mode() local
2214 if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_switch_baset_mode()
2249 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_mode() local
2251 switch (phy_data->port_mode) { in xgbe_phy_switch_mode()
2271 xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_basex_mode() argument
2284 xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_baset_mode() argument
2301 xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_sfp_mode() argument
2307 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_get_sfp_mode()
2346 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_mode() local
2348 switch (phy_data->port_mode) { in xgbe_phy_get_mode()
2356 return (xgbe_phy_get_baset_mode(phy_data, speed)); in xgbe_phy_get_mode()
2359 return (xgbe_phy_get_basex_mode(phy_data, speed)); in xgbe_phy_get_mode()
2361 return (xgbe_phy_get_sfp_mode(phy_data, speed)); in xgbe_phy_get_mode()
2400 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_type() local
2404 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) in xgbe_phy_get_type()
2406 else if(phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_get_type()
2408 else if(phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R) in xgbe_phy_get_type()
2410 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2416 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE_2500) in xgbe_phy_get_type()
2422 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) in xgbe_phy_get_type()
2424 else if(phy_data->port_mode == XGBE_PORT_MODE_1000BASE_T) in xgbe_phy_get_type()
2427 else if(phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X) in xgbe_phy_get_type()
2432 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2438 if(phy_data->port_mode == XGBE_PORT_MODE_NBASE_T) in xgbe_phy_get_type()
2440 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2512 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_sfp_mode() local
2516 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2521 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2526 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2531 if (phy_data->sfp_mod_absent) in xgbe_phy_use_sfp_mode()
2576 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_mode() local
2578 switch (phy_data->port_mode) { in xgbe_phy_use_mode()
2600 xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_basex_mode() argument
2605 return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X); in xgbe_phy_valid_speed_basex_mode()
2607 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R); in xgbe_phy_valid_speed_basex_mode()
2614 xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_baset_mode() argument
2622 return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T); in xgbe_phy_valid_speed_baset_mode()
2624 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T); in xgbe_phy_valid_speed_baset_mode()
2631 xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_sfp_mode() argument
2636 return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000); in xgbe_phy_valid_speed_sfp_mode()
2638 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) || in xgbe_phy_valid_speed_sfp_mode()
2639 (phy_data->sfp_speed == XGBE_SFP_SPEED_1000)); in xgbe_phy_valid_speed_sfp_mode()
2641 return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000); in xgbe_phy_valid_speed_sfp_mode()
2675 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_valid_speed() local
2677 switch (phy_data->port_mode) { in xgbe_phy_valid_speed()
2685 return (xgbe_phy_valid_speed_baset_mode(phy_data, speed)); in xgbe_phy_valid_speed()
2688 return (xgbe_phy_valid_speed_basex_mode(phy_data, speed)); in xgbe_phy_valid_speed()
2690 return (xgbe_phy_valid_speed_sfp_mode(phy_data, speed)); in xgbe_phy_valid_speed()
2831 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_link_status() local
2838 if (phy_data->port_mode == XGBE_PORT_MODE_SFP) { in xgbe_phy_link_status()
2843 if (phy_data->sfp_changed) { in xgbe_phy_link_status()
2849 if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) { in xgbe_phy_link_status()
2851 __func__, phy_data->sfp_mod_absent, in xgbe_phy_link_status()
2852 phy_data->sfp_rx_los); in xgbe_phy_link_status()
2887 if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { in xgbe_phy_link_status()
2889 phy_data->rrc_count); in xgbe_phy_link_status()
2890 phy_data->rrc_count = 0; in xgbe_phy_link_status()
2905 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_gpio_setup() local
2907 phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_sfp_gpio_setup()
2909 phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2911 phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2913 phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2915 phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2917 phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
2920 DBGPR("SFP: gpio_address=%#x\n", phy_data->sfp_gpio_address); in xgbe_phy_sfp_gpio_setup()
2921 DBGPR("SFP: gpio_mask=%#x\n", phy_data->sfp_gpio_mask); in xgbe_phy_sfp_gpio_setup()
2922 DBGPR("SFP: gpio_rx_los=%u\n", phy_data->sfp_gpio_rx_los); in xgbe_phy_sfp_gpio_setup()
2923 DBGPR("SFP: gpio_tx_fault=%u\n", phy_data->sfp_gpio_tx_fault); in xgbe_phy_sfp_gpio_setup()
2925 phy_data->sfp_gpio_mod_absent); in xgbe_phy_sfp_gpio_setup()
2927 phy_data->sfp_gpio_rate_select); in xgbe_phy_sfp_gpio_setup()
2933 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_comm_setup() local
2941 phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; in xgbe_phy_sfp_comm_setup()
2942 phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; in xgbe_phy_sfp_comm_setup()
2943 phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, in xgbe_phy_sfp_comm_setup()
2946 DBGPR("SFP: mux_address=%#x\n", phy_data->sfp_mux_address); in xgbe_phy_sfp_comm_setup()
2947 DBGPR("SFP: mux_channel=%u\n", phy_data->sfp_mux_channel); in xgbe_phy_sfp_comm_setup()
2960 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_int_mdio_reset() local
2963 ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2967 ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
2975 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_i2c_mdio_reset() local
2981 ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
2993 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
2994 gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2996 gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
2999 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
3005 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
3006 gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3008 gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3011 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
3020 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset() local
3023 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset()
3030 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) in xgbe_phy_mdio_reset()
3032 else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset()
3041 xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) in xgbe_phy_redrv_error() argument
3043 if (!phy_data->redrv) in xgbe_phy_redrv_error()
3046 if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX) in xgbe_phy_redrv_error()
3049 switch (phy_data->redrv_model) { in xgbe_phy_redrv_error()
3051 if (phy_data->redrv_lane > 3) in xgbe_phy_redrv_error()
3055 if (phy_data->redrv_lane > 1) in xgbe_phy_redrv_error()
3068 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset_setup() local
3070 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset_setup()
3073 phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); in xgbe_phy_mdio_reset_setup()
3074 switch (phy_data->mdio_reset) { in xgbe_phy_mdio_reset_setup()
3081 phy_data->mdio_reset); in xgbe_phy_mdio_reset_setup()
3085 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { in xgbe_phy_mdio_reset_setup()
3086 phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_mdio_reset_setup()
3088 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
3090 } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset_setup()
3091 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
3100 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_port_mode_mismatch() local
3102 switch (phy_data->port_mode) { in xgbe_phy_port_mode_mismatch()
3104 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3105 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3109 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) in xgbe_phy_port_mode_mismatch()
3113 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3114 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)) in xgbe_phy_port_mode_mismatch()
3118 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_port_mode_mismatch()
3122 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3123 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3124 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)) in xgbe_phy_port_mode_mismatch()
3128 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3129 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3130 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3134 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_port_mode_mismatch()
3138 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3139 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3140 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3153 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_conn_type_mismatch() local
3155 switch (phy_data->port_mode) { in xgbe_phy_conn_type_mismatch()
3158 if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE) in xgbe_phy_conn_type_mismatch()
3166 if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO) in xgbe_phy_conn_type_mismatch()
3170 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_conn_type_mismatch()
3195 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_track() local
3198 __func__, pdata->sysctl_an_cdr_workaround, phy_data->phy_cdr_notrack); in xgbe_phy_cdr_track()
3203 if (!phy_data->phy_cdr_notrack) in xgbe_phy_cdr_track()
3206 DELAY(phy_data->phy_cdr_delay + 500); in xgbe_phy_cdr_track()
3211 phy_data->phy_cdr_notrack = 0; in xgbe_phy_cdr_track()
3219 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_notrack() local
3222 __func__, pdata->sysctl_an_cdr_workaround, phy_data->phy_cdr_notrack); in xgbe_phy_cdr_notrack()
3227 if (phy_data->phy_cdr_notrack) in xgbe_phy_cdr_notrack()
3235 phy_data->phy_cdr_notrack = 1; in xgbe_phy_cdr_notrack()
3255 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_post() local
3260 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_post()
3270 if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) in xgbe_phy_an_post()
3271 phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; in xgbe_phy_an_post()
3273 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_an_post()
3285 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_pre() local
3290 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_pre()
3303 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_stop() local
3309 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_stop()
3325 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_start() local
3329 phy_data->redrv, phy_data->redrv_if, phy_data->start_mode); in xgbe_phy_start()
3339 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_start()
3340 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_start()
3344 phy_data->redrv_addr); in xgbe_phy_start()
3350 xgbe_phy_set_mode(pdata, phy_data->start_mode); in xgbe_phy_start()
3356 switch (phy_data->port_mode) { in xgbe_phy_start()
3384 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_reset() local
3389 cur_mode = phy_data->cur_mode; in xgbe_phy_reset()
3394 if (!phy_data->phydev) { in xgbe_phy_reset()
3462 free(pdata->phy_data, M_AXGBE); in xgbe_phy_exit()
3468 struct xgbe_phy_data *phy_data; in xgbe_phy_init() local
3486 phy_data = malloc(sizeof(*phy_data), M_AXGBE, M_WAITOK | M_ZERO); in xgbe_phy_init()
3487 if (!phy_data) in xgbe_phy_init()
3489 pdata->phy_data = phy_data; in xgbe_phy_init()
3491 phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); in xgbe_phy_init()
3492 phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); in xgbe_phy_init()
3493 phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); in xgbe_phy_init()
3494 phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); in xgbe_phy_init()
3495 phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); in xgbe_phy_init()
3497 pdata->mdio_addr = phy_data->mdio_addr; in xgbe_phy_init()
3498 DBGPR("port mode=%u\n", phy_data->port_mode); in xgbe_phy_init()
3499 DBGPR("port id=%u\n", phy_data->port_id); in xgbe_phy_init()
3500 DBGPR("port speeds=%#x\n", phy_data->port_speeds); in xgbe_phy_init()
3501 DBGPR("conn type=%u\n", phy_data->conn_type); in xgbe_phy_init()
3502 DBGPR("mdio addr=%u\n", phy_data->mdio_addr); in xgbe_phy_init()
3504 phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); in xgbe_phy_init()
3505 phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); in xgbe_phy_init()
3506 phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); in xgbe_phy_init()
3507 phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); in xgbe_phy_init()
3508 phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); in xgbe_phy_init()
3510 if (phy_data->redrv) { in xgbe_phy_init()
3512 DBGPR("redrv i/f=%u\n", phy_data->redrv_if); in xgbe_phy_init()
3513 DBGPR("redrv addr=%#x\n", phy_data->redrv_addr); in xgbe_phy_init()
3514 DBGPR("redrv lane=%u\n", phy_data->redrv_lane); in xgbe_phy_init()
3515 DBGPR("redrv model=%u\n", phy_data->redrv_model); in xgbe_phy_init()
3519 phy_data->redrv_addr, phy_data->redrv_if); in xgbe_phy_init()
3523 "(%#x/%#x)\n", phy_data->port_mode, phy_data->conn_type); in xgbe_phy_init()
3530 "(%#x/%#x)\n", phy_data->port_mode, phy_data->port_speeds); in xgbe_phy_init()
3542 if (xgbe_phy_redrv_error(phy_data)) { in xgbe_phy_init()
3546 pdata->kr_redrv = phy_data->redrv; in xgbe_phy_init()
3549 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_init()
3554 DBGPR("%s: port mode %d\n", __func__, phy_data->port_mode); in xgbe_phy_init()
3555 switch (phy_data->port_mode) { in xgbe_phy_init()
3562 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3564 phy_data->start_mode = XGBE_MODE_KX_1000; in xgbe_phy_init()
3566 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3570 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3573 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3580 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3582 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3591 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3593 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3595 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3597 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3600 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3610 phy_data->start_mode = XGBE_MODE_X; in xgbe_phy_init()
3612 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3621 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3623 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3625 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3627 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3629 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { in xgbe_phy_init()
3631 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3634 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3643 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3645 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3647 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3649 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3651 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3653 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3656 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3671 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3673 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3683 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_init()
3684 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3685 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_init()
3686 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3687 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_init()
3688 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3690 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3694 phy_data->start_mode, phy_data->phydev_mode, in xgbe_phy_init()
3702 phy_data->start_mode, phy_data->phydev_mode, pdata->phy.advertising); in xgbe_phy_init()
3705 phy_data->conn_type, phy_data->phydev_mode); in xgbe_phy_init()
3706 if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) && in xgbe_phy_init()
3707 (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) { in xgbe_phy_init()
3708 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_init()
3709 phy_data->phydev_mode); in xgbe_phy_init()
3712 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_init()
3717 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_init()
3718 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_init()
3722 phy_data->redrv_addr); in xgbe_phy_init()
3727 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_init()
3729 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_init()