Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <linux/acpi.h>
0003 #include <linux/ctype.h>
0004 #include <linux/debugfs.h>
0005 #include <linux/delay.h>
0006 #include <linux/gpio/consumer.h>
0007 #include <linux/hwmon.h>
0008 #include <linux/i2c.h>
0009 #include <linux/interrupt.h>
0010 #include <linux/jiffies.h>
0011 #include <linux/mdio/mdio-i2c.h>
0012 #include <linux/module.h>
0013 #include <linux/mutex.h>
0014 #include <linux/of.h>
0015 #include <linux/phy.h>
0016 #include <linux/platform_device.h>
0017 #include <linux/rtnetlink.h>
0018 #include <linux/slab.h>
0019 #include <linux/workqueue.h>
0020 
0021 #include "sfp.h"
0022 #include "swphy.h"
0023 
0024 enum {
0025     GPIO_MODDEF0,
0026     GPIO_LOS,
0027     GPIO_TX_FAULT,
0028     GPIO_TX_DISABLE,
0029     GPIO_RATE_SELECT,
0030     GPIO_MAX,
0031 
0032     SFP_F_PRESENT = BIT(GPIO_MODDEF0),
0033     SFP_F_LOS = BIT(GPIO_LOS),
0034     SFP_F_TX_FAULT = BIT(GPIO_TX_FAULT),
0035     SFP_F_TX_DISABLE = BIT(GPIO_TX_DISABLE),
0036     SFP_F_RATE_SELECT = BIT(GPIO_RATE_SELECT),
0037 
0038     SFP_E_INSERT = 0,
0039     SFP_E_REMOVE,
0040     SFP_E_DEV_ATTACH,
0041     SFP_E_DEV_DETACH,
0042     SFP_E_DEV_DOWN,
0043     SFP_E_DEV_UP,
0044     SFP_E_TX_FAULT,
0045     SFP_E_TX_CLEAR,
0046     SFP_E_LOS_HIGH,
0047     SFP_E_LOS_LOW,
0048     SFP_E_TIMEOUT,
0049 
0050     SFP_MOD_EMPTY = 0,
0051     SFP_MOD_ERROR,
0052     SFP_MOD_PROBE,
0053     SFP_MOD_WAITDEV,
0054     SFP_MOD_HPOWER,
0055     SFP_MOD_WAITPWR,
0056     SFP_MOD_PRESENT,
0057 
0058     SFP_DEV_DETACHED = 0,
0059     SFP_DEV_DOWN,
0060     SFP_DEV_UP,
0061 
0062     SFP_S_DOWN = 0,
0063     SFP_S_FAIL,
0064     SFP_S_WAIT,
0065     SFP_S_INIT,
0066     SFP_S_INIT_PHY,
0067     SFP_S_INIT_TX_FAULT,
0068     SFP_S_WAIT_LOS,
0069     SFP_S_LINK_UP,
0070     SFP_S_TX_FAULT,
0071     SFP_S_REINIT,
0072     SFP_S_TX_DISABLE,
0073 };
0074 
0075 static const char  * const mod_state_strings[] = {
0076     [SFP_MOD_EMPTY] = "empty",
0077     [SFP_MOD_ERROR] = "error",
0078     [SFP_MOD_PROBE] = "probe",
0079     [SFP_MOD_WAITDEV] = "waitdev",
0080     [SFP_MOD_HPOWER] = "hpower",
0081     [SFP_MOD_WAITPWR] = "waitpwr",
0082     [SFP_MOD_PRESENT] = "present",
0083 };
0084 
0085 static const char *mod_state_to_str(unsigned short mod_state)
0086 {
0087     if (mod_state >= ARRAY_SIZE(mod_state_strings))
0088         return "Unknown module state";
0089     return mod_state_strings[mod_state];
0090 }
0091 
0092 static const char * const dev_state_strings[] = {
0093     [SFP_DEV_DETACHED] = "detached",
0094     [SFP_DEV_DOWN] = "down",
0095     [SFP_DEV_UP] = "up",
0096 };
0097 
0098 static const char *dev_state_to_str(unsigned short dev_state)
0099 {
0100     if (dev_state >= ARRAY_SIZE(dev_state_strings))
0101         return "Unknown device state";
0102     return dev_state_strings[dev_state];
0103 }
0104 
0105 static const char * const event_strings[] = {
0106     [SFP_E_INSERT] = "insert",
0107     [SFP_E_REMOVE] = "remove",
0108     [SFP_E_DEV_ATTACH] = "dev_attach",
0109     [SFP_E_DEV_DETACH] = "dev_detach",
0110     [SFP_E_DEV_DOWN] = "dev_down",
0111     [SFP_E_DEV_UP] = "dev_up",
0112     [SFP_E_TX_FAULT] = "tx_fault",
0113     [SFP_E_TX_CLEAR] = "tx_clear",
0114     [SFP_E_LOS_HIGH] = "los_high",
0115     [SFP_E_LOS_LOW] = "los_low",
0116     [SFP_E_TIMEOUT] = "timeout",
0117 };
0118 
0119 static const char *event_to_str(unsigned short event)
0120 {
0121     if (event >= ARRAY_SIZE(event_strings))
0122         return "Unknown event";
0123     return event_strings[event];
0124 }
0125 
0126 static const char * const sm_state_strings[] = {
0127     [SFP_S_DOWN] = "down",
0128     [SFP_S_FAIL] = "fail",
0129     [SFP_S_WAIT] = "wait",
0130     [SFP_S_INIT] = "init",
0131     [SFP_S_INIT_PHY] = "init_phy",
0132     [SFP_S_INIT_TX_FAULT] = "init_tx_fault",
0133     [SFP_S_WAIT_LOS] = "wait_los",
0134     [SFP_S_LINK_UP] = "link_up",
0135     [SFP_S_TX_FAULT] = "tx_fault",
0136     [SFP_S_REINIT] = "reinit",
0137     [SFP_S_TX_DISABLE] = "tx_disable",
0138 };
0139 
0140 static const char *sm_state_to_str(unsigned short sm_state)
0141 {
0142     if (sm_state >= ARRAY_SIZE(sm_state_strings))
0143         return "Unknown state";
0144     return sm_state_strings[sm_state];
0145 }
0146 
0147 static const char *gpio_of_names[] = {
0148     "mod-def0",
0149     "los",
0150     "tx-fault",
0151     "tx-disable",
0152     "rate-select0",
0153 };
0154 
0155 static const enum gpiod_flags gpio_flags[] = {
0156     GPIOD_IN,
0157     GPIOD_IN,
0158     GPIOD_IN,
0159     GPIOD_ASIS,
0160     GPIOD_ASIS,
0161 };
0162 
0163 /* t_start_up (SFF-8431) or t_init (SFF-8472) is the time required for a
0164  * non-cooled module to initialise its laser safety circuitry. We wait
0165  * an initial T_WAIT period before we check the tx fault to give any PHY
0166  * on board (for a copper SFP) time to initialise.
0167  */
0168 #define T_WAIT          msecs_to_jiffies(50)
0169 #define T_START_UP      msecs_to_jiffies(300)
0170 #define T_START_UP_BAD_GPON msecs_to_jiffies(60000)
0171 
0172 /* t_reset is the time required to assert the TX_DISABLE signal to reset
0173  * an indicated TX_FAULT.
0174  */
0175 #define T_RESET_US      10
0176 #define T_FAULT_RECOVER     msecs_to_jiffies(1000)
0177 
0178 /* N_FAULT_INIT is the number of recovery attempts at module initialisation
0179  * time. If the TX_FAULT signal is not deasserted after this number of
0180  * attempts at clearing it, we decide that the module is faulty.
0181  * N_FAULT is the same but after the module has initialised.
0182  */
0183 #define N_FAULT_INIT        5
0184 #define N_FAULT         5
0185 
0186 /* T_PHY_RETRY is the time interval between attempts to probe the PHY.
0187  * R_PHY_RETRY is the number of attempts.
0188  */
0189 #define T_PHY_RETRY     msecs_to_jiffies(50)
0190 #define R_PHY_RETRY     12
0191 
0192 /* SFP module presence detection is poor: the three MOD DEF signals are
0193  * the same length on the PCB, which means it's possible for MOD DEF 0 to
0194  * connect before the I2C bus on MOD DEF 1/2.
0195  *
0196  * The SFF-8472 specifies t_serial ("Time from power on until module is
0197  * ready for data transmission over the two wire serial bus.") as 300ms.
0198  */
0199 #define T_SERIAL        msecs_to_jiffies(300)
0200 #define T_HPOWER_LEVEL      msecs_to_jiffies(300)
0201 #define T_PROBE_RETRY_INIT  msecs_to_jiffies(100)
0202 #define R_PROBE_RETRY_INIT  10
0203 #define T_PROBE_RETRY_SLOW  msecs_to_jiffies(5000)
0204 #define R_PROBE_RETRY_SLOW  12
0205 
0206 /* SFP modules appear to always have their PHY configured for bus address
0207  * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
0208  */
0209 #define SFP_PHY_ADDR    22
0210 
0211 struct sff_data {
0212     unsigned int gpios;
0213     bool (*module_supported)(const struct sfp_eeprom_id *id);
0214 };
0215 
0216 struct sfp {
0217     struct device *dev;
0218     struct i2c_adapter *i2c;
0219     struct mii_bus *i2c_mii;
0220     struct sfp_bus *sfp_bus;
0221     struct phy_device *mod_phy;
0222     const struct sff_data *type;
0223     size_t i2c_block_size;
0224     u32 max_power_mW;
0225 
0226     unsigned int (*get_state)(struct sfp *);
0227     void (*set_state)(struct sfp *, unsigned int);
0228     int (*read)(struct sfp *, bool, u8, void *, size_t);
0229     int (*write)(struct sfp *, bool, u8, void *, size_t);
0230 
0231     struct gpio_desc *gpio[GPIO_MAX];
0232     int gpio_irq[GPIO_MAX];
0233 
0234     bool need_poll;
0235 
0236     struct mutex st_mutex;          /* Protects state */
0237     unsigned int state_soft_mask;
0238     unsigned int state;
0239     struct delayed_work poll;
0240     struct delayed_work timeout;
0241     struct mutex sm_mutex;          /* Protects state machine */
0242     unsigned char sm_mod_state;
0243     unsigned char sm_mod_tries_init;
0244     unsigned char sm_mod_tries;
0245     unsigned char sm_dev_state;
0246     unsigned short sm_state;
0247     unsigned char sm_fault_retries;
0248     unsigned char sm_phy_retries;
0249 
0250     struct sfp_eeprom_id id;
0251     unsigned int module_power_mW;
0252     unsigned int module_t_start_up;
0253     bool tx_fault_ignore;
0254 
0255 #if IS_ENABLED(CONFIG_HWMON)
0256     struct sfp_diag diag;
0257     struct delayed_work hwmon_probe;
0258     unsigned int hwmon_tries;
0259     struct device *hwmon_dev;
0260     char *hwmon_name;
0261 #endif
0262 
0263 #if IS_ENABLED(CONFIG_DEBUG_FS)
0264     struct dentry *debugfs_dir;
0265 #endif
0266 };
0267 
0268 static bool sff_module_supported(const struct sfp_eeprom_id *id)
0269 {
0270     return id->base.phys_id == SFF8024_ID_SFF_8472 &&
0271            id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
0272 }
0273 
0274 static const struct sff_data sff_data = {
0275     .gpios = SFP_F_LOS | SFP_F_TX_FAULT | SFP_F_TX_DISABLE,
0276     .module_supported = sff_module_supported,
0277 };
0278 
0279 static bool sfp_module_supported(const struct sfp_eeprom_id *id)
0280 {
0281     if (id->base.phys_id == SFF8024_ID_SFP &&
0282         id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP)
0283         return true;
0284 
0285     /* SFP GPON module Ubiquiti U-Fiber Instant has in its EEPROM stored
0286      * phys id SFF instead of SFP. Therefore mark this module explicitly
0287      * as supported based on vendor name and pn match.
0288      */
0289     if (id->base.phys_id == SFF8024_ID_SFF_8472 &&
0290         id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP &&
0291         !memcmp(id->base.vendor_name, "UBNT            ", 16) &&
0292         !memcmp(id->base.vendor_pn, "UF-INSTANT      ", 16))
0293         return true;
0294 
0295     return false;
0296 }
0297 
0298 static const struct sff_data sfp_data = {
0299     .gpios = SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT |
0300          SFP_F_TX_DISABLE | SFP_F_RATE_SELECT,
0301     .module_supported = sfp_module_supported,
0302 };
0303 
0304 static const struct of_device_id sfp_of_match[] = {
0305     { .compatible = "sff,sff", .data = &sff_data, },
0306     { .compatible = "sff,sfp", .data = &sfp_data, },
0307     { },
0308 };
0309 MODULE_DEVICE_TABLE(of, sfp_of_match);
0310 
0311 static unsigned long poll_jiffies;
0312 
0313 static unsigned int sfp_gpio_get_state(struct sfp *sfp)
0314 {
0315     unsigned int i, state, v;
0316 
0317     for (i = state = 0; i < GPIO_MAX; i++) {
0318         if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
0319             continue;
0320 
0321         v = gpiod_get_value_cansleep(sfp->gpio[i]);
0322         if (v)
0323             state |= BIT(i);
0324     }
0325 
0326     return state;
0327 }
0328 
0329 static unsigned int sff_gpio_get_state(struct sfp *sfp)
0330 {
0331     return sfp_gpio_get_state(sfp) | SFP_F_PRESENT;
0332 }
0333 
0334 static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
0335 {
0336     if (state & SFP_F_PRESENT) {
0337         /* If the module is present, drive the signals */
0338         if (sfp->gpio[GPIO_TX_DISABLE])
0339             gpiod_direction_output(sfp->gpio[GPIO_TX_DISABLE],
0340                            state & SFP_F_TX_DISABLE);
0341         if (state & SFP_F_RATE_SELECT)
0342             gpiod_direction_output(sfp->gpio[GPIO_RATE_SELECT],
0343                            state & SFP_F_RATE_SELECT);
0344     } else {
0345         /* Otherwise, let them float to the pull-ups */
0346         if (sfp->gpio[GPIO_TX_DISABLE])
0347             gpiod_direction_input(sfp->gpio[GPIO_TX_DISABLE]);
0348         if (state & SFP_F_RATE_SELECT)
0349             gpiod_direction_input(sfp->gpio[GPIO_RATE_SELECT]);
0350     }
0351 }
0352 
0353 static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
0354             size_t len)
0355 {
0356     struct i2c_msg msgs[2];
0357     u8 bus_addr = a2 ? 0x51 : 0x50;
0358     size_t block_size = sfp->i2c_block_size;
0359     size_t this_len;
0360     int ret;
0361 
0362     msgs[0].addr = bus_addr;
0363     msgs[0].flags = 0;
0364     msgs[0].len = 1;
0365     msgs[0].buf = &dev_addr;
0366     msgs[1].addr = bus_addr;
0367     msgs[1].flags = I2C_M_RD;
0368     msgs[1].len = len;
0369     msgs[1].buf = buf;
0370 
0371     while (len) {
0372         this_len = len;
0373         if (this_len > block_size)
0374             this_len = block_size;
0375 
0376         msgs[1].len = this_len;
0377 
0378         ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
0379         if (ret < 0)
0380             return ret;
0381 
0382         if (ret != ARRAY_SIZE(msgs))
0383             break;
0384 
0385         msgs[1].buf += this_len;
0386         dev_addr += this_len;
0387         len -= this_len;
0388     }
0389 
0390     return msgs[1].buf - (u8 *)buf;
0391 }
0392 
0393 static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
0394     size_t len)
0395 {
0396     struct i2c_msg msgs[1];
0397     u8 bus_addr = a2 ? 0x51 : 0x50;
0398     int ret;
0399 
0400     msgs[0].addr = bus_addr;
0401     msgs[0].flags = 0;
0402     msgs[0].len = 1 + len;
0403     msgs[0].buf = kmalloc(1 + len, GFP_KERNEL);
0404     if (!msgs[0].buf)
0405         return -ENOMEM;
0406 
0407     msgs[0].buf[0] = dev_addr;
0408     memcpy(&msgs[0].buf[1], buf, len);
0409 
0410     ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
0411 
0412     kfree(msgs[0].buf);
0413 
0414     if (ret < 0)
0415         return ret;
0416 
0417     return ret == ARRAY_SIZE(msgs) ? len : 0;
0418 }
0419 
0420 static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
0421 {
0422     struct mii_bus *i2c_mii;
0423     int ret;
0424 
0425     if (!i2c_check_functionality(i2c, I2C_FUNC_I2C))
0426         return -EINVAL;
0427 
0428     sfp->i2c = i2c;
0429     sfp->read = sfp_i2c_read;
0430     sfp->write = sfp_i2c_write;
0431 
0432     i2c_mii = mdio_i2c_alloc(sfp->dev, i2c);
0433     if (IS_ERR(i2c_mii))
0434         return PTR_ERR(i2c_mii);
0435 
0436     i2c_mii->name = "SFP I2C Bus";
0437     i2c_mii->phy_mask = ~0;
0438 
0439     ret = mdiobus_register(i2c_mii);
0440     if (ret < 0) {
0441         mdiobus_free(i2c_mii);
0442         return ret;
0443     }
0444 
0445     sfp->i2c_mii = i2c_mii;
0446 
0447     return 0;
0448 }
0449 
0450 /* Interface */
0451 static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
0452 {
0453     return sfp->read(sfp, a2, addr, buf, len);
0454 }
0455 
0456 static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
0457 {
0458     return sfp->write(sfp, a2, addr, buf, len);
0459 }
0460 
0461 static unsigned int sfp_soft_get_state(struct sfp *sfp)
0462 {
0463     unsigned int state = 0;
0464     u8 status;
0465     int ret;
0466 
0467     ret = sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status));
0468     if (ret == sizeof(status)) {
0469         if (status & SFP_STATUS_RX_LOS)
0470             state |= SFP_F_LOS;
0471         if (status & SFP_STATUS_TX_FAULT)
0472             state |= SFP_F_TX_FAULT;
0473     } else {
0474         dev_err_ratelimited(sfp->dev,
0475                     "failed to read SFP soft status: %pe\n",
0476                     ERR_PTR(ret));
0477         /* Preserve the current state */
0478         state = sfp->state;
0479     }
0480 
0481     return state & sfp->state_soft_mask;
0482 }
0483 
0484 static void sfp_soft_set_state(struct sfp *sfp, unsigned int state)
0485 {
0486     u8 status;
0487 
0488     if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
0489              sizeof(status)) {
0490         if (state & SFP_F_TX_DISABLE)
0491             status |= SFP_STATUS_TX_DISABLE_FORCE;
0492         else
0493             status &= ~SFP_STATUS_TX_DISABLE_FORCE;
0494 
0495         sfp_write(sfp, true, SFP_STATUS, &status, sizeof(status));
0496     }
0497 }
0498 
0499 static void sfp_soft_start_poll(struct sfp *sfp)
0500 {
0501     const struct sfp_eeprom_id *id = &sfp->id;
0502 
0503     sfp->state_soft_mask = 0;
0504     if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_DISABLE &&
0505         !sfp->gpio[GPIO_TX_DISABLE])
0506         sfp->state_soft_mask |= SFP_F_TX_DISABLE;
0507     if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_FAULT &&
0508         !sfp->gpio[GPIO_TX_FAULT])
0509         sfp->state_soft_mask |= SFP_F_TX_FAULT;
0510     if (id->ext.enhopts & SFP_ENHOPTS_SOFT_RX_LOS &&
0511         !sfp->gpio[GPIO_LOS])
0512         sfp->state_soft_mask |= SFP_F_LOS;
0513 
0514     if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
0515         !sfp->need_poll)
0516         mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
0517 }
0518 
0519 static void sfp_soft_stop_poll(struct sfp *sfp)
0520 {
0521     sfp->state_soft_mask = 0;
0522 }
0523 
0524 static unsigned int sfp_get_state(struct sfp *sfp)
0525 {
0526     unsigned int state = sfp->get_state(sfp);
0527 
0528     if (state & SFP_F_PRESENT &&
0529         sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT))
0530         state |= sfp_soft_get_state(sfp);
0531 
0532     return state;
0533 }
0534 
0535 static void sfp_set_state(struct sfp *sfp, unsigned int state)
0536 {
0537     sfp->set_state(sfp, state);
0538 
0539     if (state & SFP_F_PRESENT &&
0540         sfp->state_soft_mask & SFP_F_TX_DISABLE)
0541         sfp_soft_set_state(sfp, state);
0542 }
0543 
0544 static unsigned int sfp_check(void *buf, size_t len)
0545 {
0546     u8 *p, check;
0547 
0548     for (p = buf, check = 0; len; p++, len--)
0549         check += *p;
0550 
0551     return check;
0552 }
0553 
0554 /* hwmon */
0555 #if IS_ENABLED(CONFIG_HWMON)
0556 static umode_t sfp_hwmon_is_visible(const void *data,
0557                     enum hwmon_sensor_types type,
0558                     u32 attr, int channel)
0559 {
0560     const struct sfp *sfp = data;
0561 
0562     switch (type) {
0563     case hwmon_temp:
0564         switch (attr) {
0565         case hwmon_temp_min_alarm:
0566         case hwmon_temp_max_alarm:
0567         case hwmon_temp_lcrit_alarm:
0568         case hwmon_temp_crit_alarm:
0569         case hwmon_temp_min:
0570         case hwmon_temp_max:
0571         case hwmon_temp_lcrit:
0572         case hwmon_temp_crit:
0573             if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
0574                 return 0;
0575             fallthrough;
0576         case hwmon_temp_input:
0577         case hwmon_temp_label:
0578             return 0444;
0579         default:
0580             return 0;
0581         }
0582     case hwmon_in:
0583         switch (attr) {
0584         case hwmon_in_min_alarm:
0585         case hwmon_in_max_alarm:
0586         case hwmon_in_lcrit_alarm:
0587         case hwmon_in_crit_alarm:
0588         case hwmon_in_min:
0589         case hwmon_in_max:
0590         case hwmon_in_lcrit:
0591         case hwmon_in_crit:
0592             if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
0593                 return 0;
0594             fallthrough;
0595         case hwmon_in_input:
0596         case hwmon_in_label:
0597             return 0444;
0598         default:
0599             return 0;
0600         }
0601     case hwmon_curr:
0602         switch (attr) {
0603         case hwmon_curr_min_alarm:
0604         case hwmon_curr_max_alarm:
0605         case hwmon_curr_lcrit_alarm:
0606         case hwmon_curr_crit_alarm:
0607         case hwmon_curr_min:
0608         case hwmon_curr_max:
0609         case hwmon_curr_lcrit:
0610         case hwmon_curr_crit:
0611             if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
0612                 return 0;
0613             fallthrough;
0614         case hwmon_curr_input:
0615         case hwmon_curr_label:
0616             return 0444;
0617         default:
0618             return 0;
0619         }
0620     case hwmon_power:
0621         /* External calibration of receive power requires
0622          * floating point arithmetic. Doing that in the kernel
0623          * is not easy, so just skip it. If the module does
0624          * not require external calibration, we can however
0625          * show receiver power, since FP is then not needed.
0626          */
0627         if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL &&
0628             channel == 1)
0629             return 0;
0630         switch (attr) {
0631         case hwmon_power_min_alarm:
0632         case hwmon_power_max_alarm:
0633         case hwmon_power_lcrit_alarm:
0634         case hwmon_power_crit_alarm:
0635         case hwmon_power_min:
0636         case hwmon_power_max:
0637         case hwmon_power_lcrit:
0638         case hwmon_power_crit:
0639             if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
0640                 return 0;
0641             fallthrough;
0642         case hwmon_power_input:
0643         case hwmon_power_label:
0644             return 0444;
0645         default:
0646             return 0;
0647         }
0648     default:
0649         return 0;
0650     }
0651 }
0652 
0653 static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
0654 {
0655     __be16 val;
0656     int err;
0657 
0658     err = sfp_read(sfp, true, reg, &val, sizeof(val));
0659     if (err < 0)
0660         return err;
0661 
0662     *value = be16_to_cpu(val);
0663 
0664     return 0;
0665 }
0666 
0667 static void sfp_hwmon_to_rx_power(long *value)
0668 {
0669     *value = DIV_ROUND_CLOSEST(*value, 10);
0670 }
0671 
0672 static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
0673                 long *value)
0674 {
0675     if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL)
0676         *value = DIV_ROUND_CLOSEST(*value * slope, 256) + offset;
0677 }
0678 
0679 static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
0680 {
0681     sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_t_slope),
0682                 be16_to_cpu(sfp->diag.cal_t_offset), value);
0683 
0684     if (*value >= 0x8000)
0685         *value -= 0x10000;
0686 
0687     *value = DIV_ROUND_CLOSEST(*value * 1000, 256);
0688 }
0689 
0690 static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
0691 {
0692     sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_v_slope),
0693                 be16_to_cpu(sfp->diag.cal_v_offset), value);
0694 
0695     *value = DIV_ROUND_CLOSEST(*value, 10);
0696 }
0697 
0698 static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
0699 {
0700     sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txi_slope),
0701                 be16_to_cpu(sfp->diag.cal_txi_offset), value);
0702 
0703     *value = DIV_ROUND_CLOSEST(*value, 500);
0704 }
0705 
0706 static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
0707 {
0708     sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txpwr_slope),
0709                 be16_to_cpu(sfp->diag.cal_txpwr_offset), value);
0710 
0711     *value = DIV_ROUND_CLOSEST(*value, 10);
0712 }
0713 
0714 static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
0715 {
0716     int err;
0717 
0718     err = sfp_hwmon_read_sensor(sfp, reg, value);
0719     if (err < 0)
0720         return err;
0721 
0722     sfp_hwmon_calibrate_temp(sfp, value);
0723 
0724     return 0;
0725 }
0726 
0727 static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
0728 {
0729     int err;
0730 
0731     err = sfp_hwmon_read_sensor(sfp, reg, value);
0732     if (err < 0)
0733         return err;
0734 
0735     sfp_hwmon_calibrate_vcc(sfp, value);
0736 
0737     return 0;
0738 }
0739 
0740 static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
0741 {
0742     int err;
0743 
0744     err = sfp_hwmon_read_sensor(sfp, reg, value);
0745     if (err < 0)
0746         return err;
0747 
0748     sfp_hwmon_calibrate_bias(sfp, value);
0749 
0750     return 0;
0751 }
0752 
0753 static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
0754 {
0755     int err;
0756 
0757     err = sfp_hwmon_read_sensor(sfp, reg, value);
0758     if (err < 0)
0759         return err;
0760 
0761     sfp_hwmon_calibrate_tx_power(sfp, value);
0762 
0763     return 0;
0764 }
0765 
0766 static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
0767 {
0768     int err;
0769 
0770     err = sfp_hwmon_read_sensor(sfp, reg, value);
0771     if (err < 0)
0772         return err;
0773 
0774     sfp_hwmon_to_rx_power(value);
0775 
0776     return 0;
0777 }
0778 
0779 static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
0780 {
0781     u8 status;
0782     int err;
0783 
0784     switch (attr) {
0785     case hwmon_temp_input:
0786         return sfp_hwmon_read_temp(sfp, SFP_TEMP, value);
0787 
0788     case hwmon_temp_lcrit:
0789         *value = be16_to_cpu(sfp->diag.temp_low_alarm);
0790         sfp_hwmon_calibrate_temp(sfp, value);
0791         return 0;
0792 
0793     case hwmon_temp_min:
0794         *value = be16_to_cpu(sfp->diag.temp_low_warn);
0795         sfp_hwmon_calibrate_temp(sfp, value);
0796         return 0;
0797     case hwmon_temp_max:
0798         *value = be16_to_cpu(sfp->diag.temp_high_warn);
0799         sfp_hwmon_calibrate_temp(sfp, value);
0800         return 0;
0801 
0802     case hwmon_temp_crit:
0803         *value = be16_to_cpu(sfp->diag.temp_high_alarm);
0804         sfp_hwmon_calibrate_temp(sfp, value);
0805         return 0;
0806 
0807     case hwmon_temp_lcrit_alarm:
0808         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0809         if (err < 0)
0810             return err;
0811 
0812         *value = !!(status & SFP_ALARM0_TEMP_LOW);
0813         return 0;
0814 
0815     case hwmon_temp_min_alarm:
0816         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0817         if (err < 0)
0818             return err;
0819 
0820         *value = !!(status & SFP_WARN0_TEMP_LOW);
0821         return 0;
0822 
0823     case hwmon_temp_max_alarm:
0824         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0825         if (err < 0)
0826             return err;
0827 
0828         *value = !!(status & SFP_WARN0_TEMP_HIGH);
0829         return 0;
0830 
0831     case hwmon_temp_crit_alarm:
0832         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0833         if (err < 0)
0834             return err;
0835 
0836         *value = !!(status & SFP_ALARM0_TEMP_HIGH);
0837         return 0;
0838     default:
0839         return -EOPNOTSUPP;
0840     }
0841 
0842     return -EOPNOTSUPP;
0843 }
0844 
0845 static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
0846 {
0847     u8 status;
0848     int err;
0849 
0850     switch (attr) {
0851     case hwmon_in_input:
0852         return sfp_hwmon_read_vcc(sfp, SFP_VCC, value);
0853 
0854     case hwmon_in_lcrit:
0855         *value = be16_to_cpu(sfp->diag.volt_low_alarm);
0856         sfp_hwmon_calibrate_vcc(sfp, value);
0857         return 0;
0858 
0859     case hwmon_in_min:
0860         *value = be16_to_cpu(sfp->diag.volt_low_warn);
0861         sfp_hwmon_calibrate_vcc(sfp, value);
0862         return 0;
0863 
0864     case hwmon_in_max:
0865         *value = be16_to_cpu(sfp->diag.volt_high_warn);
0866         sfp_hwmon_calibrate_vcc(sfp, value);
0867         return 0;
0868 
0869     case hwmon_in_crit:
0870         *value = be16_to_cpu(sfp->diag.volt_high_alarm);
0871         sfp_hwmon_calibrate_vcc(sfp, value);
0872         return 0;
0873 
0874     case hwmon_in_lcrit_alarm:
0875         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0876         if (err < 0)
0877             return err;
0878 
0879         *value = !!(status & SFP_ALARM0_VCC_LOW);
0880         return 0;
0881 
0882     case hwmon_in_min_alarm:
0883         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0884         if (err < 0)
0885             return err;
0886 
0887         *value = !!(status & SFP_WARN0_VCC_LOW);
0888         return 0;
0889 
0890     case hwmon_in_max_alarm:
0891         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0892         if (err < 0)
0893             return err;
0894 
0895         *value = !!(status & SFP_WARN0_VCC_HIGH);
0896         return 0;
0897 
0898     case hwmon_in_crit_alarm:
0899         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0900         if (err < 0)
0901             return err;
0902 
0903         *value = !!(status & SFP_ALARM0_VCC_HIGH);
0904         return 0;
0905     default:
0906         return -EOPNOTSUPP;
0907     }
0908 
0909     return -EOPNOTSUPP;
0910 }
0911 
0912 static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
0913 {
0914     u8 status;
0915     int err;
0916 
0917     switch (attr) {
0918     case hwmon_curr_input:
0919         return sfp_hwmon_read_bias(sfp, SFP_TX_BIAS, value);
0920 
0921     case hwmon_curr_lcrit:
0922         *value = be16_to_cpu(sfp->diag.bias_low_alarm);
0923         sfp_hwmon_calibrate_bias(sfp, value);
0924         return 0;
0925 
0926     case hwmon_curr_min:
0927         *value = be16_to_cpu(sfp->diag.bias_low_warn);
0928         sfp_hwmon_calibrate_bias(sfp, value);
0929         return 0;
0930 
0931     case hwmon_curr_max:
0932         *value = be16_to_cpu(sfp->diag.bias_high_warn);
0933         sfp_hwmon_calibrate_bias(sfp, value);
0934         return 0;
0935 
0936     case hwmon_curr_crit:
0937         *value = be16_to_cpu(sfp->diag.bias_high_alarm);
0938         sfp_hwmon_calibrate_bias(sfp, value);
0939         return 0;
0940 
0941     case hwmon_curr_lcrit_alarm:
0942         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0943         if (err < 0)
0944             return err;
0945 
0946         *value = !!(status & SFP_ALARM0_TX_BIAS_LOW);
0947         return 0;
0948 
0949     case hwmon_curr_min_alarm:
0950         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0951         if (err < 0)
0952             return err;
0953 
0954         *value = !!(status & SFP_WARN0_TX_BIAS_LOW);
0955         return 0;
0956 
0957     case hwmon_curr_max_alarm:
0958         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
0959         if (err < 0)
0960             return err;
0961 
0962         *value = !!(status & SFP_WARN0_TX_BIAS_HIGH);
0963         return 0;
0964 
0965     case hwmon_curr_crit_alarm:
0966         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
0967         if (err < 0)
0968             return err;
0969 
0970         *value = !!(status & SFP_ALARM0_TX_BIAS_HIGH);
0971         return 0;
0972     default:
0973         return -EOPNOTSUPP;
0974     }
0975 
0976     return -EOPNOTSUPP;
0977 }
0978 
0979 static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
0980 {
0981     u8 status;
0982     int err;
0983 
0984     switch (attr) {
0985     case hwmon_power_input:
0986         return sfp_hwmon_read_tx_power(sfp, SFP_TX_POWER, value);
0987 
0988     case hwmon_power_lcrit:
0989         *value = be16_to_cpu(sfp->diag.txpwr_low_alarm);
0990         sfp_hwmon_calibrate_tx_power(sfp, value);
0991         return 0;
0992 
0993     case hwmon_power_min:
0994         *value = be16_to_cpu(sfp->diag.txpwr_low_warn);
0995         sfp_hwmon_calibrate_tx_power(sfp, value);
0996         return 0;
0997 
0998     case hwmon_power_max:
0999         *value = be16_to_cpu(sfp->diag.txpwr_high_warn);
1000         sfp_hwmon_calibrate_tx_power(sfp, value);
1001         return 0;
1002 
1003     case hwmon_power_crit:
1004         *value = be16_to_cpu(sfp->diag.txpwr_high_alarm);
1005         sfp_hwmon_calibrate_tx_power(sfp, value);
1006         return 0;
1007 
1008     case hwmon_power_lcrit_alarm:
1009         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1010         if (err < 0)
1011             return err;
1012 
1013         *value = !!(status & SFP_ALARM0_TXPWR_LOW);
1014         return 0;
1015 
1016     case hwmon_power_min_alarm:
1017         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1018         if (err < 0)
1019             return err;
1020 
1021         *value = !!(status & SFP_WARN0_TXPWR_LOW);
1022         return 0;
1023 
1024     case hwmon_power_max_alarm:
1025         err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1026         if (err < 0)
1027             return err;
1028 
1029         *value = !!(status & SFP_WARN0_TXPWR_HIGH);
1030         return 0;
1031 
1032     case hwmon_power_crit_alarm:
1033         err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1034         if (err < 0)
1035             return err;
1036 
1037         *value = !!(status & SFP_ALARM0_TXPWR_HIGH);
1038         return 0;
1039     default:
1040         return -EOPNOTSUPP;
1041     }
1042 
1043     return -EOPNOTSUPP;
1044 }
1045 
1046 static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
1047 {
1048     u8 status;
1049     int err;
1050 
1051     switch (attr) {
1052     case hwmon_power_input:
1053         return sfp_hwmon_read_rx_power(sfp, SFP_RX_POWER, value);
1054 
1055     case hwmon_power_lcrit:
1056         *value = be16_to_cpu(sfp->diag.rxpwr_low_alarm);
1057         sfp_hwmon_to_rx_power(value);
1058         return 0;
1059 
1060     case hwmon_power_min:
1061         *value = be16_to_cpu(sfp->diag.rxpwr_low_warn);
1062         sfp_hwmon_to_rx_power(value);
1063         return 0;
1064 
1065     case hwmon_power_max:
1066         *value = be16_to_cpu(sfp->diag.rxpwr_high_warn);
1067         sfp_hwmon_to_rx_power(value);
1068         return 0;
1069 
1070     case hwmon_power_crit:
1071         *value = be16_to_cpu(sfp->diag.rxpwr_high_alarm);
1072         sfp_hwmon_to_rx_power(value);
1073         return 0;
1074 
1075     case hwmon_power_lcrit_alarm:
1076         err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1077         if (err < 0)
1078             return err;
1079 
1080         *value = !!(status & SFP_ALARM1_RXPWR_LOW);
1081         return 0;
1082 
1083     case hwmon_power_min_alarm:
1084         err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1085         if (err < 0)
1086             return err;
1087 
1088         *value = !!(status & SFP_WARN1_RXPWR_LOW);
1089         return 0;
1090 
1091     case hwmon_power_max_alarm:
1092         err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1093         if (err < 0)
1094             return err;
1095 
1096         *value = !!(status & SFP_WARN1_RXPWR_HIGH);
1097         return 0;
1098 
1099     case hwmon_power_crit_alarm:
1100         err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1101         if (err < 0)
1102             return err;
1103 
1104         *value = !!(status & SFP_ALARM1_RXPWR_HIGH);
1105         return 0;
1106     default:
1107         return -EOPNOTSUPP;
1108     }
1109 
1110     return -EOPNOTSUPP;
1111 }
1112 
1113 static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
1114               u32 attr, int channel, long *value)
1115 {
1116     struct sfp *sfp = dev_get_drvdata(dev);
1117 
1118     switch (type) {
1119     case hwmon_temp:
1120         return sfp_hwmon_temp(sfp, attr, value);
1121     case hwmon_in:
1122         return sfp_hwmon_vcc(sfp, attr, value);
1123     case hwmon_curr:
1124         return sfp_hwmon_bias(sfp, attr, value);
1125     case hwmon_power:
1126         switch (channel) {
1127         case 0:
1128             return sfp_hwmon_tx_power(sfp, attr, value);
1129         case 1:
1130             return sfp_hwmon_rx_power(sfp, attr, value);
1131         default:
1132             return -EOPNOTSUPP;
1133         }
1134     default:
1135         return -EOPNOTSUPP;
1136     }
1137 }
1138 
1139 static const char *const sfp_hwmon_power_labels[] = {
1140     "TX_power",
1141     "RX_power",
1142 };
1143 
1144 static int sfp_hwmon_read_string(struct device *dev,
1145                  enum hwmon_sensor_types type,
1146                  u32 attr, int channel, const char **str)
1147 {
1148     switch (type) {
1149     case hwmon_curr:
1150         switch (attr) {
1151         case hwmon_curr_label:
1152             *str = "bias";
1153             return 0;
1154         default:
1155             return -EOPNOTSUPP;
1156         }
1157         break;
1158     case hwmon_temp:
1159         switch (attr) {
1160         case hwmon_temp_label:
1161             *str = "temperature";
1162             return 0;
1163         default:
1164             return -EOPNOTSUPP;
1165         }
1166         break;
1167     case hwmon_in:
1168         switch (attr) {
1169         case hwmon_in_label:
1170             *str = "VCC";
1171             return 0;
1172         default:
1173             return -EOPNOTSUPP;
1174         }
1175         break;
1176     case hwmon_power:
1177         switch (attr) {
1178         case hwmon_power_label:
1179             *str = sfp_hwmon_power_labels[channel];
1180             return 0;
1181         default:
1182             return -EOPNOTSUPP;
1183         }
1184         break;
1185     default:
1186         return -EOPNOTSUPP;
1187     }
1188 
1189     return -EOPNOTSUPP;
1190 }
1191 
1192 static const struct hwmon_ops sfp_hwmon_ops = {
1193     .is_visible = sfp_hwmon_is_visible,
1194     .read = sfp_hwmon_read,
1195     .read_string = sfp_hwmon_read_string,
1196 };
1197 
1198 static u32 sfp_hwmon_chip_config[] = {
1199     HWMON_C_REGISTER_TZ,
1200     0,
1201 };
1202 
1203 static const struct hwmon_channel_info sfp_hwmon_chip = {
1204     .type = hwmon_chip,
1205     .config = sfp_hwmon_chip_config,
1206 };
1207 
1208 static u32 sfp_hwmon_temp_config[] = {
1209     HWMON_T_INPUT |
1210     HWMON_T_MAX | HWMON_T_MIN |
1211     HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM |
1212     HWMON_T_CRIT | HWMON_T_LCRIT |
1213     HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM |
1214     HWMON_T_LABEL,
1215     0,
1216 };
1217 
1218 static const struct hwmon_channel_info sfp_hwmon_temp_channel_info = {
1219     .type = hwmon_temp,
1220     .config = sfp_hwmon_temp_config,
1221 };
1222 
1223 static u32 sfp_hwmon_vcc_config[] = {
1224     HWMON_I_INPUT |
1225     HWMON_I_MAX | HWMON_I_MIN |
1226     HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM |
1227     HWMON_I_CRIT | HWMON_I_LCRIT |
1228     HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM |
1229     HWMON_I_LABEL,
1230     0,
1231 };
1232 
1233 static const struct hwmon_channel_info sfp_hwmon_vcc_channel_info = {
1234     .type = hwmon_in,
1235     .config = sfp_hwmon_vcc_config,
1236 };
1237 
1238 static u32 sfp_hwmon_bias_config[] = {
1239     HWMON_C_INPUT |
1240     HWMON_C_MAX | HWMON_C_MIN |
1241     HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM |
1242     HWMON_C_CRIT | HWMON_C_LCRIT |
1243     HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM |
1244     HWMON_C_LABEL,
1245     0,
1246 };
1247 
1248 static const struct hwmon_channel_info sfp_hwmon_bias_channel_info = {
1249     .type = hwmon_curr,
1250     .config = sfp_hwmon_bias_config,
1251 };
1252 
1253 static u32 sfp_hwmon_power_config[] = {
1254     /* Transmit power */
1255     HWMON_P_INPUT |
1256     HWMON_P_MAX | HWMON_P_MIN |
1257     HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1258     HWMON_P_CRIT | HWMON_P_LCRIT |
1259     HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1260     HWMON_P_LABEL,
1261     /* Receive power */
1262     HWMON_P_INPUT |
1263     HWMON_P_MAX | HWMON_P_MIN |
1264     HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1265     HWMON_P_CRIT | HWMON_P_LCRIT |
1266     HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1267     HWMON_P_LABEL,
1268     0,
1269 };
1270 
1271 static const struct hwmon_channel_info sfp_hwmon_power_channel_info = {
1272     .type = hwmon_power,
1273     .config = sfp_hwmon_power_config,
1274 };
1275 
1276 static const struct hwmon_channel_info *sfp_hwmon_info[] = {
1277     &sfp_hwmon_chip,
1278     &sfp_hwmon_vcc_channel_info,
1279     &sfp_hwmon_temp_channel_info,
1280     &sfp_hwmon_bias_channel_info,
1281     &sfp_hwmon_power_channel_info,
1282     NULL,
1283 };
1284 
1285 static const struct hwmon_chip_info sfp_hwmon_chip_info = {
1286     .ops = &sfp_hwmon_ops,
1287     .info = sfp_hwmon_info,
1288 };
1289 
1290 static void sfp_hwmon_probe(struct work_struct *work)
1291 {
1292     struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
1293     int err;
1294 
1295     /* hwmon interface needs to access 16bit registers in atomic way to
1296      * guarantee coherency of the diagnostic monitoring data. If it is not
1297      * possible to guarantee coherency because EEPROM is broken in such way
1298      * that does not support atomic 16bit read operation then we have to
1299      * skip registration of hwmon device.
1300      */
1301     if (sfp->i2c_block_size < 2) {
1302         dev_info(sfp->dev,
1303              "skipping hwmon device registration due to broken EEPROM\n");
1304         dev_info(sfp->dev,
1305              "diagnostic EEPROM area cannot be read atomically to guarantee data coherency\n");
1306         return;
1307     }
1308 
1309     err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1310     if (err < 0) {
1311         if (sfp->hwmon_tries--) {
1312             mod_delayed_work(system_wq, &sfp->hwmon_probe,
1313                      T_PROBE_RETRY_SLOW);
1314         } else {
1315             dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
1316                  ERR_PTR(err));
1317         }
1318         return;
1319     }
1320 
1321     sfp->hwmon_name = hwmon_sanitize_name(dev_name(sfp->dev));
1322     if (IS_ERR(sfp->hwmon_name)) {
1323         dev_err(sfp->dev, "out of memory for hwmon name\n");
1324         return;
1325     }
1326 
1327     sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1328                              sfp->hwmon_name, sfp,
1329                              &sfp_hwmon_chip_info,
1330                              NULL);
1331     if (IS_ERR(sfp->hwmon_dev))
1332         dev_err(sfp->dev, "failed to register hwmon device: %ld\n",
1333             PTR_ERR(sfp->hwmon_dev));
1334 }
1335 
1336 static int sfp_hwmon_insert(struct sfp *sfp)
1337 {
1338     if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE)
1339         return 0;
1340 
1341     if (!(sfp->id.ext.diagmon & SFP_DIAGMON_DDM))
1342         return 0;
1343 
1344     if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1345         /* This driver in general does not support address
1346          * change.
1347          */
1348         return 0;
1349 
1350     mod_delayed_work(system_wq, &sfp->hwmon_probe, 1);
1351     sfp->hwmon_tries = R_PROBE_RETRY_SLOW;
1352 
1353     return 0;
1354 }
1355 
1356 static void sfp_hwmon_remove(struct sfp *sfp)
1357 {
1358     cancel_delayed_work_sync(&sfp->hwmon_probe);
1359     if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1360         hwmon_device_unregister(sfp->hwmon_dev);
1361         sfp->hwmon_dev = NULL;
1362         kfree(sfp->hwmon_name);
1363     }
1364 }
1365 
1366 static int sfp_hwmon_init(struct sfp *sfp)
1367 {
1368     INIT_DELAYED_WORK(&sfp->hwmon_probe, sfp_hwmon_probe);
1369 
1370     return 0;
1371 }
1372 
1373 static void sfp_hwmon_exit(struct sfp *sfp)
1374 {
1375     cancel_delayed_work_sync(&sfp->hwmon_probe);
1376 }
1377 #else
1378 static int sfp_hwmon_insert(struct sfp *sfp)
1379 {
1380     return 0;
1381 }
1382 
1383 static void sfp_hwmon_remove(struct sfp *sfp)
1384 {
1385 }
1386 
1387 static int sfp_hwmon_init(struct sfp *sfp)
1388 {
1389     return 0;
1390 }
1391 
1392 static void sfp_hwmon_exit(struct sfp *sfp)
1393 {
1394 }
1395 #endif
1396 
1397 /* Helpers */
1398 static void sfp_module_tx_disable(struct sfp *sfp)
1399 {
1400     dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1401         sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 1);
1402     sfp->state |= SFP_F_TX_DISABLE;
1403     sfp_set_state(sfp, sfp->state);
1404 }
1405 
1406 static void sfp_module_tx_enable(struct sfp *sfp)
1407 {
1408     dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1409         sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 0);
1410     sfp->state &= ~SFP_F_TX_DISABLE;
1411     sfp_set_state(sfp, sfp->state);
1412 }
1413 
1414 #if IS_ENABLED(CONFIG_DEBUG_FS)
1415 static int sfp_debug_state_show(struct seq_file *s, void *data)
1416 {
1417     struct sfp *sfp = s->private;
1418 
1419     seq_printf(s, "Module state: %s\n",
1420            mod_state_to_str(sfp->sm_mod_state));
1421     seq_printf(s, "Module probe attempts: %d %d\n",
1422            R_PROBE_RETRY_INIT - sfp->sm_mod_tries_init,
1423            R_PROBE_RETRY_SLOW - sfp->sm_mod_tries);
1424     seq_printf(s, "Device state: %s\n",
1425            dev_state_to_str(sfp->sm_dev_state));
1426     seq_printf(s, "Main state: %s\n",
1427            sm_state_to_str(sfp->sm_state));
1428     seq_printf(s, "Fault recovery remaining retries: %d\n",
1429            sfp->sm_fault_retries);
1430     seq_printf(s, "PHY probe remaining retries: %d\n",
1431            sfp->sm_phy_retries);
1432     seq_printf(s, "moddef0: %d\n", !!(sfp->state & SFP_F_PRESENT));
1433     seq_printf(s, "rx_los: %d\n", !!(sfp->state & SFP_F_LOS));
1434     seq_printf(s, "tx_fault: %d\n", !!(sfp->state & SFP_F_TX_FAULT));
1435     seq_printf(s, "tx_disable: %d\n", !!(sfp->state & SFP_F_TX_DISABLE));
1436     return 0;
1437 }
1438 DEFINE_SHOW_ATTRIBUTE(sfp_debug_state);
1439 
1440 static void sfp_debugfs_init(struct sfp *sfp)
1441 {
1442     sfp->debugfs_dir = debugfs_create_dir(dev_name(sfp->dev), NULL);
1443 
1444     debugfs_create_file("state", 0600, sfp->debugfs_dir, sfp,
1445                 &sfp_debug_state_fops);
1446 }
1447 
1448 static void sfp_debugfs_exit(struct sfp *sfp)
1449 {
1450     debugfs_remove_recursive(sfp->debugfs_dir);
1451 }
1452 #else
1453 static void sfp_debugfs_init(struct sfp *sfp)
1454 {
1455 }
1456 
1457 static void sfp_debugfs_exit(struct sfp *sfp)
1458 {
1459 }
1460 #endif
1461 
1462 static void sfp_module_tx_fault_reset(struct sfp *sfp)
1463 {
1464     unsigned int state = sfp->state;
1465 
1466     if (state & SFP_F_TX_DISABLE)
1467         return;
1468 
1469     sfp_set_state(sfp, state | SFP_F_TX_DISABLE);
1470 
1471     udelay(T_RESET_US);
1472 
1473     sfp_set_state(sfp, state);
1474 }
1475 
1476 /* SFP state machine */
1477 static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
1478 {
1479     if (timeout)
1480         mod_delayed_work(system_power_efficient_wq, &sfp->timeout,
1481                  timeout);
1482     else
1483         cancel_delayed_work(&sfp->timeout);
1484 }
1485 
1486 static void sfp_sm_next(struct sfp *sfp, unsigned int state,
1487             unsigned int timeout)
1488 {
1489     sfp->sm_state = state;
1490     sfp_sm_set_timer(sfp, timeout);
1491 }
1492 
1493 static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
1494                 unsigned int timeout)
1495 {
1496     sfp->sm_mod_state = state;
1497     sfp_sm_set_timer(sfp, timeout);
1498 }
1499 
1500 static void sfp_sm_phy_detach(struct sfp *sfp)
1501 {
1502     sfp_remove_phy(sfp->sfp_bus);
1503     phy_device_remove(sfp->mod_phy);
1504     phy_device_free(sfp->mod_phy);
1505     sfp->mod_phy = NULL;
1506 }
1507 
1508 static int sfp_sm_probe_phy(struct sfp *sfp, bool is_c45)
1509 {
1510     struct phy_device *phy;
1511     int err;
1512 
1513     phy = get_phy_device(sfp->i2c_mii, SFP_PHY_ADDR, is_c45);
1514     if (phy == ERR_PTR(-ENODEV))
1515         return PTR_ERR(phy);
1516     if (IS_ERR(phy)) {
1517         dev_err(sfp->dev, "mdiobus scan returned %pe\n", phy);
1518         return PTR_ERR(phy);
1519     }
1520 
1521     err = phy_device_register(phy);
1522     if (err) {
1523         phy_device_free(phy);
1524         dev_err(sfp->dev, "phy_device_register failed: %pe\n",
1525             ERR_PTR(err));
1526         return err;
1527     }
1528 
1529     err = sfp_add_phy(sfp->sfp_bus, phy);
1530     if (err) {
1531         phy_device_remove(phy);
1532         phy_device_free(phy);
1533         dev_err(sfp->dev, "sfp_add_phy failed: %pe\n", ERR_PTR(err));
1534         return err;
1535     }
1536 
1537     sfp->mod_phy = phy;
1538 
1539     return 0;
1540 }
1541 
1542 static void sfp_sm_link_up(struct sfp *sfp)
1543 {
1544     sfp_link_up(sfp->sfp_bus);
1545     sfp_sm_next(sfp, SFP_S_LINK_UP, 0);
1546 }
1547 
1548 static void sfp_sm_link_down(struct sfp *sfp)
1549 {
1550     sfp_link_down(sfp->sfp_bus);
1551 }
1552 
1553 static void sfp_sm_link_check_los(struct sfp *sfp)
1554 {
1555     const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1556     const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1557     __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1558     bool los = false;
1559 
1560     /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1561      * are set, we assume that no LOS signal is available. If both are
1562      * set, we assume LOS is not implemented (and is meaningless.)
1563      */
1564     if (los_options == los_inverted)
1565         los = !(sfp->state & SFP_F_LOS);
1566     else if (los_options == los_normal)
1567         los = !!(sfp->state & SFP_F_LOS);
1568 
1569     if (los)
1570         sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1571     else
1572         sfp_sm_link_up(sfp);
1573 }
1574 
1575 static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
1576 {
1577     const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1578     const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1579     __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1580 
1581     return (los_options == los_inverted && event == SFP_E_LOS_LOW) ||
1582            (los_options == los_normal && event == SFP_E_LOS_HIGH);
1583 }
1584 
1585 static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
1586 {
1587     const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1588     const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1589     __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1590 
1591     return (los_options == los_inverted && event == SFP_E_LOS_HIGH) ||
1592            (los_options == los_normal && event == SFP_E_LOS_LOW);
1593 }
1594 
1595 static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
1596 {
1597     if (sfp->sm_fault_retries && !--sfp->sm_fault_retries) {
1598         dev_err(sfp->dev,
1599             "module persistently indicates fault, disabling\n");
1600         sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
1601     } else {
1602         if (warn)
1603             dev_err(sfp->dev, "module transmit fault indicated\n");
1604 
1605         sfp_sm_next(sfp, next_state, T_FAULT_RECOVER);
1606     }
1607 }
1608 
1609 /* Probe a SFP for a PHY device if the module supports copper - the PHY
1610  * normally sits at I2C bus address 0x56, and may either be a clause 22
1611  * or clause 45 PHY.
1612  *
1613  * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1614  * negotiation enabled, but some may be in 1000base-X - which is for the
1615  * PHY driver to determine.
1616  *
1617  * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1618  * mode according to the negotiated line speed.
1619  */
1620 static int sfp_sm_probe_for_phy(struct sfp *sfp)
1621 {
1622     int err = 0;
1623 
1624     switch (sfp->id.base.extended_cc) {
1625     case SFF8024_ECC_10GBASE_T_SFI:
1626     case SFF8024_ECC_10GBASE_T_SR:
1627     case SFF8024_ECC_5GBASE_T:
1628     case SFF8024_ECC_2_5GBASE_T:
1629         err = sfp_sm_probe_phy(sfp, true);
1630         break;
1631 
1632     default:
1633         if (sfp->id.base.e1000_base_t)
1634             err = sfp_sm_probe_phy(sfp, false);
1635         break;
1636     }
1637     return err;
1638 }
1639 
1640 static int sfp_module_parse_power(struct sfp *sfp)
1641 {
1642     u32 power_mW = 1000;
1643     bool supports_a2;
1644 
1645     if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1646         power_mW = 1500;
1647     if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1648         power_mW = 2000;
1649 
1650     supports_a2 = sfp->id.ext.sff8472_compliance !=
1651                 SFP_SFF8472_COMPLIANCE_NONE ||
1652               sfp->id.ext.diagmon & SFP_DIAGMON_DDM;
1653 
1654     if (power_mW > sfp->max_power_mW) {
1655         /* Module power specification exceeds the allowed maximum. */
1656         if (!supports_a2) {
1657             /* The module appears not to implement bus address
1658              * 0xa2, so assume that the module powers up in the
1659              * indicated mode.
1660              */
1661             dev_err(sfp->dev,
1662                 "Host does not support %u.%uW modules\n",
1663                 power_mW / 1000, (power_mW / 100) % 10);
1664             return -EINVAL;
1665         } else {
1666             dev_warn(sfp->dev,
1667                  "Host does not support %u.%uW modules, module left in power mode 1\n",
1668                  power_mW / 1000, (power_mW / 100) % 10);
1669             return 0;
1670         }
1671     }
1672 
1673     if (power_mW <= 1000) {
1674         /* Modules below 1W do not require a power change sequence */
1675         sfp->module_power_mW = power_mW;
1676         return 0;
1677     }
1678 
1679     if (!supports_a2) {
1680         /* The module power level is below the host maximum and the
1681          * module appears not to implement bus address 0xa2, so assume
1682          * that the module powers up in the indicated mode.
1683          */
1684         return 0;
1685     }
1686 
1687     /* If the module requires a higher power mode, but also requires
1688      * an address change sequence, warn the user that the module may
1689      * not be functional.
1690      */
1691     if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) {
1692         dev_warn(sfp->dev,
1693              "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1694              power_mW / 1000, (power_mW / 100) % 10);
1695         return 0;
1696     }
1697 
1698     sfp->module_power_mW = power_mW;
1699 
1700     return 0;
1701 }
1702 
1703 static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
1704 {
1705     u8 val;
1706     int err;
1707 
1708     err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1709     if (err != sizeof(val)) {
1710         dev_err(sfp->dev, "Failed to read EEPROM: %pe\n", ERR_PTR(err));
1711         return -EAGAIN;
1712     }
1713 
1714     /* DM7052 reports as a high power module, responds to reads (with
1715      * all bytes 0xff) at 0x51 but does not accept writes.  In any case,
1716      * if the bit is already set, we're already in high power mode.
1717      */
1718     if (!!(val & BIT(0)) == enable)
1719         return 0;
1720 
1721     if (enable)
1722         val |= BIT(0);
1723     else
1724         val &= ~BIT(0);
1725 
1726     err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1727     if (err != sizeof(val)) {
1728         dev_err(sfp->dev, "Failed to write EEPROM: %pe\n",
1729             ERR_PTR(err));
1730         return -EAGAIN;
1731     }
1732 
1733     if (enable)
1734         dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1735              sfp->module_power_mW / 1000,
1736              (sfp->module_power_mW / 100) % 10);
1737 
1738     return 0;
1739 }
1740 
1741 /* GPON modules based on Realtek RTL8672 and RTL9601C chips (e.g. V-SOL
1742  * V2801F, CarlitoxxPro CPGOS03-0490, Ubiquiti U-Fiber Instant, ...) do
1743  * not support multibyte reads from the EEPROM. Each multi-byte read
1744  * operation returns just one byte of EEPROM followed by zeros. There is
1745  * no way to identify which modules are using Realtek RTL8672 and RTL9601C
1746  * chips. Moreover every OEM of V-SOL V2801F module puts its own vendor
1747  * name and vendor id into EEPROM, so there is even no way to detect if
1748  * module is V-SOL V2801F. Therefore check for those zeros in the read
1749  * data and then based on check switch to reading EEPROM to one byte
1750  * at a time.
1751  */
1752 static bool sfp_id_needs_byte_io(struct sfp *sfp, void *buf, size_t len)
1753 {
1754     size_t i, block_size = sfp->i2c_block_size;
1755 
1756     /* Already using byte IO */
1757     if (block_size == 1)
1758         return false;
1759 
1760     for (i = 1; i < len; i += block_size) {
1761         if (memchr_inv(buf + i, '\0', min(block_size - 1, len - i)))
1762             return false;
1763     }
1764     return true;
1765 }
1766 
1767 static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id)
1768 {
1769     u8 check;
1770     int err;
1771 
1772     if (id->base.phys_id != SFF8024_ID_SFF_8472 ||
1773         id->base.phys_ext_id != SFP_PHYS_EXT_ID_SFP ||
1774         id->base.connector != SFF8024_CONNECTOR_LC) {
1775         dev_warn(sfp->dev, "Rewriting fiber module EEPROM with corrected values\n");
1776         id->base.phys_id = SFF8024_ID_SFF_8472;
1777         id->base.phys_ext_id = SFP_PHYS_EXT_ID_SFP;
1778         id->base.connector = SFF8024_CONNECTOR_LC;
1779         err = sfp_write(sfp, false, SFP_PHYS_ID, &id->base, 3);
1780         if (err != 3) {
1781             dev_err(sfp->dev,
1782                 "Failed to rewrite module EEPROM: %pe\n",
1783                 ERR_PTR(err));
1784             return err;
1785         }
1786 
1787         /* Cotsworks modules have been found to require a delay between write operations. */
1788         mdelay(50);
1789 
1790         /* Update base structure checksum */
1791         check = sfp_check(&id->base, sizeof(id->base) - 1);
1792         err = sfp_write(sfp, false, SFP_CC_BASE, &check, 1);
1793         if (err != 1) {
1794             dev_err(sfp->dev,
1795                 "Failed to update base structure checksum in fiber module EEPROM: %pe\n",
1796                 ERR_PTR(err));
1797             return err;
1798         }
1799     }
1800     return 0;
1801 }
1802 
1803 static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
1804 {
1805     /* SFP module inserted - read I2C data */
1806     struct sfp_eeprom_id id;
1807     bool cotsworks_sfbg;
1808     bool cotsworks;
1809     u8 check;
1810     int ret;
1811 
1812     /* Some SFP modules and also some Linux I2C drivers do not like reads
1813      * longer than 16 bytes, so read the EEPROM in chunks of 16 bytes at
1814      * a time.
1815      */
1816     sfp->i2c_block_size = 16;
1817 
1818     ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
1819     if (ret < 0) {
1820         if (report)
1821             dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
1822                 ERR_PTR(ret));
1823         return -EAGAIN;
1824     }
1825 
1826     if (ret != sizeof(id.base)) {
1827         dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
1828         return -EAGAIN;
1829     }
1830 
1831     /* Some SFP modules (e.g. Nokia 3FE46541AA) lock up if read from
1832      * address 0x51 is just one byte at a time. Also SFF-8472 requires
1833      * that EEPROM supports atomic 16bit read operation for diagnostic
1834      * fields, so do not switch to one byte reading at a time unless it
1835      * is really required and we have no other option.
1836      */
1837     if (sfp_id_needs_byte_io(sfp, &id.base, sizeof(id.base))) {
1838         dev_info(sfp->dev,
1839              "Detected broken RTL8672/RTL9601C emulated EEPROM\n");
1840         dev_info(sfp->dev,
1841              "Switching to reading EEPROM to one byte at a time\n");
1842         sfp->i2c_block_size = 1;
1843 
1844         ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
1845         if (ret < 0) {
1846             if (report)
1847                 dev_err(sfp->dev,
1848                     "failed to read EEPROM: %pe\n",
1849                     ERR_PTR(ret));
1850             return -EAGAIN;
1851         }
1852 
1853         if (ret != sizeof(id.base)) {
1854             dev_err(sfp->dev, "EEPROM short read: %pe\n",
1855                 ERR_PTR(ret));
1856             return -EAGAIN;
1857         }
1858     }
1859 
1860     /* Cotsworks do not seem to update the checksums when they
1861      * do the final programming with the final module part number,
1862      * serial number and date code.
1863      */
1864     cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS       ", 16);
1865     cotsworks_sfbg = !memcmp(id.base.vendor_pn, "SFBG", 4);
1866 
1867     /* Cotsworks SFF module EEPROM do not always have valid phys_id,
1868      * phys_ext_id, and connector bytes.  Rewrite SFF EEPROM bytes if
1869      * Cotsworks PN matches and bytes are not correct.
1870      */
1871     if (cotsworks && cotsworks_sfbg) {
1872         ret = sfp_cotsworks_fixup_check(sfp, &id);
1873         if (ret < 0)
1874             return ret;
1875     }
1876 
1877     /* Validate the checksum over the base structure */
1878     check = sfp_check(&id.base, sizeof(id.base) - 1);
1879     if (check != id.base.cc_base) {
1880         if (cotsworks) {
1881             dev_warn(sfp->dev,
1882                  "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
1883                  check, id.base.cc_base);
1884         } else {
1885             dev_err(sfp->dev,
1886                 "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
1887                 check, id.base.cc_base);
1888             print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1889                        16, 1, &id, sizeof(id), true);
1890             return -EINVAL;
1891         }
1892     }
1893 
1894     ret = sfp_read(sfp, false, SFP_CC_BASE + 1, &id.ext, sizeof(id.ext));
1895     if (ret < 0) {
1896         if (report)
1897             dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
1898                 ERR_PTR(ret));
1899         return -EAGAIN;
1900     }
1901 
1902     if (ret != sizeof(id.ext)) {
1903         dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
1904         return -EAGAIN;
1905     }
1906 
1907     check = sfp_check(&id.ext, sizeof(id.ext) - 1);
1908     if (check != id.ext.cc_ext) {
1909         if (cotsworks) {
1910             dev_warn(sfp->dev,
1911                  "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
1912                  check, id.ext.cc_ext);
1913         } else {
1914             dev_err(sfp->dev,
1915                 "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
1916                 check, id.ext.cc_ext);
1917             print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1918                        16, 1, &id, sizeof(id), true);
1919             memset(&id.ext, 0, sizeof(id.ext));
1920         }
1921     }
1922 
1923     sfp->id = id;
1924 
1925     dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
1926          (int)sizeof(id.base.vendor_name), id.base.vendor_name,
1927          (int)sizeof(id.base.vendor_pn), id.base.vendor_pn,
1928          (int)sizeof(id.base.vendor_rev), id.base.vendor_rev,
1929          (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
1930          (int)sizeof(id.ext.datecode), id.ext.datecode);
1931 
1932     /* Check whether we support this module */
1933     if (!sfp->type->module_supported(&id)) {
1934         dev_err(sfp->dev,
1935             "module is not supported - phys id 0x%02x 0x%02x\n",
1936             sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
1937         return -EINVAL;
1938     }
1939 
1940     /* If the module requires address swap mode, warn about it */
1941     if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1942         dev_warn(sfp->dev,
1943              "module address swap to access page 0xA2 is not supported.\n");
1944 
1945     /* Parse the module power requirement */
1946     ret = sfp_module_parse_power(sfp);
1947     if (ret < 0)
1948         return ret;
1949 
1950     if (!memcmp(id.base.vendor_name, "ALCATELLUCENT   ", 16) &&
1951         !memcmp(id.base.vendor_pn, "3FE46541AA      ", 16))
1952         sfp->module_t_start_up = T_START_UP_BAD_GPON;
1953     else
1954         sfp->module_t_start_up = T_START_UP;
1955 
1956     if (!memcmp(id.base.vendor_name, "HUAWEI          ", 16) &&
1957         !memcmp(id.base.vendor_pn, "MA5671A         ", 16))
1958         sfp->tx_fault_ignore = true;
1959     else
1960         sfp->tx_fault_ignore = false;
1961 
1962     return 0;
1963 }
1964 
1965 static void sfp_sm_mod_remove(struct sfp *sfp)
1966 {
1967     if (sfp->sm_mod_state > SFP_MOD_WAITDEV)
1968         sfp_module_remove(sfp->sfp_bus);
1969 
1970     sfp_hwmon_remove(sfp);
1971 
1972     memset(&sfp->id, 0, sizeof(sfp->id));
1973     sfp->module_power_mW = 0;
1974 
1975     dev_info(sfp->dev, "module removed\n");
1976 }
1977 
1978 /* This state machine tracks the upstream's state */
1979 static void sfp_sm_device(struct sfp *sfp, unsigned int event)
1980 {
1981     switch (sfp->sm_dev_state) {
1982     default:
1983         if (event == SFP_E_DEV_ATTACH)
1984             sfp->sm_dev_state = SFP_DEV_DOWN;
1985         break;
1986 
1987     case SFP_DEV_DOWN:
1988         if (event == SFP_E_DEV_DETACH)
1989             sfp->sm_dev_state = SFP_DEV_DETACHED;
1990         else if (event == SFP_E_DEV_UP)
1991             sfp->sm_dev_state = SFP_DEV_UP;
1992         break;
1993 
1994     case SFP_DEV_UP:
1995         if (event == SFP_E_DEV_DETACH)
1996             sfp->sm_dev_state = SFP_DEV_DETACHED;
1997         else if (event == SFP_E_DEV_DOWN)
1998             sfp->sm_dev_state = SFP_DEV_DOWN;
1999         break;
2000     }
2001 }
2002 
2003 /* This state machine tracks the insert/remove state of the module, probes
2004  * the on-board EEPROM, and sets up the power level.
2005  */
2006 static void sfp_sm_module(struct sfp *sfp, unsigned int event)
2007 {
2008     int err;
2009 
2010     /* Handle remove event globally, it resets this state machine */
2011     if (event == SFP_E_REMOVE) {
2012         if (sfp->sm_mod_state > SFP_MOD_PROBE)
2013             sfp_sm_mod_remove(sfp);
2014         sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0);
2015         return;
2016     }
2017 
2018     /* Handle device detach globally */
2019     if (sfp->sm_dev_state < SFP_DEV_DOWN &&
2020         sfp->sm_mod_state > SFP_MOD_WAITDEV) {
2021         if (sfp->module_power_mW > 1000 &&
2022             sfp->sm_mod_state > SFP_MOD_HPOWER)
2023             sfp_sm_mod_hpower(sfp, false);
2024         sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2025         return;
2026     }
2027 
2028     switch (sfp->sm_mod_state) {
2029     default:
2030         if (event == SFP_E_INSERT) {
2031             sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL);
2032             sfp->sm_mod_tries_init = R_PROBE_RETRY_INIT;
2033             sfp->sm_mod_tries = R_PROBE_RETRY_SLOW;
2034         }
2035         break;
2036 
2037     case SFP_MOD_PROBE:
2038         /* Wait for T_PROBE_INIT to time out */
2039         if (event != SFP_E_TIMEOUT)
2040             break;
2041 
2042         err = sfp_sm_mod_probe(sfp, sfp->sm_mod_tries == 1);
2043         if (err == -EAGAIN) {
2044             if (sfp->sm_mod_tries_init &&
2045                --sfp->sm_mod_tries_init) {
2046                 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2047                 break;
2048             } else if (sfp->sm_mod_tries && --sfp->sm_mod_tries) {
2049                 if (sfp->sm_mod_tries == R_PROBE_RETRY_SLOW - 1)
2050                     dev_warn(sfp->dev,
2051                          "please wait, module slow to respond\n");
2052                 sfp_sm_set_timer(sfp, T_PROBE_RETRY_SLOW);
2053                 break;
2054             }
2055         }
2056         if (err < 0) {
2057             sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2058             break;
2059         }
2060 
2061         err = sfp_hwmon_insert(sfp);
2062         if (err)
2063             dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
2064                  ERR_PTR(err));
2065 
2066         sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2067         fallthrough;
2068     case SFP_MOD_WAITDEV:
2069         /* Ensure that the device is attached before proceeding */
2070         if (sfp->sm_dev_state < SFP_DEV_DOWN)
2071             break;
2072 
2073         /* Report the module insertion to the upstream device */
2074         err = sfp_module_insert(sfp->sfp_bus, &sfp->id);
2075         if (err < 0) {
2076             sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2077             break;
2078         }
2079 
2080         /* If this is a power level 1 module, we are done */
2081         if (sfp->module_power_mW <= 1000)
2082             goto insert;
2083 
2084         sfp_sm_mod_next(sfp, SFP_MOD_HPOWER, 0);
2085         fallthrough;
2086     case SFP_MOD_HPOWER:
2087         /* Enable high power mode */
2088         err = sfp_sm_mod_hpower(sfp, true);
2089         if (err < 0) {
2090             if (err != -EAGAIN) {
2091                 sfp_module_remove(sfp->sfp_bus);
2092                 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2093             } else {
2094                 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2095             }
2096             break;
2097         }
2098 
2099         sfp_sm_mod_next(sfp, SFP_MOD_WAITPWR, T_HPOWER_LEVEL);
2100         break;
2101 
2102     case SFP_MOD_WAITPWR:
2103         /* Wait for T_HPOWER_LEVEL to time out */
2104         if (event != SFP_E_TIMEOUT)
2105             break;
2106 
2107     insert:
2108         sfp_sm_mod_next(sfp, SFP_MOD_PRESENT, 0);
2109         break;
2110 
2111     case SFP_MOD_PRESENT:
2112     case SFP_MOD_ERROR:
2113         break;
2114     }
2115 }
2116 
2117 static void sfp_sm_main(struct sfp *sfp, unsigned int event)
2118 {
2119     unsigned long timeout;
2120     int ret;
2121 
2122     /* Some events are global */
2123     if (sfp->sm_state != SFP_S_DOWN &&
2124         (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2125          sfp->sm_dev_state != SFP_DEV_UP)) {
2126         if (sfp->sm_state == SFP_S_LINK_UP &&
2127             sfp->sm_dev_state == SFP_DEV_UP)
2128             sfp_sm_link_down(sfp);
2129         if (sfp->sm_state > SFP_S_INIT)
2130             sfp_module_stop(sfp->sfp_bus);
2131         if (sfp->mod_phy)
2132             sfp_sm_phy_detach(sfp);
2133         sfp_module_tx_disable(sfp);
2134         sfp_soft_stop_poll(sfp);
2135         sfp_sm_next(sfp, SFP_S_DOWN, 0);
2136         return;
2137     }
2138 
2139     /* The main state machine */
2140     switch (sfp->sm_state) {
2141     case SFP_S_DOWN:
2142         if (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2143             sfp->sm_dev_state != SFP_DEV_UP)
2144             break;
2145 
2146         if (!(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE))
2147             sfp_soft_start_poll(sfp);
2148 
2149         sfp_module_tx_enable(sfp);
2150 
2151         /* Initialise the fault clearance retries */
2152         sfp->sm_fault_retries = N_FAULT_INIT;
2153 
2154         /* We need to check the TX_FAULT state, which is not defined
2155          * while TX_DISABLE is asserted. The earliest we want to do
2156          * anything (such as probe for a PHY) is 50ms.
2157          */
2158         sfp_sm_next(sfp, SFP_S_WAIT, T_WAIT);
2159         break;
2160 
2161     case SFP_S_WAIT:
2162         if (event != SFP_E_TIMEOUT)
2163             break;
2164 
2165         if (sfp->state & SFP_F_TX_FAULT) {
2166             /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
2167              * from the TX_DISABLE deassertion for the module to
2168              * initialise, which is indicated by TX_FAULT
2169              * deasserting.
2170              */
2171             timeout = sfp->module_t_start_up;
2172             if (timeout > T_WAIT)
2173                 timeout -= T_WAIT;
2174             else
2175                 timeout = 1;
2176 
2177             sfp_sm_next(sfp, SFP_S_INIT, timeout);
2178         } else {
2179             /* TX_FAULT is not asserted, assume the module has
2180              * finished initialising.
2181              */
2182             goto init_done;
2183         }
2184         break;
2185 
2186     case SFP_S_INIT:
2187         if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2188             /* TX_FAULT is still asserted after t_init
2189              * or t_start_up, so assume there is a fault.
2190              */
2191             sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
2192                      sfp->sm_fault_retries == N_FAULT_INIT);
2193         } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2194     init_done:
2195             sfp->sm_phy_retries = R_PHY_RETRY;
2196             goto phy_probe;
2197         }
2198         break;
2199 
2200     case SFP_S_INIT_PHY:
2201         if (event != SFP_E_TIMEOUT)
2202             break;
2203     phy_probe:
2204         /* TX_FAULT deasserted or we timed out with TX_FAULT
2205          * clear.  Probe for the PHY and check the LOS state.
2206          */
2207         ret = sfp_sm_probe_for_phy(sfp);
2208         if (ret == -ENODEV) {
2209             if (--sfp->sm_phy_retries) {
2210                 sfp_sm_next(sfp, SFP_S_INIT_PHY, T_PHY_RETRY);
2211                 break;
2212             } else {
2213                 dev_info(sfp->dev, "no PHY detected\n");
2214             }
2215         } else if (ret) {
2216             sfp_sm_next(sfp, SFP_S_FAIL, 0);
2217             break;
2218         }
2219         if (sfp_module_start(sfp->sfp_bus)) {
2220             sfp_sm_next(sfp, SFP_S_FAIL, 0);
2221             break;
2222         }
2223         sfp_sm_link_check_los(sfp);
2224 
2225         /* Reset the fault retry count */
2226         sfp->sm_fault_retries = N_FAULT;
2227         break;
2228 
2229     case SFP_S_INIT_TX_FAULT:
2230         if (event == SFP_E_TIMEOUT) {
2231             sfp_module_tx_fault_reset(sfp);
2232             sfp_sm_next(sfp, SFP_S_INIT, sfp->module_t_start_up);
2233         }
2234         break;
2235 
2236     case SFP_S_WAIT_LOS:
2237         if (event == SFP_E_TX_FAULT)
2238             sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2239         else if (sfp_los_event_inactive(sfp, event))
2240             sfp_sm_link_up(sfp);
2241         break;
2242 
2243     case SFP_S_LINK_UP:
2244         if (event == SFP_E_TX_FAULT) {
2245             sfp_sm_link_down(sfp);
2246             sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2247         } else if (sfp_los_event_active(sfp, event)) {
2248             sfp_sm_link_down(sfp);
2249             sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
2250         }
2251         break;
2252 
2253     case SFP_S_TX_FAULT:
2254         if (event == SFP_E_TIMEOUT) {
2255             sfp_module_tx_fault_reset(sfp);
2256             sfp_sm_next(sfp, SFP_S_REINIT, sfp->module_t_start_up);
2257         }
2258         break;
2259 
2260     case SFP_S_REINIT:
2261         if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2262             sfp_sm_fault(sfp, SFP_S_TX_FAULT, false);
2263         } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2264             dev_info(sfp->dev, "module transmit fault recovered\n");
2265             sfp_sm_link_check_los(sfp);
2266         }
2267         break;
2268 
2269     case SFP_S_TX_DISABLE:
2270         break;
2271     }
2272 }
2273 
2274 static void sfp_sm_event(struct sfp *sfp, unsigned int event)
2275 {
2276     mutex_lock(&sfp->sm_mutex);
2277 
2278     dev_dbg(sfp->dev, "SM: enter %s:%s:%s event %s\n",
2279         mod_state_to_str(sfp->sm_mod_state),
2280         dev_state_to_str(sfp->sm_dev_state),
2281         sm_state_to_str(sfp->sm_state),
2282         event_to_str(event));
2283 
2284     sfp_sm_device(sfp, event);
2285     sfp_sm_module(sfp, event);
2286     sfp_sm_main(sfp, event);
2287 
2288     dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
2289         mod_state_to_str(sfp->sm_mod_state),
2290         dev_state_to_str(sfp->sm_dev_state),
2291         sm_state_to_str(sfp->sm_state));
2292 
2293     mutex_unlock(&sfp->sm_mutex);
2294 }
2295 
2296 static void sfp_attach(struct sfp *sfp)
2297 {
2298     sfp_sm_event(sfp, SFP_E_DEV_ATTACH);
2299 }
2300 
2301 static void sfp_detach(struct sfp *sfp)
2302 {
2303     sfp_sm_event(sfp, SFP_E_DEV_DETACH);
2304 }
2305 
2306 static void sfp_start(struct sfp *sfp)
2307 {
2308     sfp_sm_event(sfp, SFP_E_DEV_UP);
2309 }
2310 
2311 static void sfp_stop(struct sfp *sfp)
2312 {
2313     sfp_sm_event(sfp, SFP_E_DEV_DOWN);
2314 }
2315 
2316 static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo)
2317 {
2318     /* locking... and check module is present */
2319 
2320     if (sfp->id.ext.sff8472_compliance &&
2321         !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) {
2322         modinfo->type = ETH_MODULE_SFF_8472;
2323         modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
2324     } else {
2325         modinfo->type = ETH_MODULE_SFF_8079;
2326         modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
2327     }
2328     return 0;
2329 }
2330 
2331 static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee,
2332                  u8 *data)
2333 {
2334     unsigned int first, last, len;
2335     int ret;
2336 
2337     if (ee->len == 0)
2338         return -EINVAL;
2339 
2340     first = ee->offset;
2341     last = ee->offset + ee->len;
2342     if (first < ETH_MODULE_SFF_8079_LEN) {
2343         len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN);
2344         len -= first;
2345 
2346         ret = sfp_read(sfp, false, first, data, len);
2347         if (ret < 0)
2348             return ret;
2349 
2350         first += len;
2351         data += len;
2352     }
2353     if (first < ETH_MODULE_SFF_8472_LEN && last > ETH_MODULE_SFF_8079_LEN) {
2354         len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN);
2355         len -= first;
2356         first -= ETH_MODULE_SFF_8079_LEN;
2357 
2358         ret = sfp_read(sfp, true, first, data, len);
2359         if (ret < 0)
2360             return ret;
2361     }
2362     return 0;
2363 }
2364 
2365 static int sfp_module_eeprom_by_page(struct sfp *sfp,
2366                      const struct ethtool_module_eeprom *page,
2367                      struct netlink_ext_ack *extack)
2368 {
2369     if (page->bank) {
2370         NL_SET_ERR_MSG(extack, "Banks not supported");
2371         return -EOPNOTSUPP;
2372     }
2373 
2374     if (page->page) {
2375         NL_SET_ERR_MSG(extack, "Only page 0 supported");
2376         return -EOPNOTSUPP;
2377     }
2378 
2379     if (page->i2c_address != 0x50 &&
2380         page->i2c_address != 0x51) {
2381         NL_SET_ERR_MSG(extack, "Only address 0x50 and 0x51 supported");
2382         return -EOPNOTSUPP;
2383     }
2384 
2385     return sfp_read(sfp, page->i2c_address == 0x51, page->offset,
2386             page->data, page->length);
2387 };
2388 
2389 static const struct sfp_socket_ops sfp_module_ops = {
2390     .attach = sfp_attach,
2391     .detach = sfp_detach,
2392     .start = sfp_start,
2393     .stop = sfp_stop,
2394     .module_info = sfp_module_info,
2395     .module_eeprom = sfp_module_eeprom,
2396     .module_eeprom_by_page = sfp_module_eeprom_by_page,
2397 };
2398 
2399 static void sfp_timeout(struct work_struct *work)
2400 {
2401     struct sfp *sfp = container_of(work, struct sfp, timeout.work);
2402 
2403     rtnl_lock();
2404     sfp_sm_event(sfp, SFP_E_TIMEOUT);
2405     rtnl_unlock();
2406 }
2407 
2408 static void sfp_check_state(struct sfp *sfp)
2409 {
2410     unsigned int state, i, changed;
2411 
2412     mutex_lock(&sfp->st_mutex);
2413     state = sfp_get_state(sfp);
2414     changed = state ^ sfp->state;
2415     if (sfp->tx_fault_ignore)
2416         changed &= SFP_F_PRESENT | SFP_F_LOS;
2417     else
2418         changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
2419 
2420     for (i = 0; i < GPIO_MAX; i++)
2421         if (changed & BIT(i))
2422             dev_dbg(sfp->dev, "%s %u -> %u\n", gpio_of_names[i],
2423                 !!(sfp->state & BIT(i)), !!(state & BIT(i)));
2424 
2425     state |= sfp->state & (SFP_F_TX_DISABLE | SFP_F_RATE_SELECT);
2426     sfp->state = state;
2427 
2428     rtnl_lock();
2429     if (changed & SFP_F_PRESENT)
2430         sfp_sm_event(sfp, state & SFP_F_PRESENT ?
2431                 SFP_E_INSERT : SFP_E_REMOVE);
2432 
2433     if (changed & SFP_F_TX_FAULT)
2434         sfp_sm_event(sfp, state & SFP_F_TX_FAULT ?
2435                 SFP_E_TX_FAULT : SFP_E_TX_CLEAR);
2436 
2437     if (changed & SFP_F_LOS)
2438         sfp_sm_event(sfp, state & SFP_F_LOS ?
2439                 SFP_E_LOS_HIGH : SFP_E_LOS_LOW);
2440     rtnl_unlock();
2441     mutex_unlock(&sfp->st_mutex);
2442 }
2443 
2444 static irqreturn_t sfp_irq(int irq, void *data)
2445 {
2446     struct sfp *sfp = data;
2447 
2448     sfp_check_state(sfp);
2449 
2450     return IRQ_HANDLED;
2451 }
2452 
2453 static void sfp_poll(struct work_struct *work)
2454 {
2455     struct sfp *sfp = container_of(work, struct sfp, poll.work);
2456 
2457     sfp_check_state(sfp);
2458 
2459     if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) ||
2460         sfp->need_poll)
2461         mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2462 }
2463 
2464 static struct sfp *sfp_alloc(struct device *dev)
2465 {
2466     struct sfp *sfp;
2467 
2468     sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
2469     if (!sfp)
2470         return ERR_PTR(-ENOMEM);
2471 
2472     sfp->dev = dev;
2473 
2474     mutex_init(&sfp->sm_mutex);
2475     mutex_init(&sfp->st_mutex);
2476     INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
2477     INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
2478 
2479     sfp_hwmon_init(sfp);
2480 
2481     return sfp;
2482 }
2483 
2484 static void sfp_cleanup(void *data)
2485 {
2486     struct sfp *sfp = data;
2487 
2488     sfp_hwmon_exit(sfp);
2489 
2490     cancel_delayed_work_sync(&sfp->poll);
2491     cancel_delayed_work_sync(&sfp->timeout);
2492     if (sfp->i2c_mii) {
2493         mdiobus_unregister(sfp->i2c_mii);
2494         mdiobus_free(sfp->i2c_mii);
2495     }
2496     if (sfp->i2c)
2497         i2c_put_adapter(sfp->i2c);
2498     kfree(sfp);
2499 }
2500 
2501 static int sfp_probe(struct platform_device *pdev)
2502 {
2503     const struct sff_data *sff;
2504     struct i2c_adapter *i2c;
2505     char *sfp_irq_name;
2506     struct sfp *sfp;
2507     int err, i;
2508 
2509     sfp = sfp_alloc(&pdev->dev);
2510     if (IS_ERR(sfp))
2511         return PTR_ERR(sfp);
2512 
2513     platform_set_drvdata(pdev, sfp);
2514 
2515     err = devm_add_action_or_reset(sfp->dev, sfp_cleanup, sfp);
2516     if (err < 0)
2517         return err;
2518 
2519     sff = sfp->type = &sfp_data;
2520 
2521     if (pdev->dev.of_node) {
2522         struct device_node *node = pdev->dev.of_node;
2523         const struct of_device_id *id;
2524         struct device_node *np;
2525 
2526         id = of_match_node(sfp_of_match, node);
2527         if (WARN_ON(!id))
2528             return -EINVAL;
2529 
2530         sff = sfp->type = id->data;
2531 
2532         np = of_parse_phandle(node, "i2c-bus", 0);
2533         if (!np) {
2534             dev_err(sfp->dev, "missing 'i2c-bus' property\n");
2535             return -ENODEV;
2536         }
2537 
2538         i2c = of_find_i2c_adapter_by_node(np);
2539         of_node_put(np);
2540     } else if (has_acpi_companion(&pdev->dev)) {
2541         struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
2542         struct fwnode_handle *fw = acpi_fwnode_handle(adev);
2543         struct fwnode_reference_args args;
2544         struct acpi_handle *acpi_handle;
2545         int ret;
2546 
2547         ret = acpi_node_get_property_reference(fw, "i2c-bus", 0, &args);
2548         if (ret || !is_acpi_device_node(args.fwnode)) {
2549             dev_err(&pdev->dev, "missing 'i2c-bus' property\n");
2550             return -ENODEV;
2551         }
2552 
2553         acpi_handle = ACPI_HANDLE_FWNODE(args.fwnode);
2554         i2c = i2c_acpi_find_adapter_by_handle(acpi_handle);
2555     } else {
2556         return -EINVAL;
2557     }
2558 
2559     if (!i2c)
2560         return -EPROBE_DEFER;
2561 
2562     err = sfp_i2c_configure(sfp, i2c);
2563     if (err < 0) {
2564         i2c_put_adapter(i2c);
2565         return err;
2566     }
2567 
2568     for (i = 0; i < GPIO_MAX; i++)
2569         if (sff->gpios & BIT(i)) {
2570             sfp->gpio[i] = devm_gpiod_get_optional(sfp->dev,
2571                        gpio_of_names[i], gpio_flags[i]);
2572             if (IS_ERR(sfp->gpio[i]))
2573                 return PTR_ERR(sfp->gpio[i]);
2574         }
2575 
2576     sfp->get_state = sfp_gpio_get_state;
2577     sfp->set_state = sfp_gpio_set_state;
2578 
2579     /* Modules that have no detect signal are always present */
2580     if (!(sfp->gpio[GPIO_MODDEF0]))
2581         sfp->get_state = sff_gpio_get_state;
2582 
2583     device_property_read_u32(&pdev->dev, "maximum-power-milliwatt",
2584                  &sfp->max_power_mW);
2585     if (!sfp->max_power_mW)
2586         sfp->max_power_mW = 1000;
2587 
2588     dev_info(sfp->dev, "Host maximum power %u.%uW\n",
2589          sfp->max_power_mW / 1000, (sfp->max_power_mW / 100) % 10);
2590 
2591     /* Get the initial state, and always signal TX disable,
2592      * since the network interface will not be up.
2593      */
2594     sfp->state = sfp_get_state(sfp) | SFP_F_TX_DISABLE;
2595 
2596     if (sfp->gpio[GPIO_RATE_SELECT] &&
2597         gpiod_get_value_cansleep(sfp->gpio[GPIO_RATE_SELECT]))
2598         sfp->state |= SFP_F_RATE_SELECT;
2599     sfp_set_state(sfp, sfp->state);
2600     sfp_module_tx_disable(sfp);
2601     if (sfp->state & SFP_F_PRESENT) {
2602         rtnl_lock();
2603         sfp_sm_event(sfp, SFP_E_INSERT);
2604         rtnl_unlock();
2605     }
2606 
2607     for (i = 0; i < GPIO_MAX; i++) {
2608         if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
2609             continue;
2610 
2611         sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
2612         if (sfp->gpio_irq[i] < 0) {
2613             sfp->gpio_irq[i] = 0;
2614             sfp->need_poll = true;
2615             continue;
2616         }
2617 
2618         sfp_irq_name = devm_kasprintf(sfp->dev, GFP_KERNEL,
2619                           "%s-%s", dev_name(sfp->dev),
2620                           gpio_of_names[i]);
2621 
2622         if (!sfp_irq_name)
2623             return -ENOMEM;
2624 
2625         err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
2626                         NULL, sfp_irq,
2627                         IRQF_ONESHOT |
2628                         IRQF_TRIGGER_RISING |
2629                         IRQF_TRIGGER_FALLING,
2630                         sfp_irq_name, sfp);
2631         if (err) {
2632             sfp->gpio_irq[i] = 0;
2633             sfp->need_poll = true;
2634         }
2635     }
2636 
2637     if (sfp->need_poll)
2638         mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2639 
2640     /* We could have an issue in cases no Tx disable pin is available or
2641      * wired as modules using a laser as their light source will continue to
2642      * be active when the fiber is removed. This could be a safety issue and
2643      * we should at least warn the user about that.
2644      */
2645     if (!sfp->gpio[GPIO_TX_DISABLE])
2646         dev_warn(sfp->dev,
2647              "No tx_disable pin: SFP modules will always be emitting.\n");
2648 
2649     sfp->sfp_bus = sfp_register_socket(sfp->dev, sfp, &sfp_module_ops);
2650     if (!sfp->sfp_bus)
2651         return -ENOMEM;
2652 
2653     sfp_debugfs_init(sfp);
2654 
2655     return 0;
2656 }
2657 
2658 static int sfp_remove(struct platform_device *pdev)
2659 {
2660     struct sfp *sfp = platform_get_drvdata(pdev);
2661 
2662     sfp_debugfs_exit(sfp);
2663     sfp_unregister_socket(sfp->sfp_bus);
2664 
2665     rtnl_lock();
2666     sfp_sm_event(sfp, SFP_E_REMOVE);
2667     rtnl_unlock();
2668 
2669     return 0;
2670 }
2671 
2672 static void sfp_shutdown(struct platform_device *pdev)
2673 {
2674     struct sfp *sfp = platform_get_drvdata(pdev);
2675     int i;
2676 
2677     for (i = 0; i < GPIO_MAX; i++) {
2678         if (!sfp->gpio_irq[i])
2679             continue;
2680 
2681         devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
2682     }
2683 
2684     cancel_delayed_work_sync(&sfp->poll);
2685     cancel_delayed_work_sync(&sfp->timeout);
2686 }
2687 
2688 static struct platform_driver sfp_driver = {
2689     .probe = sfp_probe,
2690     .remove = sfp_remove,
2691     .shutdown = sfp_shutdown,
2692     .driver = {
2693         .name = "sfp",
2694         .of_match_table = sfp_of_match,
2695     },
2696 };
2697 
2698 static int sfp_init(void)
2699 {
2700     poll_jiffies = msecs_to_jiffies(100);
2701 
2702     return platform_driver_register(&sfp_driver);
2703 }
2704 module_init(sfp_init);
2705 
2706 static void sfp_exit(void)
2707 {
2708     platform_driver_unregister(&sfp_driver);
2709 }
2710 module_exit(sfp_exit);
2711 
2712 MODULE_ALIAS("platform:sfp");
2713 MODULE_AUTHOR("Russell King");
2714 MODULE_LICENSE("GPL v2");