Lines Matching refs:phy_data
436 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_redrv_write() local
461 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
475 i2c_op.target = phy_data->redrv_addr; in xgbe_phy_redrv_write()
558 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_put_mux() local
562 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_put_mux()
568 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_put_mux()
578 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_get_mux() local
582 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) in xgbe_phy_sfp_get_mux()
586 mux_channel = 1 << phy_data->sfp_mux_channel; in xgbe_phy_sfp_get_mux()
588 i2c_op.target = phy_data->sfp_mux_address; in xgbe_phy_sfp_get_mux()
604 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_comm_ownership() local
620 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id); in xgbe_phy_get_comm_ownership()
650 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_write() local
653 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_write()
656 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_write()
689 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_write() local
697 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_write()
699 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_write()
712 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_mii_read() local
715 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) in xgbe_phy_mdio_mii_read()
718 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) in xgbe_phy_mdio_mii_read()
751 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mii_read() local
759 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_mii_read()
761 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) in xgbe_phy_mii_read()
774 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_phy_settings() local
776 if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed) in xgbe_phy_sfp_phy_settings()
781 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_phy_settings()
798 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
818 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) { in xgbe_phy_sfp_phy_settings()
819 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_sfp_phy_settings()
821 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
824 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_sfp_phy_settings()
844 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_sfp_phy_settings()
845 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
874 switch (phy_data->sfp_base) { in xgbe_phy_sfp_phy_settings()
889 phy_data->sfp_base, pdata->phy.pause_autoneg, in xgbe_phy_sfp_phy_settings()
929 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_free_phy_device() local
931 if (phy_data->phydev) in xgbe_phy_free_phy_device()
932 phy_data->phydev = 0; in xgbe_phy_free_phy_device()
943 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_finisar_phy_quirks() local
944 unsigned int phy_id = phy_data->phy_id; in xgbe_phy_finisar_phy_quirks()
946 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_finisar_phy_quirks()
953 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x16, 0x0001); in xgbe_phy_finisar_phy_quirks()
954 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
955 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x16, 0x0000); in xgbe_phy_finisar_phy_quirks()
958 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1b, 0x9084); in xgbe_phy_finisar_phy_quirks()
959 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x09, 0x0e00); in xgbe_phy_finisar_phy_quirks()
960 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x8140); in xgbe_phy_finisar_phy_quirks()
961 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x04, 0x0d01); in xgbe_phy_finisar_phy_quirks()
962 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, 0x9140); in xgbe_phy_finisar_phy_quirks()
972 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_belfuse_phy_quirks() local
973 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_belfuse_phy_quirks()
974 unsigned int phy_id = phy_data->phy_id; in xgbe_phy_belfuse_phy_quirks()
977 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_belfuse_phy_quirks()
995 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x18, 0x7007); in xgbe_phy_belfuse_phy_quirks()
996 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x18); in xgbe_phy_belfuse_phy_quirks()
997 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x18, reg & ~0x0080); in xgbe_phy_belfuse_phy_quirks()
1000 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
1001 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
1004 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
1008 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
1009 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg | 0x00800); in xgbe_phy_belfuse_phy_quirks()
1012 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
1013 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
1016 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
1020 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
1021 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
1024 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x7c00); in xgbe_phy_belfuse_phy_quirks()
1025 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x1c); in xgbe_phy_belfuse_phy_quirks()
1028 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x1c, 0x8000 | 0x7c00 | in xgbe_phy_belfuse_phy_quirks()
1032 reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x00); in xgbe_phy_belfuse_phy_quirks()
1033 xgbe_phy_mii_write(pdata, phy_data->mdio_addr, 0x00, reg & ~0x00800); in xgbe_phy_belfuse_phy_quirks()
1053 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_get_phy_id() local
1057 phy_reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x02); in xgbe_get_phy_id()
1062 phy_data->phy_id = (phy_reg & 0xffff) << 16; in xgbe_get_phy_id()
1064 phy_reg = xgbe_phy_mii_read(pdata, phy_data->mdio_addr, 0x03); in xgbe_get_phy_id()
1069 phy_data->phy_id |= (phy_reg & 0xffff); in xgbe_get_phy_id()
1083 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_find_phy_device() local
1087 "0x%08x\n", __func__, phy_data->phydev, phy_data->phydev_mode, in xgbe_phy_find_phy_device()
1088 phy_data->sfp_phy_avail, phy_data->phy_id); in xgbe_phy_find_phy_device()
1091 if (phy_data->phydev) { in xgbe_phy_find_phy_device()
1100 if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE) { in xgbe_phy_find_phy_device()
1102 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1107 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_find_phy_device()
1108 !phy_data->sfp_phy_avail) { in xgbe_phy_find_phy_device()
1110 phy_data->port_mode, phy_data->sfp_phy_avail); in xgbe_phy_find_phy_device()
1115 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_find_phy_device()
1116 phy_data->phydev_mode); in xgbe_phy_find_phy_device()
1119 phy_data->mdio_addr, phy_data->phydev_mode, ret); in xgbe_phy_find_phy_device()
1126 axgbe_printf(2, "Get phy_id 0x%08x\n", phy_data->phy_id); in xgbe_phy_find_phy_device()
1128 phy_data->phydev = 1; in xgbe_phy_find_phy_device()
1137 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_external_phy() local
1141 phy_data->sfp_changed); in xgbe_phy_sfp_external_phy()
1142 if (!phy_data->sfp_phy_retries && !phy_data->sfp_changed) in xgbe_phy_sfp_external_phy()
1145 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_external_phy()
1147 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_sfp_external_phy()
1153 phy_data->sfp_phy_retries++; in xgbe_phy_sfp_external_phy()
1154 if (phy_data->sfp_phy_retries >= XGBE_SFP_PHY_RETRY_MAX) in xgbe_phy_sfp_external_phy()
1155 phy_data->sfp_phy_retries = 0; in xgbe_phy_sfp_external_phy()
1161 phy_data->sfp_phy_avail = 1; in xgbe_phy_sfp_external_phy()
1176 xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_rx_los() argument
1178 uint8_t *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_rx_los()
1183 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) in xgbe_phy_check_sfp_rx_los()
1186 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) in xgbe_phy_check_sfp_rx_los()
1193 xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_tx_fault() argument
1195 uint8_t *sfp_extd = phy_data->sfp_eeprom.extd; in xgbe_phy_check_sfp_tx_fault()
1200 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) in xgbe_phy_check_sfp_tx_fault()
1203 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) in xgbe_phy_check_sfp_tx_fault()
1210 xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) in xgbe_phy_check_sfp_mod_absent() argument
1212 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) in xgbe_phy_check_sfp_mod_absent()
1215 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) in xgbe_phy_check_sfp_mod_absent()
1224 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_parse_eeprom() local
1225 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; in xgbe_phy_sfp_parse_eeprom()
1242 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); in xgbe_phy_sfp_parse_eeprom()
1243 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); in xgbe_phy_sfp_parse_eeprom()
1247 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; in xgbe_phy_sfp_parse_eeprom()
1248 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN]; in xgbe_phy_sfp_parse_eeprom()
1250 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; in xgbe_phy_sfp_parse_eeprom()
1262 (phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE)) && in xgbe_phy_sfp_parse_eeprom()
1265 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; in xgbe_phy_sfp_parse_eeprom()
1267 phy_data->sfp_base = XGBE_SFP_BASE_10000_SR; in xgbe_phy_sfp_parse_eeprom()
1269 phy_data->sfp_base = XGBE_SFP_BASE_10000_LR; in xgbe_phy_sfp_parse_eeprom()
1271 phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM; in xgbe_phy_sfp_parse_eeprom()
1273 phy_data->sfp_base = XGBE_SFP_BASE_10000_ER; in xgbe_phy_sfp_parse_eeprom()
1275 phy_data->sfp_base = XGBE_SFP_BASE_1000_SX; in xgbe_phy_sfp_parse_eeprom()
1277 phy_data->sfp_base = XGBE_SFP_BASE_1000_LX; in xgbe_phy_sfp_parse_eeprom()
1279 phy_data->sfp_base = XGBE_SFP_BASE_1000_CX; in xgbe_phy_sfp_parse_eeprom()
1281 phy_data->sfp_base = XGBE_SFP_BASE_1000_T; in xgbe_phy_sfp_parse_eeprom()
1283 phy_data->sfp_base = XGBE_SFP_BASE_100_LX10; in xgbe_phy_sfp_parse_eeprom()
1285 phy_data->sfp_base = XGBE_SFP_BASE_100_FX; in xgbe_phy_sfp_parse_eeprom()
1289 phy_data->sfp_base = XGBE_SFP_BASE_100_BX; in xgbe_phy_sfp_parse_eeprom()
1292 phy_data->sfp_base = XGBE_SFP_BASE_1000_BX; in xgbe_phy_sfp_parse_eeprom()
1295 phy_data->sfp_base = XGBE_SFP_BASE_PX; in xgbe_phy_sfp_parse_eeprom()
1300 phy_data->sfp_base = XGBE_SFP_BASE_1000_BX; in xgbe_phy_sfp_parse_eeprom()
1305 phy_data->sfp_base = XGBE_SFP_BASE_100_BX; in xgbe_phy_sfp_parse_eeprom()
1307 switch (phy_data->sfp_base) { in xgbe_phy_sfp_parse_eeprom()
1311 phy_data->sfp_speed = XGBE_SFP_SPEED_100; in xgbe_phy_sfp_parse_eeprom()
1313 phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000; in xgbe_phy_sfp_parse_eeprom()
1320 phy_data->sfp_speed = XGBE_SFP_SPEED_1000; in xgbe_phy_sfp_parse_eeprom()
1327 phy_data->sfp_speed = XGBE_SFP_SPEED_10000; in xgbe_phy_sfp_parse_eeprom()
1333 "rx_los 0x%x tx_fault 0x%x\n", __func__, phy_data->sfp_base, in xgbe_phy_sfp_parse_eeprom()
1334 phy_data->sfp_speed, phy_data->sfp_cable, phy_data->sfp_rx_los, in xgbe_phy_sfp_parse_eeprom()
1335 phy_data->sfp_tx_fault); in xgbe_phy_sfp_parse_eeprom()
1396 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_read_eeprom() local
1438 if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) { in xgbe_phy_sfp_read_eeprom()
1439 phy_data->sfp_changed = 1; in xgbe_phy_sfp_read_eeprom()
1443 memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); in xgbe_phy_sfp_read_eeprom()
1447 phy_data->sfp_changed = 0; in xgbe_phy_sfp_read_eeprom()
1458 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_signals() local
1460 int ret, prev_sfp_inputs = phy_data->port_sfp_inputs; in xgbe_phy_sfp_signals()
1461 int shift = GPIO_MASK_WIDTH * (3 - phy_data->port_id); in xgbe_phy_sfp_signals()
1465 __func__, phy_data->sfp_mod_absent, phy_data->sfp_gpio_address); in xgbe_phy_sfp_signals()
1474 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, &gpio_reg, in xgbe_phy_sfp_signals()
1478 __func__, phy_data->sfp_gpio_address); in xgbe_phy_sfp_signals()
1482 phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_phy_sfp_signals()
1483 phy_data->port_sfp_inputs = (phy_data->sfp_gpio_inputs >> shift) & 0x0F; in xgbe_phy_sfp_signals()
1485 if (prev_sfp_inputs != phy_data->port_sfp_inputs) in xgbe_phy_sfp_signals()
1487 phy_data->port_sfp_inputs); in xgbe_phy_sfp_signals()
1489 phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); in xgbe_phy_sfp_signals()
1492 __func__, phy_data->sfp_mod_absent, phy_data->sfp_gpio_inputs); in xgbe_phy_sfp_signals()
1501 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_read_gpio_expander() local
1513 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, in xgbe_read_gpio_expander()
1523 phy_data->sfp_gpio_outputs = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_read_gpio_expander()
1525 phy_data->sfp_gpio_polarity = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_read_gpio_expander()
1527 phy_data->sfp_gpio_configuration = (gpio_ports[1] << 8) | gpio_ports[0]; in xgbe_read_gpio_expander()
1542 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_log_gpio_expander() local
1544 axgbe_printf(1, "Input port registers: 0x%x\n", phy_data->sfp_gpio_inputs); in xgbe_log_gpio_expander()
1545 axgbe_printf(1, "Output port registers: 0x%x\n", phy_data->sfp_gpio_outputs); in xgbe_log_gpio_expander()
1546 axgbe_printf(1, "Polarity port registers: 0x%x\n", phy_data->sfp_gpio_polarity); in xgbe_log_gpio_expander()
1547 axgbe_printf(1, "Configuration port registers: 0x%x\n", phy_data->sfp_gpio_configuration); in xgbe_log_gpio_expander()
1553 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_validate_gpio_expander() local
1555 int shift = GPIO_MASK_WIDTH * (3 - phy_data->port_id); in xgbe_phy_validate_gpio_expander()
1556 int rx_los_pos = (1 << phy_data->sfp_gpio_rx_los); in xgbe_phy_validate_gpio_expander()
1557 int tx_fault_pos = (1 << phy_data->sfp_gpio_tx_fault); in xgbe_phy_validate_gpio_expander()
1558 int mod_abs_pos = (1 << phy_data->sfp_gpio_mod_absent); in xgbe_phy_validate_gpio_expander()
1577 if (phy_data->sfp_gpio_polarity) { in xgbe_phy_validate_gpio_expander()
1583 ret = xgbe_phy_i2c_write(pdata, phy_data->sfp_gpio_address, in xgbe_phy_validate_gpio_expander()
1593 config = phy_data->sfp_gpio_configuration; in xgbe_phy_validate_gpio_expander()
1605 ret = xgbe_phy_i2c_write(pdata, phy_data->sfp_gpio_address, in xgbe_phy_validate_gpio_expander()
1628 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_mod_absent() local
1632 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_mod_absent()
1633 phy_data->sfp_phy_avail = 0; in xgbe_phy_sfp_mod_absent()
1634 memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom)); in xgbe_phy_sfp_mod_absent()
1638 xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data) in xgbe_phy_sfp_reset() argument
1640 phy_data->sfp_rx_los = 0; in xgbe_phy_sfp_reset()
1641 phy_data->sfp_tx_fault = 0; in xgbe_phy_sfp_reset()
1642 phy_data->sfp_mod_absent = 1; in xgbe_phy_sfp_reset()
1643 phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN; in xgbe_phy_sfp_reset()
1644 phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN; in xgbe_phy_sfp_reset()
1645 phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN; in xgbe_phy_sfp_reset()
1651 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_detect() local
1652 int ret, prev_sfp_state = phy_data->sfp_mod_absent; in xgbe_phy_sfp_detect()
1660 if (phy_data->sfp_mod_absent) { in xgbe_phy_sfp_detect()
1661 if (prev_sfp_state != phy_data->sfp_mod_absent) in xgbe_phy_sfp_detect()
1676 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_sfp_detect()
1698 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_eeprom() local
1703 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_module_eeprom()
1708 if (phy_data->sfp_mod_absent) { in xgbe_phy_module_eeprom()
1766 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_module_info() local
1768 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) in xgbe_phy_module_info()
1771 if (phy_data->sfp_mod_absent) in xgbe_phy_module_info()
1780 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_phydev_flowctrl() local
1785 if (!phy_data->phydev) in xgbe_phy_phydev_flowctrl()
1893 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an73_redrv_outcome() local
1917 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1926 switch (phy_data->port_mode) { in xgbe_phy_an73_redrv_outcome()
1934 switch (phy_data->sfp_base) { in xgbe_phy_an73_redrv_outcome()
1936 if ((phy_data->phydev) && in xgbe_phy_an73_redrv_outcome()
1951 if ((phy_data->phydev) && in xgbe_phy_an73_redrv_outcome()
2055 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_advertising() local
2060 if (!phy_data->redrv) in xgbe_phy_an_advertising()
2071 switch (phy_data->port_mode) { in xgbe_phy_an_advertising()
2084 if ((phy_data->phydev) && in xgbe_phy_an_advertising()
2094 switch (phy_data->sfp_base) { in xgbe_phy_an_advertising()
2115 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_config() local
2125 if (!phy_data->phydev) in xgbe_phy_an_config()
2132 xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data) in xgbe_phy_an_sfp_mode() argument
2134 switch (phy_data->sfp_base) { in xgbe_phy_an_sfp_mode()
2149 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_mode() local
2152 if (phy_data->redrv) in xgbe_phy_an_mode()
2155 switch (phy_data->port_mode) { in xgbe_phy_an_mode()
2171 return (xgbe_phy_an_sfp_mode(phy_data)); in xgbe_phy_an_mode()
2181 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_mdio() local
2184 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_mdio()
2187 return (pdata->hw_if.write_ext_mii_regs(pdata, phy_data->redrv_addr, in xgbe_phy_set_redrv_mode_mdio()
2195 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode_i2c() local
2200 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); in xgbe_phy_set_redrv_mode_i2c()
2210 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_set_redrv_mode() local
2214 if (!phy_data->redrv) in xgbe_phy_set_redrv_mode()
2218 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && in xgbe_phy_set_redrv_mode()
2219 (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) && in xgbe_phy_set_redrv_mode()
2220 (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR)) in xgbe_phy_set_redrv_mode()
2227 axgbe_printf(2, "%s: redrv_if set: %d\n", __func__, phy_data->redrv_if); in xgbe_phy_set_redrv_mode()
2228 if (phy_data->redrv_if) in xgbe_phy_set_redrv_mode()
2323 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_power_off() local
2328 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_power_off()
2336 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfi_mode() local
2341 axgbe_printf(3, "%s: cable %d len %d\n", __func__, phy_data->sfp_cable, in xgbe_phy_sfi_mode()
2342 phy_data->sfp_cable_len); in xgbe_phy_sfi_mode()
2344 if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) in xgbe_phy_sfi_mode()
2347 if (phy_data->sfp_cable_len <= 1) in xgbe_phy_sfi_mode()
2349 else if (phy_data->sfp_cable_len <= 3) in xgbe_phy_sfi_mode()
2355 phy_data->cur_mode = XGBE_MODE_SFI; in xgbe_phy_sfi_mode()
2363 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_x_mode() local
2370 phy_data->cur_mode = XGBE_MODE_X; in xgbe_phy_x_mode()
2378 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_1000_mode() local
2385 phy_data->cur_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_sgmii_1000_mode()
2393 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sgmii_100_mode() local
2400 phy_data->cur_mode = XGBE_MODE_SGMII_100; in xgbe_phy_sgmii_100_mode()
2408 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kr_mode() local
2415 phy_data->cur_mode = XGBE_MODE_KR; in xgbe_phy_kr_mode()
2423 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_2500_mode() local
2430 phy_data->cur_mode = XGBE_MODE_KX_2500; in xgbe_phy_kx_2500_mode()
2438 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_kx_1000_mode() local
2445 phy_data->cur_mode = XGBE_MODE_KX_1000; in xgbe_phy_kx_1000_mode()
2453 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cur_mode() local
2455 return (phy_data->cur_mode); in xgbe_phy_cur_mode()
2461 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_baset_mode() local
2464 if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_switch_baset_mode()
2499 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_switch_mode() local
2501 switch (phy_data->port_mode) { in xgbe_phy_switch_mode()
2521 xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_basex_mode() argument
2534 xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_baset_mode() argument
2551 xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_get_sfp_mode() argument
2557 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_get_sfp_mode()
2596 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_mode() local
2598 switch (phy_data->port_mode) { in xgbe_phy_get_mode()
2606 return (xgbe_phy_get_baset_mode(phy_data, speed)); in xgbe_phy_get_mode()
2609 return (xgbe_phy_get_basex_mode(phy_data, speed)); in xgbe_phy_get_mode()
2611 return (xgbe_phy_get_sfp_mode(phy_data, speed)); in xgbe_phy_get_mode()
2650 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_get_type() local
2654 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) in xgbe_phy_get_type()
2656 else if(phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T) in xgbe_phy_get_type()
2658 else if(phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R) in xgbe_phy_get_type()
2660 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2666 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE_2500) in xgbe_phy_get_type()
2672 if (phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) in xgbe_phy_get_type()
2674 else if(phy_data->port_mode == XGBE_PORT_MODE_1000BASE_T) in xgbe_phy_get_type()
2677 else if(phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X) in xgbe_phy_get_type()
2682 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2688 if(phy_data->port_mode == XGBE_PORT_MODE_NBASE_T) in xgbe_phy_get_type()
2690 else if(phy_data->port_mode == XGBE_PORT_MODE_SFP) in xgbe_phy_get_type()
2762 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_sfp_mode() local
2766 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2771 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2776 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) in xgbe_phy_use_sfp_mode()
2781 if (phy_data->sfp_mod_absent) in xgbe_phy_use_sfp_mode()
2826 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_use_mode() local
2828 switch (phy_data->port_mode) { in xgbe_phy_use_mode()
2850 xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_basex_mode() argument
2855 return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X); in xgbe_phy_valid_speed_basex_mode()
2857 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R); in xgbe_phy_valid_speed_basex_mode()
2864 xgbe_phy_valid_speed_baset_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_baset_mode() argument
2872 return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T); in xgbe_phy_valid_speed_baset_mode()
2874 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T); in xgbe_phy_valid_speed_baset_mode()
2881 xgbe_phy_valid_speed_sfp_mode(struct xgbe_phy_data *phy_data, int speed) in xgbe_phy_valid_speed_sfp_mode() argument
2886 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100) || in xgbe_phy_valid_speed_sfp_mode()
2887 (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000)); in xgbe_phy_valid_speed_sfp_mode()
2889 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) || in xgbe_phy_valid_speed_sfp_mode()
2890 (phy_data->sfp_speed == XGBE_SFP_SPEED_1000)); in xgbe_phy_valid_speed_sfp_mode()
2892 return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000); in xgbe_phy_valid_speed_sfp_mode()
2926 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_valid_speed() local
2928 switch (phy_data->port_mode) { in xgbe_phy_valid_speed()
2936 return (xgbe_phy_valid_speed_baset_mode(phy_data, speed)); in xgbe_phy_valid_speed()
2939 return (xgbe_phy_valid_speed_basex_mode(phy_data, speed)); in xgbe_phy_valid_speed()
2941 return (xgbe_phy_valid_speed_sfp_mode(phy_data, speed)); in xgbe_phy_valid_speed()
3083 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_rrc() local
3086 if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { in xgbe_rrc()
3088 phy_data->rrc_count); in xgbe_rrc()
3089 phy_data->rrc_count = 0; in xgbe_rrc()
3102 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_link_status() local
3109 if (phy_data->port_mode == XGBE_PORT_MODE_SFP) { in xgbe_phy_link_status()
3114 if (phy_data->sfp_changed) { in xgbe_phy_link_status()
3120 if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) { in xgbe_phy_link_status()
3122 __func__, phy_data->sfp_mod_absent, in xgbe_phy_link_status()
3123 phy_data->sfp_rx_los); in xgbe_phy_link_status()
3125 if (!phy_data->sfp_mod_absent) { in xgbe_phy_link_status()
3133 if (phy_data->phydev || phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_link_status()
3183 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_gpio_setup() local
3185 phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_sfp_gpio_setup()
3187 phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
3189 phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
3191 phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
3193 phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
3195 phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_sfp_gpio_setup()
3198 DBGPR("SFP: gpio_address=%#x\n", phy_data->sfp_gpio_address); in xgbe_phy_sfp_gpio_setup()
3199 DBGPR("SFP: gpio_mask=%#x\n", phy_data->sfp_gpio_mask); in xgbe_phy_sfp_gpio_setup()
3200 DBGPR("SFP: gpio_rx_los=%u\n", phy_data->sfp_gpio_rx_los); in xgbe_phy_sfp_gpio_setup()
3201 DBGPR("SFP: gpio_tx_fault=%u\n", phy_data->sfp_gpio_tx_fault); in xgbe_phy_sfp_gpio_setup()
3203 phy_data->sfp_gpio_mod_absent); in xgbe_phy_sfp_gpio_setup()
3205 phy_data->sfp_gpio_rate_select); in xgbe_phy_sfp_gpio_setup()
3211 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_sfp_comm_setup() local
3219 phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; in xgbe_phy_sfp_comm_setup()
3220 phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; in xgbe_phy_sfp_comm_setup()
3221 phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, in xgbe_phy_sfp_comm_setup()
3224 DBGPR("SFP: mux_address=%#x\n", phy_data->sfp_mux_address); in xgbe_phy_sfp_comm_setup()
3225 DBGPR("SFP: mux_channel=%u\n", phy_data->sfp_mux_channel); in xgbe_phy_sfp_comm_setup()
3238 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_int_mdio_reset() local
3241 ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
3245 ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio); in xgbe_phy_int_mdio_reset()
3253 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_i2c_mdio_reset() local
3259 ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
3271 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
3272 gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3274 gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3277 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
3283 if (phy_data->mdio_reset_gpio < 8) in xgbe_phy_i2c_mdio_reset()
3284 gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3286 gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); in xgbe_phy_i2c_mdio_reset()
3289 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, in xgbe_phy_i2c_mdio_reset()
3298 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset() local
3301 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset()
3308 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) in xgbe_phy_mdio_reset()
3310 else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset()
3319 xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) in xgbe_phy_redrv_error() argument
3321 if (!phy_data->redrv) in xgbe_phy_redrv_error()
3324 if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX) in xgbe_phy_redrv_error()
3327 switch (phy_data->redrv_model) { in xgbe_phy_redrv_error()
3329 if (phy_data->redrv_lane > 3) in xgbe_phy_redrv_error()
3333 if (phy_data->redrv_lane > 1) in xgbe_phy_redrv_error()
3346 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_mdio_reset_setup() local
3348 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) in xgbe_phy_mdio_reset_setup()
3351 phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); in xgbe_phy_mdio_reset_setup()
3352 switch (phy_data->mdio_reset) { in xgbe_phy_mdio_reset_setup()
3359 phy_data->mdio_reset); in xgbe_phy_mdio_reset_setup()
3363 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { in xgbe_phy_mdio_reset_setup()
3364 phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + in xgbe_phy_mdio_reset_setup()
3366 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
3368 } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) in xgbe_phy_mdio_reset_setup()
3369 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, in xgbe_phy_mdio_reset_setup()
3378 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_port_mode_mismatch() local
3380 switch (phy_data->port_mode) { in xgbe_phy_port_mode_mismatch()
3382 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3383 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3387 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) in xgbe_phy_port_mode_mismatch()
3391 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3392 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)) in xgbe_phy_port_mode_mismatch()
3396 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_port_mode_mismatch()
3400 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3401 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3402 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)) in xgbe_phy_port_mode_mismatch()
3406 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3407 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3408 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3412 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_port_mode_mismatch()
3416 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || in xgbe_phy_port_mode_mismatch()
3417 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || in xgbe_phy_port_mode_mismatch()
3418 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) in xgbe_phy_port_mode_mismatch()
3431 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_conn_type_mismatch() local
3433 switch (phy_data->port_mode) { in xgbe_phy_conn_type_mismatch()
3436 if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE) in xgbe_phy_conn_type_mismatch()
3444 if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO) in xgbe_phy_conn_type_mismatch()
3448 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) in xgbe_phy_conn_type_mismatch()
3473 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_track() local
3476 __func__, pdata->sysctl_an_cdr_workaround, phy_data->phy_cdr_notrack); in xgbe_phy_cdr_track()
3481 if (!phy_data->phy_cdr_notrack) in xgbe_phy_cdr_track()
3484 DELAY(phy_data->phy_cdr_delay + 500); in xgbe_phy_cdr_track()
3489 phy_data->phy_cdr_notrack = 0; in xgbe_phy_cdr_track()
3497 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_cdr_notrack() local
3500 __func__, pdata->sysctl_an_cdr_workaround, phy_data->phy_cdr_notrack); in xgbe_phy_cdr_notrack()
3505 if (phy_data->phy_cdr_notrack) in xgbe_phy_cdr_notrack()
3513 phy_data->phy_cdr_notrack = 1; in xgbe_phy_cdr_notrack()
3533 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_post() local
3538 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_post()
3548 if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) in xgbe_phy_an_post()
3549 phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; in xgbe_phy_an_post()
3551 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_an_post()
3563 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_an_pre() local
3568 if (phy_data->cur_mode != XGBE_MODE_KR) in xgbe_phy_an_pre()
3581 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_stop() local
3587 xgbe_phy_sfp_reset(phy_data); in xgbe_phy_stop()
3603 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_start() local
3607 phy_data->redrv, phy_data->redrv_if, phy_data->start_mode); in xgbe_phy_start()
3617 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_start()
3618 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_start()
3622 phy_data->redrv_addr); in xgbe_phy_start()
3628 xgbe_phy_set_mode(pdata, phy_data->start_mode); in xgbe_phy_start()
3634 switch (phy_data->port_mode) { in xgbe_phy_start()
3645 phy_data->sfp_phy_retries = 0; in xgbe_phy_start()
3671 struct xgbe_phy_data *phy_data = pdata->phy_data; in xgbe_phy_reset() local
3676 cur_mode = phy_data->cur_mode; in xgbe_phy_reset()
3681 if (!phy_data->phydev) { in xgbe_phy_reset()
3749 free(pdata->phy_data, M_AXGBE); in xgbe_phy_exit()
3755 struct xgbe_phy_data *phy_data; in xgbe_phy_init() local
3773 phy_data = malloc(sizeof(*phy_data), M_AXGBE, M_WAITOK | M_ZERO); in xgbe_phy_init()
3774 pdata->phy_data = phy_data; in xgbe_phy_init()
3776 phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); in xgbe_phy_init()
3777 phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); in xgbe_phy_init()
3778 phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); in xgbe_phy_init()
3779 phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); in xgbe_phy_init()
3780 phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); in xgbe_phy_init()
3782 pdata->mdio_addr = phy_data->mdio_addr; in xgbe_phy_init()
3783 DBGPR("port mode=%u\n", phy_data->port_mode); in xgbe_phy_init()
3784 DBGPR("port id=%u\n", phy_data->port_id); in xgbe_phy_init()
3785 DBGPR("port speeds=%#x\n", phy_data->port_speeds); in xgbe_phy_init()
3786 DBGPR("conn type=%u\n", phy_data->conn_type); in xgbe_phy_init()
3787 DBGPR("mdio addr=%u\n", phy_data->mdio_addr); in xgbe_phy_init()
3789 phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); in xgbe_phy_init()
3790 phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); in xgbe_phy_init()
3791 phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); in xgbe_phy_init()
3792 phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); in xgbe_phy_init()
3793 phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); in xgbe_phy_init()
3795 if (phy_data->redrv) { in xgbe_phy_init()
3797 DBGPR("redrv i/f=%u\n", phy_data->redrv_if); in xgbe_phy_init()
3798 DBGPR("redrv addr=%#x\n", phy_data->redrv_addr); in xgbe_phy_init()
3799 DBGPR("redrv lane=%u\n", phy_data->redrv_lane); in xgbe_phy_init()
3800 DBGPR("redrv model=%u\n", phy_data->redrv_model); in xgbe_phy_init()
3804 phy_data->redrv_addr, phy_data->redrv_if); in xgbe_phy_init()
3808 "(%#x/%#x)\n", phy_data->port_mode, phy_data->conn_type); in xgbe_phy_init()
3815 "(%#x/%#x)\n", phy_data->port_mode, phy_data->port_speeds); in xgbe_phy_init()
3827 if (xgbe_phy_redrv_error(phy_data)) { in xgbe_phy_init()
3831 pdata->kr_redrv = phy_data->redrv; in xgbe_phy_init()
3834 phy_data->cur_mode = XGBE_MODE_UNKNOWN; in xgbe_phy_init()
3839 DBGPR("%s: port mode %d\n", __func__, phy_data->port_mode); in xgbe_phy_init()
3840 switch (phy_data->port_mode) { in xgbe_phy_init()
3847 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3849 phy_data->start_mode = XGBE_MODE_KX_1000; in xgbe_phy_init()
3851 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3855 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3858 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3865 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3867 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3876 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3878 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3880 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3882 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3885 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3895 phy_data->start_mode = XGBE_MODE_X; in xgbe_phy_init()
3897 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3906 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3908 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3910 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3912 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3914 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { in xgbe_phy_init()
3916 phy_data->start_mode = XGBE_MODE_KX_2500; in xgbe_phy_init()
3919 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3928 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { in xgbe_phy_init()
3930 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3932 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { in xgbe_phy_init()
3934 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3936 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { in xgbe_phy_init()
3938 phy_data->start_mode = XGBE_MODE_KR; in xgbe_phy_init()
3941 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; in xgbe_phy_init()
3956 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3958 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; in xgbe_phy_init()
3968 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) in xgbe_phy_init()
3969 phy_data->start_mode = XGBE_MODE_SGMII_100; in xgbe_phy_init()
3970 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) in xgbe_phy_init()
3971 phy_data->start_mode = XGBE_MODE_SGMII_1000; in xgbe_phy_init()
3972 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) in xgbe_phy_init()
3973 phy_data->start_mode = XGBE_MODE_SFI; in xgbe_phy_init()
3975 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; in xgbe_phy_init()
3979 phy_data->start_mode, phy_data->phydev_mode, in xgbe_phy_init()
3987 phy_data->start_mode, phy_data->phydev_mode, pdata->phy.advertising); in xgbe_phy_init()
3990 phy_data->conn_type, phy_data->phydev_mode); in xgbe_phy_init()
3991 if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) && in xgbe_phy_init()
3992 (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) { in xgbe_phy_init()
3993 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, in xgbe_phy_init()
3994 phy_data->phydev_mode); in xgbe_phy_init()
3997 phy_data->mdio_addr, phy_data->phydev_mode); in xgbe_phy_init()
4002 if (phy_data->redrv && !phy_data->redrv_if) { in xgbe_phy_init()
4003 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, in xgbe_phy_init()
4007 phy_data->redrv_addr); in xgbe_phy_init()
4012 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; in xgbe_phy_init()
4014 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { in xgbe_phy_init()