Lines Matching refs:sfp
19 #include "sfp.h"
229 struct sfp {
240 unsigned int (*get_state)(struct sfp *);
241 void (*set_state)(struct sfp *, unsigned int);
242 int (*read)(struct sfp *, bool, u8, void *, size_t);
243 int (*write)(struct sfp *, bool, u8, void *, size_t);
338 { .compatible = "sff,sfp", .data = &sfp_data, },
343 static void sfp_fixup_long_startup(struct sfp *sfp)
345 sfp->module_t_start_up = T_START_UP_BAD_GPON;
348 static void sfp_fixup_ignore_tx_fault(struct sfp *sfp)
350 sfp->tx_fault_ignore = true;
354 static void sfp_fixup_10gbaset_30m(struct sfp *sfp)
356 sfp->id.base.connector = SFF8024_CONNECTOR_RJ45;
357 sfp->id.base.extended_cc = SFF8024_ECC_10GBASE_T_SR;
360 static void sfp_fixup_rollball_proto(struct sfp *sfp, unsigned int secs)
362 sfp->mdio_protocol = MDIO_I2C_ROLLBALL;
363 sfp->module_t_wait = msecs_to_jiffies(secs * 1000);
366 static void sfp_fixup_fs_10gt(struct sfp *sfp)
368 sfp_fixup_10gbaset_30m(sfp);
371 sfp_fixup_rollball_proto(sfp, 4);
374 static void sfp_fixup_halny_gsfp(struct sfp *sfp)
380 sfp->state_hw_mask &= ~(SFP_F_TX_FAULT | SFP_F_LOS);
383 static void sfp_fixup_rollball(struct sfp *sfp)
386 sfp_fixup_rollball_proto(sfp, 25);
389 static void sfp_fixup_rollball_cc(struct sfp *sfp)
391 sfp_fixup_rollball(sfp);
396 sfp->id.base.extended_cc = SFF8024_ECC_10GBASE_T_SFI;
535 static unsigned int sfp_gpio_get_state(struct sfp *sfp)
540 if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
543 v = gpiod_get_value_cansleep(sfp->gpio[i]);
551 static unsigned int sff_gpio_get_state(struct sfp *sfp)
553 return sfp_gpio_get_state(sfp) | SFP_F_PRESENT;
556 static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
562 drive = sfp->state_hw_drive;
567 if (sfp->gpio[GPIO_TX_DISABLE]) {
569 gpiod_direction_output(sfp->gpio[GPIO_TX_DISABLE],
572 gpiod_direction_input(sfp->gpio[GPIO_TX_DISABLE]);
575 if (sfp->gpio[GPIO_RS0]) {
577 gpiod_direction_output(sfp->gpio[GPIO_RS0],
580 gpiod_direction_input(sfp->gpio[GPIO_RS0]);
583 if (sfp->gpio[GPIO_RS1]) {
585 gpiod_direction_output(sfp->gpio[GPIO_RS1],
588 gpiod_direction_input(sfp->gpio[GPIO_RS1]);
592 static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
597 size_t block_size = sfp->i2c_block_size;
617 ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
632 static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
649 ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
659 static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
664 sfp->i2c = i2c;
665 sfp->read = sfp_i2c_read;
666 sfp->write = sfp_i2c_write;
671 static int sfp_i2c_mdiobus_create(struct sfp *sfp)
676 i2c_mii = mdio_i2c_alloc(sfp->dev, sfp->i2c, sfp->mdio_protocol);
689 sfp->i2c_mii = i2c_mii;
694 static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
696 mdiobus_unregister(sfp->i2c_mii);
697 sfp->i2c_mii = NULL;
701 static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
703 return sfp->read(sfp, a2, addr, buf, len);
706 static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
708 return sfp->write(sfp, a2, addr, buf, len);
711 static int sfp_modify_u8(struct sfp *sfp, bool a2, u8 addr, u8 mask, u8 val)
716 ret = sfp_read(sfp, a2, addr, &old, sizeof(old));
724 return sfp_write(sfp, a2, addr, &v, sizeof(v));
727 static unsigned int sfp_soft_get_state(struct sfp *sfp)
733 ret = sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status));
740 dev_err_ratelimited(sfp->dev,
744 state = sfp->state;
747 return state & sfp->state_soft_mask;
750 static void sfp_soft_set_state(struct sfp *sfp, unsigned int state,
767 sfp_modify_u8(sfp, true, SFP_STATUS, mask, val);
776 sfp_modify_u8(sfp, true, SFP_EXT_STATUS, mask, val);
779 static void sfp_soft_start_poll(struct sfp *sfp)
781 const struct sfp_eeprom_id *id = &sfp->id;
791 mask |= sfp->rs_state_mask;
793 mutex_lock(&sfp->st_mutex);
795 sfp->state_soft_mask = ~sfp->state_hw_mask & mask;
797 if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
798 !sfp->need_poll)
799 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
800 mutex_unlock(&sfp->st_mutex);
803 static void sfp_soft_stop_poll(struct sfp *sfp)
805 mutex_lock(&sfp->st_mutex);
806 sfp->state_soft_mask = 0;
807 mutex_unlock(&sfp->st_mutex);
813 static unsigned int sfp_get_state(struct sfp *sfp)
815 unsigned int soft = sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT);
818 state = sfp->get_state(sfp) & sfp->state_hw_mask;
820 state |= sfp_soft_get_state(sfp);
828 static void sfp_set_state(struct sfp *sfp, unsigned int state)
832 sfp->set_state(sfp, state);
834 soft = sfp->state_soft_mask & SFP_F_OUTPUTS;
836 sfp_soft_set_state(sfp, state, soft);
839 static void sfp_mod_state(struct sfp *sfp, unsigned int mask, unsigned int set)
841 mutex_lock(&sfp->st_mutex);
842 sfp->state = (sfp->state & ~mask) | set;
843 sfp_set_state(sfp, sfp->state);
844 mutex_unlock(&sfp->st_mutex);
863 const struct sfp *sfp = data;
876 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
895 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
914 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
930 if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL &&
942 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
956 static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
961 err = sfp_read(sfp, true, reg, &val, sizeof(val));
975 static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
978 if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL)
982 static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
984 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_t_slope),
985 be16_to_cpu(sfp->diag.cal_t_offset), value);
993 static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
995 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_v_slope),
996 be16_to_cpu(sfp->diag.cal_v_offset), value);
1001 static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
1003 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txi_slope),
1004 be16_to_cpu(sfp->diag.cal_txi_offset), value);
1009 static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
1011 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txpwr_slope),
1012 be16_to_cpu(sfp->diag.cal_txpwr_offset), value);
1017 static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
1021 err = sfp_hwmon_read_sensor(sfp, reg, value);
1025 sfp_hwmon_calibrate_temp(sfp, value);
1030 static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
1034 err = sfp_hwmon_read_sensor(sfp, reg, value);
1038 sfp_hwmon_calibrate_vcc(sfp, value);
1043 static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
1047 err = sfp_hwmon_read_sensor(sfp, reg, value);
1051 sfp_hwmon_calibrate_bias(sfp, value);
1056 static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
1060 err = sfp_hwmon_read_sensor(sfp, reg, value);
1064 sfp_hwmon_calibrate_tx_power(sfp, value);
1069 static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
1073 err = sfp_hwmon_read_sensor(sfp, reg, value);
1082 static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
1089 return sfp_hwmon_read_temp(sfp, SFP_TEMP, value);
1092 *value = be16_to_cpu(sfp->diag.temp_low_alarm);
1093 sfp_hwmon_calibrate_temp(sfp, value);
1097 *value = be16_to_cpu(sfp->diag.temp_low_warn);
1098 sfp_hwmon_calibrate_temp(sfp, value);
1101 *value = be16_to_cpu(sfp->diag.temp_high_warn);
1102 sfp_hwmon_calibrate_temp(sfp, value);
1106 *value = be16_to_cpu(sfp->diag.temp_high_alarm);
1107 sfp_hwmon_calibrate_temp(sfp, value);
1111 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1119 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1127 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1135 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1148 static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
1155 return sfp_hwmon_read_vcc(sfp, SFP_VCC, value);
1158 *value = be16_to_cpu(sfp->diag.volt_low_alarm);
1159 sfp_hwmon_calibrate_vcc(sfp, value);
1163 *value = be16_to_cpu(sfp->diag.volt_low_warn);
1164 sfp_hwmon_calibrate_vcc(sfp, value);
1168 *value = be16_to_cpu(sfp->diag.volt_high_warn);
1169 sfp_hwmon_calibrate_vcc(sfp, value);
1173 *value = be16_to_cpu(sfp->diag.volt_high_alarm);
1174 sfp_hwmon_calibrate_vcc(sfp, value);
1178 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1186 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1194 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1202 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1215 static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
1222 return sfp_hwmon_read_bias(sfp, SFP_TX_BIAS, value);
1225 *value = be16_to_cpu(sfp->diag.bias_low_alarm);
1226 sfp_hwmon_calibrate_bias(sfp, value);
1230 *value = be16_to_cpu(sfp->diag.bias_low_warn);
1231 sfp_hwmon_calibrate_bias(sfp, value);
1235 *value = be16_to_cpu(sfp->diag.bias_high_warn);
1236 sfp_hwmon_calibrate_bias(sfp, value);
1240 *value = be16_to_cpu(sfp->diag.bias_high_alarm);
1241 sfp_hwmon_calibrate_bias(sfp, value);
1245 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1253 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1261 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1269 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1282 static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
1289 return sfp_hwmon_read_tx_power(sfp, SFP_TX_POWER, value);
1292 *value = be16_to_cpu(sfp->diag.txpwr_low_alarm);
1293 sfp_hwmon_calibrate_tx_power(sfp, value);
1297 *value = be16_to_cpu(sfp->diag.txpwr_low_warn);
1298 sfp_hwmon_calibrate_tx_power(sfp, value);
1302 *value = be16_to_cpu(sfp->diag.txpwr_high_warn);
1303 sfp_hwmon_calibrate_tx_power(sfp, value);
1307 *value = be16_to_cpu(sfp->diag.txpwr_high_alarm);
1308 sfp_hwmon_calibrate_tx_power(sfp, value);
1312 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1320 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1328 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1336 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1349 static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
1356 return sfp_hwmon_read_rx_power(sfp, SFP_RX_POWER, value);
1359 *value = be16_to_cpu(sfp->diag.rxpwr_low_alarm);
1364 *value = be16_to_cpu(sfp->diag.rxpwr_low_warn);
1369 *value = be16_to_cpu(sfp->diag.rxpwr_high_warn);
1374 *value = be16_to_cpu(sfp->diag.rxpwr_high_alarm);
1379 err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1387 err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1395 err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1403 err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1419 struct sfp *sfp = dev_get_drvdata(dev);
1423 return sfp_hwmon_temp(sfp, attr, value);
1425 return sfp_hwmon_vcc(sfp, attr, value);
1427 return sfp_hwmon_bias(sfp, attr, value);
1431 return sfp_hwmon_tx_power(sfp, attr, value);
1433 return sfp_hwmon_rx_power(sfp, attr, value);
1550 struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
1559 if (sfp->i2c_block_size < 2) {
1560 dev_info(sfp->dev,
1562 dev_info(sfp->dev,
1567 err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1569 if (sfp->hwmon_tries--) {
1570 mod_delayed_work(system_wq, &sfp->hwmon_probe,
1573 dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
1579 sfp->hwmon_name = hwmon_sanitize_name(dev_name(sfp->dev));
1580 if (IS_ERR(sfp->hwmon_name)) {
1581 dev_err(sfp->dev, "out of memory for hwmon name\n");
1585 sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1586 sfp->hwmon_name, sfp,
1589 if (IS_ERR(sfp->hwmon_dev))
1590 dev_err(sfp->dev, "failed to register hwmon device: %ld\n",
1591 PTR_ERR(sfp->hwmon_dev));
1594 static int sfp_hwmon_insert(struct sfp *sfp)
1596 if (sfp->have_a2 && sfp->id.ext.diagmon & SFP_DIAGMON_DDM) {
1597 mod_delayed_work(system_wq, &sfp->hwmon_probe, 1);
1598 sfp->hwmon_tries = R_PROBE_RETRY_SLOW;
1604 static void sfp_hwmon_remove(struct sfp *sfp)
1606 cancel_delayed_work_sync(&sfp->hwmon_probe);
1607 if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1608 hwmon_device_unregister(sfp->hwmon_dev);
1609 sfp->hwmon_dev = NULL;
1610 kfree(sfp->hwmon_name);
1614 static int sfp_hwmon_init(struct sfp *sfp)
1616 INIT_DELAYED_WORK(&sfp->hwmon_probe, sfp_hwmon_probe);
1621 static void sfp_hwmon_exit(struct sfp *sfp)
1623 cancel_delayed_work_sync(&sfp->hwmon_probe);
1626 static int sfp_hwmon_insert(struct sfp *sfp)
1631 static void sfp_hwmon_remove(struct sfp *sfp)
1635 static int sfp_hwmon_init(struct sfp *sfp)
1640 static void sfp_hwmon_exit(struct sfp *sfp)
1646 static void sfp_module_tx_disable(struct sfp *sfp)
1648 dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1649 sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 1);
1650 sfp_mod_state(sfp, SFP_F_TX_DISABLE, SFP_F_TX_DISABLE);
1653 static void sfp_module_tx_enable(struct sfp *sfp)
1655 dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1656 sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 0);
1657 sfp_mod_state(sfp, SFP_F_TX_DISABLE, 0);
1663 struct sfp *sfp = s->private;
1666 mod_state_to_str(sfp->sm_mod_state));
1668 R_PROBE_RETRY_INIT - sfp->sm_mod_tries_init,
1669 R_PROBE_RETRY_SLOW - sfp->sm_mod_tries);
1671 dev_state_to_str(sfp->sm_dev_state));
1673 sm_state_to_str(sfp->sm_state));
1675 sfp->sm_fault_retries);
1677 sfp->sm_phy_retries);
1678 seq_printf(s, "Signalling rate: %u kBd\n", sfp->rate_kbd);
1680 sfp->rs_threshold_kbd);
1681 seq_printf(s, "moddef0: %d\n", !!(sfp->state & SFP_F_PRESENT));
1682 seq_printf(s, "rx_los: %d\n", !!(sfp->state & SFP_F_LOS));
1683 seq_printf(s, "tx_fault: %d\n", !!(sfp->state & SFP_F_TX_FAULT));
1684 seq_printf(s, "tx_disable: %d\n", !!(sfp->state & SFP_F_TX_DISABLE));
1685 seq_printf(s, "rs0: %d\n", !!(sfp->state & SFP_F_RS0));
1686 seq_printf(s, "rs1: %d\n", !!(sfp->state & SFP_F_RS1));
1691 static void sfp_debugfs_init(struct sfp *sfp)
1693 sfp->debugfs_dir = debugfs_create_dir(dev_name(sfp->dev), NULL);
1695 debugfs_create_file("state", 0600, sfp->debugfs_dir, sfp,
1699 static void sfp_debugfs_exit(struct sfp *sfp)
1701 debugfs_remove_recursive(sfp->debugfs_dir);
1704 static void sfp_debugfs_init(struct sfp *sfp)
1708 static void sfp_debugfs_exit(struct sfp *sfp)
1713 static void sfp_module_tx_fault_reset(struct sfp *sfp)
1717 mutex_lock(&sfp->st_mutex);
1718 state = sfp->state;
1720 sfp_set_state(sfp, state | SFP_F_TX_DISABLE);
1724 sfp_set_state(sfp, state);
1726 mutex_unlock(&sfp->st_mutex);
1730 static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
1733 mod_delayed_work(system_power_efficient_wq, &sfp->timeout,
1736 cancel_delayed_work(&sfp->timeout);
1739 static void sfp_sm_next(struct sfp *sfp, unsigned int state,
1742 sfp->sm_state = state;
1743 sfp_sm_set_timer(sfp, timeout);
1746 static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
1749 sfp->sm_mod_state = state;
1750 sfp_sm_set_timer(sfp, timeout);
1753 static void sfp_sm_phy_detach(struct sfp *sfp)
1755 sfp_remove_phy(sfp->sfp_bus);
1756 phy_device_remove(sfp->mod_phy);
1757 phy_device_free(sfp->mod_phy);
1758 sfp->mod_phy = NULL;
1761 static int sfp_sm_probe_phy(struct sfp *sfp, int addr, bool is_c45)
1766 phy = get_phy_device(sfp->i2c_mii, addr, is_c45);
1770 dev_err(sfp->dev, "mdiobus scan returned %pe\n", phy);
1780 dev_err(sfp->dev, "phy_device_register failed: %pe\n",
1785 err = sfp_add_phy(sfp->sfp_bus, phy);
1789 dev_err(sfp->dev, "sfp_add_phy failed: %pe\n", ERR_PTR(err));
1793 sfp->mod_phy = phy;
1798 static void sfp_sm_link_up(struct sfp *sfp)
1800 sfp_link_up(sfp->sfp_bus);
1801 sfp_sm_next(sfp, SFP_S_LINK_UP, 0);
1804 static void sfp_sm_link_down(struct sfp *sfp)
1806 sfp_link_down(sfp->sfp_bus);
1809 static void sfp_sm_link_check_los(struct sfp *sfp)
1813 __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1821 los = !(sfp->state & SFP_F_LOS);
1823 los = !!(sfp->state & SFP_F_LOS);
1826 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1828 sfp_sm_link_up(sfp);
1831 static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
1835 __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1841 static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
1845 __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1851 static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
1853 if (sfp->sm_fault_retries && !--sfp->sm_fault_retries) {
1854 dev_err(sfp->dev,
1856 sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
1859 dev_err(sfp->dev, "module transmit fault indicated\n");
1861 sfp_sm_next(sfp, next_state, T_FAULT_RECOVER);
1865 static int sfp_sm_add_mdio_bus(struct sfp *sfp)
1867 if (sfp->mdio_protocol != MDIO_I2C_NONE)
1868 return sfp_i2c_mdiobus_create(sfp);
1884 static int sfp_sm_probe_for_phy(struct sfp *sfp)
1888 switch (sfp->mdio_protocol) {
1893 err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, false);
1897 err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, true);
1901 err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR_ROLLBALL, true);
1908 static int sfp_module_parse_power(struct sfp *sfp)
1913 if (sfp->id.ext.sff8472_compliance >= SFP_SFF8472_COMPLIANCE_REV10_2 &&
1914 sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1917 if (sfp->id.ext.sff8472_compliance >= SFP_SFF8472_COMPLIANCE_REV11_4 &&
1918 sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1923 sfp->module_power_mW = power_mW;
1927 supports_a2 = sfp->id.ext.sff8472_compliance !=
1929 sfp->id.ext.diagmon & SFP_DIAGMON_DDM;
1931 if (power_mW > sfp->max_power_mW) {
1938 dev_err(sfp->dev,
1943 dev_warn(sfp->dev,
1962 if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) {
1963 dev_warn(sfp->dev,
1969 sfp->module_power_mW = power_mW;
1974 static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
1978 err = sfp_modify_u8(sfp, true, SFP_EXT_STATUS,
1982 dev_err(sfp->dev, "failed to %sable high power: %pe\n",
1988 dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1989 sfp->module_power_mW / 1000,
1990 (sfp->module_power_mW / 100) % 10);
1995 static void sfp_module_parse_rate_select(struct sfp *sfp)
1999 sfp->rs_threshold_kbd = 0;
2000 sfp->rs_state_mask = 0;
2002 if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_RATE_SELECT)))
2012 sfp->rs_state_mask = SFP_F_RS0;
2013 sfp->rs_threshold_kbd = 1594;
2023 rate_id = sfp->id.base.rate_id;
2032 if (sfp->id.ext.sff8472_compliance >= SFP_SFF8472_COMPLIANCE_REV10_2 &&
2033 sfp->id.ext.sff8472_compliance < SFP_SFF8472_COMPLIANCE_REV11_0 &&
2042 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_APP_SELECT_SFF8079)) {
2048 sfp->rs_threshold_kbd = 2125 - 1;
2049 sfp->rs_state_mask = SFP_F_RS0;
2055 if (sfp->id.ext.sff8472_compliance <= SFP_SFF8472_COMPLIANCE_REV9_5)
2063 sfp->rs_threshold_kbd = 4250;
2064 sfp->rs_state_mask = SFP_F_RS0;
2068 sfp->rs_threshold_kbd = 4250;
2069 sfp->rs_state_mask = SFP_F_RS1;
2073 sfp->rs_threshold_kbd = 4250;
2074 sfp->rs_state_mask = SFP_F_RS0 | SFP_F_RS1;
2078 sfp->rs_threshold_kbd = 9000;
2079 sfp->rs_state_mask = SFP_F_RS0 | SFP_F_RS1;
2095 static bool sfp_id_needs_byte_io(struct sfp *sfp, void *buf, size_t len)
2097 size_t i, block_size = sfp->i2c_block_size;
2110 static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id)
2118 dev_warn(sfp->dev, "Rewriting fiber module EEPROM with corrected values\n");
2122 err = sfp_write(sfp, false, SFP_PHYS_ID, &id->base, 3);
2124 dev_err(sfp->dev,
2135 err = sfp_write(sfp, false, SFP_CC_BASE, &check, 1);
2137 dev_err(sfp->dev,
2146 static int sfp_module_parse_sff8472(struct sfp *sfp)
2149 if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
2150 dev_warn(sfp->dev,
2153 sfp->have_a2 = true;
2158 static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
2168 sfp->i2c_block_size = SFP_EEPROM_BLOCK_SIZE;
2170 ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
2173 dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
2179 dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
2189 if (sfp_id_needs_byte_io(sfp, &id.base, sizeof(id.base))) {
2190 dev_info(sfp->dev,
2192 dev_info(sfp->dev,
2194 sfp->i2c_block_size = 1;
2196 ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
2199 dev_err(sfp->dev,
2206 dev_err(sfp->dev, "EEPROM short read: %pe\n",
2224 ret = sfp_cotsworks_fixup_check(sfp, &id);
2233 dev_warn(sfp->dev,
2237 dev_err(sfp->dev,
2240 print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
2246 ret = sfp_read(sfp, false, SFP_CC_BASE + 1, &id.ext, sizeof(id.ext));
2249 dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
2255 dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
2262 dev_warn(sfp->dev,
2266 dev_err(sfp->dev,
2269 print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
2275 sfp->id = id;
2277 dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
2285 if (!sfp->type->module_supported(&id)) {
2286 dev_err(sfp->dev,
2288 sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
2292 if (sfp->id.ext.sff8472_compliance != SFP_SFF8472_COMPLIANCE_NONE) {
2293 ret = sfp_module_parse_sff8472(sfp);
2299 ret = sfp_module_parse_power(sfp);
2303 sfp_module_parse_rate_select(sfp);
2306 if (sfp->gpio[GPIO_TX_DISABLE])
2308 if (sfp->gpio[GPIO_TX_FAULT])
2310 if (sfp->gpio[GPIO_LOS])
2312 if (sfp->gpio[GPIO_RS0])
2314 if (sfp->gpio[GPIO_RS1])
2317 sfp->module_t_start_up = T_START_UP;
2318 sfp->module_t_wait = T_WAIT;
2320 sfp->tx_fault_ignore = false;
2322 if (sfp->id.base.extended_cc == SFF8024_ECC_10GBASE_T_SFI ||
2323 sfp->id.base.extended_cc == SFF8024_ECC_10GBASE_T_SR ||
2324 sfp->id.base.extended_cc == SFF8024_ECC_5GBASE_T ||
2325 sfp->id.base.extended_cc == SFF8024_ECC_2_5GBASE_T)
2326 sfp->mdio_protocol = MDIO_I2C_C45;
2327 else if (sfp->id.base.e1000_base_t)
2328 sfp->mdio_protocol = MDIO_I2C_MARVELL_C22;
2330 sfp->mdio_protocol = MDIO_I2C_NONE;
2332 sfp->quirk = sfp_lookup_quirk(&id);
2334 mutex_lock(&sfp->st_mutex);
2336 sfp->state_hw_mask = mask;
2339 sfp->state_hw_drive |= sfp->rs_state_mask;
2341 if (sfp->quirk && sfp->quirk->fixup)
2342 sfp->quirk->fixup(sfp);
2343 mutex_unlock(&sfp->st_mutex);
2348 static void sfp_sm_mod_remove(struct sfp *sfp)
2350 if (sfp->sm_mod_state > SFP_MOD_WAITDEV)
2351 sfp_module_remove(sfp->sfp_bus);
2353 sfp_hwmon_remove(sfp);
2355 memset(&sfp->id, 0, sizeof(sfp->id));
2356 sfp->module_power_mW = 0;
2357 sfp->state_hw_drive = SFP_F_TX_DISABLE;
2358 sfp->have_a2 = false;
2360 dev_info(sfp->dev, "module removed\n");
2364 static void sfp_sm_device(struct sfp *sfp, unsigned int event)
2366 switch (sfp->sm_dev_state) {
2369 sfp->sm_dev_state = SFP_DEV_DOWN;
2374 sfp->sm_dev_state = SFP_DEV_DETACHED;
2376 sfp->sm_dev_state = SFP_DEV_UP;
2381 sfp->sm_dev_state = SFP_DEV_DETACHED;
2383 sfp->sm_dev_state = SFP_DEV_DOWN;
2391 static void sfp_sm_module(struct sfp *sfp, unsigned int event)
2397 if (sfp->sm_mod_state > SFP_MOD_PROBE)
2398 sfp_sm_mod_remove(sfp);
2399 sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0);
2404 if (sfp->sm_dev_state < SFP_DEV_DOWN &&
2405 sfp->sm_mod_state > SFP_MOD_WAITDEV) {
2406 if (sfp->module_power_mW > 1000 &&
2407 sfp->sm_mod_state > SFP_MOD_HPOWER)
2408 sfp_sm_mod_hpower(sfp, false);
2409 sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2413 switch (sfp->sm_mod_state) {
2416 sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL);
2417 sfp->sm_mod_tries_init = R_PROBE_RETRY_INIT;
2418 sfp->sm_mod_tries = R_PROBE_RETRY_SLOW;
2427 err = sfp_sm_mod_probe(sfp, sfp->sm_mod_tries == 1);
2429 if (sfp->sm_mod_tries_init &&
2430 --sfp->sm_mod_tries_init) {
2431 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2433 } else if (sfp->sm_mod_tries && --sfp->sm_mod_tries) {
2434 if (sfp->sm_mod_tries == R_PROBE_RETRY_SLOW - 1)
2435 dev_warn(sfp->dev,
2437 sfp_sm_set_timer(sfp, T_PROBE_RETRY_SLOW);
2442 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2449 mod_delayed_work(system_wq, &sfp->poll, 1);
2451 err = sfp_hwmon_insert(sfp);
2453 dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
2456 sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2460 if (sfp->sm_dev_state < SFP_DEV_DOWN)
2464 err = sfp_module_insert(sfp->sfp_bus, &sfp->id,
2465 sfp->quirk);
2467 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2472 if (sfp->module_power_mW <= 1000)
2475 sfp_sm_mod_next(sfp, SFP_MOD_HPOWER, 0);
2479 err = sfp_sm_mod_hpower(sfp, true);
2482 sfp_module_remove(sfp->sfp_bus);
2483 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2485 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2490 sfp_sm_mod_next(sfp, SFP_MOD_WAITPWR, T_HPOWER_LEVEL);
2499 sfp_sm_mod_next(sfp, SFP_MOD_PRESENT, 0);
2508 static void sfp_sm_main(struct sfp *sfp, unsigned int event)
2514 if (sfp->sm_state != SFP_S_DOWN &&
2515 (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2516 sfp->sm_dev_state != SFP_DEV_UP)) {
2517 if (sfp->sm_state == SFP_S_LINK_UP &&
2518 sfp->sm_dev_state == SFP_DEV_UP)
2519 sfp_sm_link_down(sfp);
2520 if (sfp->sm_state > SFP_S_INIT)
2521 sfp_module_stop(sfp->sfp_bus);
2522 if (sfp->mod_phy)
2523 sfp_sm_phy_detach(sfp);
2524 if (sfp->i2c_mii)
2525 sfp_i2c_mdiobus_destroy(sfp);
2526 sfp_module_tx_disable(sfp);
2527 sfp_soft_stop_poll(sfp);
2528 sfp_sm_next(sfp, SFP_S_DOWN, 0);
2533 switch (sfp->sm_state) {
2535 if (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2536 sfp->sm_dev_state != SFP_DEV_UP)
2543 if (sfp->have_a2)
2544 sfp_soft_start_poll(sfp);
2546 sfp_module_tx_enable(sfp);
2549 sfp->sm_fault_retries = N_FAULT_INIT;
2556 sfp_sm_next(sfp, SFP_S_WAIT, sfp->module_t_wait);
2563 if (sfp->state & SFP_F_TX_FAULT) {
2569 timeout = sfp->module_t_start_up;
2570 if (timeout > sfp->module_t_wait)
2571 timeout -= sfp->module_t_wait;
2575 sfp_sm_next(sfp, SFP_S_INIT, timeout);
2585 if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2589 sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
2590 sfp->sm_fault_retries == N_FAULT_INIT);
2594 ret = sfp_sm_add_mdio_bus(sfp);
2596 sfp_sm_next(sfp, SFP_S_FAIL, 0);
2599 sfp->sm_phy_retries = R_PHY_RETRY;
2611 ret = sfp_sm_probe_for_phy(sfp);
2613 if (--sfp->sm_phy_retries) {
2614 sfp_sm_next(sfp, SFP_S_INIT_PHY, T_PHY_RETRY);
2617 dev_info(sfp->dev, "no PHY detected\n");
2620 sfp_sm_next(sfp, SFP_S_FAIL, 0);
2623 if (sfp_module_start(sfp->sfp_bus)) {
2624 sfp_sm_next(sfp, SFP_S_FAIL, 0);
2627 sfp_sm_link_check_los(sfp);
2630 sfp->sm_fault_retries = N_FAULT;
2635 sfp_module_tx_fault_reset(sfp);
2636 sfp_sm_next(sfp, SFP_S_INIT, sfp->module_t_start_up);
2642 sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2643 else if (sfp_los_event_inactive(sfp, event))
2644 sfp_sm_link_up(sfp);
2649 sfp_sm_link_down(sfp);
2650 sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2651 } else if (sfp_los_event_active(sfp, event)) {
2652 sfp_sm_link_down(sfp);
2653 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
2659 sfp_module_tx_fault_reset(sfp);
2660 sfp_sm_next(sfp, SFP_S_REINIT, sfp->module_t_start_up);
2665 if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2666 sfp_sm_fault(sfp, SFP_S_TX_FAULT, false);
2668 dev_info(sfp->dev, "module transmit fault recovered\n");
2669 sfp_sm_link_check_los(sfp);
2678 static void __sfp_sm_event(struct sfp *sfp, unsigned int event)
2680 dev_dbg(sfp->dev, "SM: enter %s:%s:%s event %s\n",
2681 mod_state_to_str(sfp->sm_mod_state),
2682 dev_state_to_str(sfp->sm_dev_state),
2683 sm_state_to_str(sfp->sm_state),
2686 sfp_sm_device(sfp, event);
2687 sfp_sm_module(sfp, event);
2688 sfp_sm_main(sfp, event);
2690 dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
2691 mod_state_to_str(sfp->sm_mod_state),
2692 dev_state_to_str(sfp->sm_dev_state),
2693 sm_state_to_str(sfp->sm_state));
2696 static void sfp_sm_event(struct sfp *sfp, unsigned int event)
2698 mutex_lock(&sfp->sm_mutex);
2699 __sfp_sm_event(sfp, event);
2700 mutex_unlock(&sfp->sm_mutex);
2703 static void sfp_attach(struct sfp *sfp)
2705 sfp_sm_event(sfp, SFP_E_DEV_ATTACH);
2708 static void sfp_detach(struct sfp *sfp)
2710 sfp_sm_event(sfp, SFP_E_DEV_DETACH);
2713 static void sfp_start(struct sfp *sfp)
2715 sfp_sm_event(sfp, SFP_E_DEV_UP);
2718 static void sfp_stop(struct sfp *sfp)
2720 sfp_sm_event(sfp, SFP_E_DEV_DOWN);
2723 static void sfp_set_signal_rate(struct sfp *sfp, unsigned int rate_kbd)
2727 sfp->rate_kbd = rate_kbd;
2729 if (rate_kbd > sfp->rs_threshold_kbd)
2730 set = sfp->rs_state_mask;
2734 sfp_mod_state(sfp, SFP_F_RS0 | SFP_F_RS1, set);
2737 static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo)
2741 if (sfp->id.ext.sff8472_compliance &&
2742 !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) {
2752 static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee,
2758 if (!(sfp->state & SFP_F_PRESENT))
2770 ret = sfp_read(sfp, false, first, data, len);
2782 ret = sfp_read(sfp, true, first, data, len);
2789 static int sfp_module_eeprom_by_page(struct sfp *sfp,
2793 if (!(sfp->state & SFP_F_PRESENT))
2812 return sfp_read(sfp, page->i2c_address == 0x51, page->offset,
2829 struct sfp *sfp = container_of(work, struct sfp, timeout.work);
2832 sfp_sm_event(sfp, SFP_E_TIMEOUT);
2836 static void sfp_check_state(struct sfp *sfp)
2841 mutex_lock(&sfp->st_mutex);
2842 state = sfp_get_state(sfp);
2843 changed = state ^ sfp->state;
2844 if (sfp->tx_fault_ignore)
2851 dev_dbg(sfp->dev, "%s %u -> %u\n", gpio_names[i],
2852 !!(sfp->state & BIT(i)), !!(state & BIT(i)));
2854 state |= sfp->state & SFP_F_OUTPUTS;
2855 sfp->state = state;
2856 mutex_unlock(&sfp->st_mutex);
2858 mutex_lock(&sfp->sm_mutex);
2860 __sfp_sm_event(sfp, state & SFP_F_PRESENT ?
2864 __sfp_sm_event(sfp, state & SFP_F_TX_FAULT ?
2868 __sfp_sm_event(sfp, state & SFP_F_LOS ?
2870 mutex_unlock(&sfp->sm_mutex);
2876 struct sfp *sfp = data;
2878 sfp_check_state(sfp);
2885 struct sfp *sfp = container_of(work, struct sfp, poll.work);
2887 sfp_check_state(sfp);
2891 if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) ||
2892 sfp->need_poll)
2893 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2896 static struct sfp *sfp_alloc(struct device *dev)
2898 struct sfp *sfp;
2900 sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
2901 if (!sfp)
2904 sfp->dev = dev;
2905 sfp->i2c_block_size = SFP_EEPROM_BLOCK_SIZE;
2907 mutex_init(&sfp->sm_mutex);
2908 mutex_init(&sfp->st_mutex);
2909 INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
2910 INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
2912 sfp_hwmon_init(sfp);
2914 return sfp;
2919 struct sfp *sfp = data;
2921 sfp_hwmon_exit(sfp);
2923 cancel_delayed_work_sync(&sfp->poll);
2924 cancel_delayed_work_sync(&sfp->timeout);
2925 if (sfp->i2c_mii) {
2926 mdiobus_unregister(sfp->i2c_mii);
2927 mdiobus_free(sfp->i2c_mii);
2929 if (sfp->i2c)
2930 i2c_put_adapter(sfp->i2c);
2931 kfree(sfp);
2934 static int sfp_i2c_get(struct sfp *sfp)
2940 h = fwnode_find_reference(dev_fwnode(sfp->dev), "i2c-bus", 0);
2942 dev_err(sfp->dev, "missing 'i2c-bus' property\n");
2952 err = sfp_i2c_configure(sfp, i2c);
2964 struct sfp *sfp;
2967 sfp = sfp_alloc(&pdev->dev);
2968 if (IS_ERR(sfp))
2969 return PTR_ERR(sfp);
2971 platform_set_drvdata(pdev, sfp);
2973 err = devm_add_action_or_reset(sfp->dev, sfp_cleanup, sfp);
2977 sff = device_get_match_data(sfp->dev);
2981 sfp->type = sff;
2983 err = sfp_i2c_get(sfp);
2989 sfp->gpio[i] = devm_gpiod_get_optional(sfp->dev,
2991 if (IS_ERR(sfp->gpio[i]))
2992 return PTR_ERR(sfp->gpio[i]);
2995 sfp->state_hw_mask = SFP_F_PRESENT;
2996 sfp->state_hw_drive = SFP_F_TX_DISABLE;
2998 sfp->get_state = sfp_gpio_get_state;
2999 sfp->set_state = sfp_gpio_set_state;
3002 if (!(sfp->gpio[GPIO_MODDEF0]))
3003 sfp->get_state = sff_gpio_get_state;
3006 &sfp->max_power_mW);
3007 if (sfp->max_power_mW < 1000) {
3008 if (sfp->max_power_mW)
3009 dev_warn(sfp->dev,
3011 sfp->max_power_mW = 1000;
3014 dev_info(sfp->dev, "Host maximum power %u.%uW\n",
3015 sfp->max_power_mW / 1000, (sfp->max_power_mW / 100) % 10);
3020 sfp->state = sfp_get_state(sfp) | SFP_F_TX_DISABLE;
3022 if (sfp->gpio[GPIO_RS0] &&
3023 gpiod_get_value_cansleep(sfp->gpio[GPIO_RS0]))
3024 sfp->state |= SFP_F_RS0;
3025 sfp_set_state(sfp, sfp->state);
3026 sfp_module_tx_disable(sfp);
3027 if (sfp->state & SFP_F_PRESENT) {
3029 sfp_sm_event(sfp, SFP_E_INSERT);
3034 if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
3037 sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
3038 if (sfp->gpio_irq[i] < 0) {
3039 sfp->gpio_irq[i] = 0;
3040 sfp->need_poll = true;
3044 sfp_irq_name = devm_kasprintf(sfp->dev, GFP_KERNEL,
3045 "%s-%s", dev_name(sfp->dev),
3051 err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
3056 sfp_irq_name, sfp);
3058 sfp->gpio_irq[i] = 0;
3059 sfp->need_poll = true;
3063 if (sfp->need_poll)
3064 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
3071 if (!sfp->gpio[GPIO_TX_DISABLE])
3072 dev_warn(sfp->dev,
3075 sfp->sfp_bus = sfp_register_socket(sfp->dev, sfp, &sfp_module_ops);
3076 if (!sfp->sfp_bus)
3079 sfp_debugfs_init(sfp);
3086 struct sfp *sfp = platform_get_drvdata(pdev);
3088 sfp_debugfs_exit(sfp);
3089 sfp_unregister_socket(sfp->sfp_bus);
3092 sfp_sm_event(sfp, SFP_E_REMOVE);
3100 struct sfp *sfp = platform_get_drvdata(pdev);
3104 if (!sfp->gpio_irq[i])
3107 devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
3110 cancel_delayed_work_sync(&sfp->poll);
3111 cancel_delayed_work_sync(&sfp->timeout);
3119 .name = "sfp",
3138 MODULE_ALIAS("platform:sfp");