blob: 7d08b690f5acee5ad6aaa6389a635f57debb0731 [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001#include <linux/ctype.h>
2#include <linux/delay.h>
3#include <linux/gpio/consumer.h>
4#include <linux/hwmon.h>
5#include <linux/i2c.h>
6#include <linux/interrupt.h>
7#include <linux/jiffies.h>
8#include <linux/module.h>
9#include <linux/mutex.h>
10#include <linux/of.h>
11#include <linux/phy.h>
12#include <linux/platform_device.h>
13#include <linux/rtnetlink.h>
14#include <linux/slab.h>
15#include <linux/workqueue.h>
16
17#include "mdio-i2c.h"
18#include "sfp.h"
19#include "swphy.h"
20
21enum {
22 GPIO_MODDEF0,
23 GPIO_LOS,
24 GPIO_TX_FAULT,
25 GPIO_TX_DISABLE,
26 GPIO_RATE_SELECT,
27 GPIO_MAX,
28
29 SFP_F_PRESENT = BIT(GPIO_MODDEF0),
30 SFP_F_LOS = BIT(GPIO_LOS),
31 SFP_F_TX_FAULT = BIT(GPIO_TX_FAULT),
32 SFP_F_TX_DISABLE = BIT(GPIO_TX_DISABLE),
33 SFP_F_RATE_SELECT = BIT(GPIO_RATE_SELECT),
34
35 SFP_E_INSERT = 0,
36 SFP_E_REMOVE,
37 SFP_E_DEV_ATTACH,
38 SFP_E_DEV_DETACH,
39 SFP_E_DEV_DOWN,
40 SFP_E_DEV_UP,
41 SFP_E_TX_FAULT,
42 SFP_E_TX_CLEAR,
43 SFP_E_LOS_HIGH,
44 SFP_E_LOS_LOW,
45 SFP_E_TIMEOUT,
46
47 SFP_MOD_EMPTY = 0,
48 SFP_MOD_ERROR,
49 SFP_MOD_PROBE,
50 SFP_MOD_WAITDEV,
51 SFP_MOD_HPOWER,
52 SFP_MOD_WAITPWR,
53 SFP_MOD_PRESENT,
54
55 SFP_DEV_DETACHED = 0,
56 SFP_DEV_DOWN,
57 SFP_DEV_UP,
58
59 SFP_S_DOWN = 0,
60 SFP_S_FAIL,
61 SFP_S_WAIT,
62 SFP_S_INIT,
63 SFP_S_INIT_PHY,
64 SFP_S_INIT_TX_FAULT,
65 SFP_S_WAIT_LOS,
66 SFP_S_LINK_UP,
67 SFP_S_TX_FAULT,
68 SFP_S_REINIT,
69 SFP_S_TX_DISABLE,
70};
71
72static const char * const mod_state_strings[] = {
73 [SFP_MOD_EMPTY] = "empty",
74 [SFP_MOD_ERROR] = "error",
75 [SFP_MOD_PROBE] = "probe",
76 [SFP_MOD_WAITDEV] = "waitdev",
77 [SFP_MOD_HPOWER] = "hpower",
78 [SFP_MOD_WAITPWR] = "waitpwr",
79 [SFP_MOD_PRESENT] = "present",
80};
81
82static const char *mod_state_to_str(unsigned short mod_state)
83{
84 if (mod_state >= ARRAY_SIZE(mod_state_strings))
85 return "Unknown module state";
86 return mod_state_strings[mod_state];
87}
88
89static const char * const dev_state_strings[] = {
90 [SFP_DEV_DETACHED] = "detached",
91 [SFP_DEV_DOWN] = "down",
92 [SFP_DEV_UP] = "up",
93};
94
95static const char *dev_state_to_str(unsigned short dev_state)
96{
97 if (dev_state >= ARRAY_SIZE(dev_state_strings))
98 return "Unknown device state";
99 return dev_state_strings[dev_state];
100}
101
102static const char * const event_strings[] = {
103 [SFP_E_INSERT] = "insert",
104 [SFP_E_REMOVE] = "remove",
105 [SFP_E_DEV_ATTACH] = "dev_attach",
106 [SFP_E_DEV_DETACH] = "dev_detach",
107 [SFP_E_DEV_DOWN] = "dev_down",
108 [SFP_E_DEV_UP] = "dev_up",
109 [SFP_E_TX_FAULT] = "tx_fault",
110 [SFP_E_TX_CLEAR] = "tx_clear",
111 [SFP_E_LOS_HIGH] = "los_high",
112 [SFP_E_LOS_LOW] = "los_low",
113 [SFP_E_TIMEOUT] = "timeout",
114};
115
116static const char *event_to_str(unsigned short event)
117{
118 if (event >= ARRAY_SIZE(event_strings))
119 return "Unknown event";
120 return event_strings[event];
121}
122
123static const char * const sm_state_strings[] = {
124 [SFP_S_DOWN] = "down",
125 [SFP_S_FAIL] = "fail",
126 [SFP_S_WAIT] = "wait",
127 [SFP_S_INIT] = "init",
128 [SFP_S_INIT_PHY] = "init_phy",
129 [SFP_S_INIT_TX_FAULT] = "init_tx_fault",
130 [SFP_S_WAIT_LOS] = "wait_los",
131 [SFP_S_LINK_UP] = "link_up",
132 [SFP_S_TX_FAULT] = "tx_fault",
133 [SFP_S_REINIT] = "reinit",
134 [SFP_S_TX_DISABLE] = "rx_disable",
135};
136
137static const char *sm_state_to_str(unsigned short sm_state)
138{
139 if (sm_state >= ARRAY_SIZE(sm_state_strings))
140 return "Unknown state";
141 return sm_state_strings[sm_state];
142}
143
144static const char *gpio_of_names[] = {
145 "mod-def0",
146 "los",
147 "tx-fault",
148 "tx-disable",
149 "rate-select0",
150};
151
152static const enum gpiod_flags gpio_flags[] = {
153 GPIOD_IN,
154 GPIOD_IN,
155 GPIOD_IN,
156 GPIOD_ASIS,
157 GPIOD_ASIS,
158};
159
160/* t_start_up (SFF-8431) or t_init (SFF-8472) is the time required for a
161 * non-cooled module to initialise its laser safety circuitry. We wait
162 * an initial T_WAIT period before we check the tx fault to give any PHY
163 * on board (for a copper SFP) time to initialise.
164 */
165#define T_WAIT msecs_to_jiffies(50)
166#define T_START_UP msecs_to_jiffies(300)
167#define T_START_UP_BAD_GPON msecs_to_jiffies(60000)
168
169/* t_reset is the time required to assert the TX_DISABLE signal to reset
170 * an indicated TX_FAULT.
171 */
172#define T_RESET_US 10
173#define T_FAULT_RECOVER msecs_to_jiffies(1000)
174
175/* N_FAULT_INIT is the number of recovery attempts at module initialisation
176 * time. If the TX_FAULT signal is not deasserted after this number of
177 * attempts at clearing it, we decide that the module is faulty.
178 * N_FAULT is the same but after the module has initialised.
179 */
180#define N_FAULT_INIT 5
181#define N_FAULT 5
182
183/* T_PHY_RETRY is the time interval between attempts to probe the PHY.
184 * R_PHY_RETRY is the number of attempts.
185 */
186#define T_PHY_RETRY msecs_to_jiffies(50)
187#define R_PHY_RETRY 12
188
189/* SFP module presence detection is poor: the three MOD DEF signals are
190 * the same length on the PCB, which means it's possible for MOD DEF 0 to
191 * connect before the I2C bus on MOD DEF 1/2.
192 *
193 * The SFF-8472 specifies t_serial ("Time from power on until module is
194 * ready for data transmission over the two wire serial bus.") as 300ms.
195 */
196#define T_SERIAL msecs_to_jiffies(300)
197#define T_HPOWER_LEVEL msecs_to_jiffies(300)
198#define T_PROBE_RETRY_INIT msecs_to_jiffies(100)
199#define R_PROBE_RETRY_INIT 10
200#define T_PROBE_RETRY_SLOW msecs_to_jiffies(5000)
201#define R_PROBE_RETRY_SLOW 12
202
203/* SFP modules appear to always have their PHY configured for bus address
204 * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
205 */
206#define SFP_PHY_ADDR 22
207
208struct sff_data {
209 unsigned int gpios;
210 bool (*module_supported)(const struct sfp_eeprom_id *id);
211};
212
213struct sfp {
214 struct device *dev;
215 struct i2c_adapter *i2c;
216 struct mii_bus *i2c_mii;
217 struct sfp_bus *sfp_bus;
218 struct phy_device *mod_phy;
219 const struct sff_data *type;
220 u32 max_power_mW;
221
222 unsigned int (*get_state)(struct sfp *);
223 void (*set_state)(struct sfp *, unsigned int);
224 int (*read)(struct sfp *, bool, u8, void *, size_t);
225 int (*write)(struct sfp *, bool, u8, void *, size_t);
226
227 struct gpio_desc *gpio[GPIO_MAX];
228 int gpio_irq[GPIO_MAX];
229
230 bool need_poll;
231
232 struct mutex st_mutex; /* Protects state */
233 unsigned int state_soft_mask;
234 unsigned int state;
235 struct delayed_work poll;
236 struct delayed_work timeout;
237 struct mutex sm_mutex; /* Protects state machine */
238 unsigned char sm_mod_state;
239 unsigned char sm_mod_tries_init;
240 unsigned char sm_mod_tries;
241 unsigned char sm_dev_state;
242 unsigned short sm_state;
243 unsigned char sm_fault_retries;
244 unsigned char sm_phy_retries;
245
246 struct sfp_eeprom_id id;
247 unsigned int module_power_mW;
248 unsigned int module_t_start_up;
249
250#if IS_ENABLED(CONFIG_HWMON)
251 struct sfp_diag diag;
252 struct delayed_work hwmon_probe;
253 unsigned int hwmon_tries;
254 struct device *hwmon_dev;
255 char *hwmon_name;
256#endif
257
258};
259
260static bool sff_module_supported(const struct sfp_eeprom_id *id)
261{
262 return id->base.phys_id == SFF8024_ID_SFF_8472 &&
263 id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
264}
265
266static const struct sff_data sff_data = {
267 .gpios = SFP_F_LOS | SFP_F_TX_FAULT | SFP_F_TX_DISABLE,
268 .module_supported = sff_module_supported,
269};
270
271static bool sfp_module_supported(const struct sfp_eeprom_id *id)
272{
273 return id->base.phys_id == SFF8024_ID_SFP &&
274 id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
275}
276
277static const struct sff_data sfp_data = {
278 .gpios = SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT |
279 SFP_F_TX_DISABLE | SFP_F_RATE_SELECT,
280 .module_supported = sfp_module_supported,
281};
282
283static const struct of_device_id sfp_of_match[] = {
284 { .compatible = "sff,sff", .data = &sff_data, },
285 { .compatible = "sff,sfp", .data = &sfp_data, },
286 { },
287};
288MODULE_DEVICE_TABLE(of, sfp_of_match);
289
290static unsigned long poll_jiffies;
291
292static unsigned int sfp_gpio_get_state(struct sfp *sfp)
293{
294 unsigned int i, state, v;
295
296 for (i = state = 0; i < GPIO_MAX; i++) {
297 if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
298 continue;
299
300 v = gpiod_get_value_cansleep(sfp->gpio[i]);
301 if (v)
302 state |= BIT(i);
303 }
304
305 return state;
306}
307
308static unsigned int sff_gpio_get_state(struct sfp *sfp)
309{
310 return sfp_gpio_get_state(sfp) | SFP_F_PRESENT;
311}
312
313static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
314{
315 if (state & SFP_F_PRESENT) {
316 /* If the module is present, drive the signals */
317 if (sfp->gpio[GPIO_TX_DISABLE])
318 gpiod_direction_output(sfp->gpio[GPIO_TX_DISABLE],
319 state & SFP_F_TX_DISABLE);
320 if (state & SFP_F_RATE_SELECT)
321 gpiod_direction_output(sfp->gpio[GPIO_RATE_SELECT],
322 state & SFP_F_RATE_SELECT);
323 } else {
324 /* Otherwise, let them float to the pull-ups */
325 if (sfp->gpio[GPIO_TX_DISABLE])
326 gpiod_direction_input(sfp->gpio[GPIO_TX_DISABLE]);
327 if (state & SFP_F_RATE_SELECT)
328 gpiod_direction_input(sfp->gpio[GPIO_RATE_SELECT]);
329 }
330}
331
332static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
333 size_t len)
334{
335 struct i2c_msg msgs[2];
336 u8 bus_addr = a2 ? 0x51 : 0x50;
337 size_t this_len;
338 int ret;
339
340 msgs[0].addr = bus_addr;
341 msgs[0].flags = 0;
342 msgs[0].len = 1;
343 msgs[0].buf = &dev_addr;
344 msgs[1].addr = bus_addr;
345 msgs[1].flags = I2C_M_RD;
346 msgs[1].len = len;
347 msgs[1].buf = buf;
348
349 while (len) {
350 this_len = len;
351 if (this_len > 16)
352 this_len = 16;
353
354 msgs[1].len = this_len;
355
356 ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
357 if (ret < 0)
358 return ret;
359
360 if (ret != ARRAY_SIZE(msgs))
361 break;
362
363 msgs[1].buf += this_len;
364 dev_addr += this_len;
365 len -= this_len;
366 }
367
368 return msgs[1].buf - (u8 *)buf;
369}
370
371static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
372 size_t len)
373{
374 struct i2c_msg msgs[1];
375 u8 bus_addr = a2 ? 0x51 : 0x50;
376 int ret;
377
378 msgs[0].addr = bus_addr;
379 msgs[0].flags = 0;
380 msgs[0].len = 1 + len;
381 msgs[0].buf = kmalloc(1 + len, GFP_KERNEL);
382 if (!msgs[0].buf)
383 return -ENOMEM;
384
385 msgs[0].buf[0] = dev_addr;
386 memcpy(&msgs[0].buf[1], buf, len);
387
388 ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
389
390 kfree(msgs[0].buf);
391
392 if (ret < 0)
393 return ret;
394
395 return ret == ARRAY_SIZE(msgs) ? len : 0;
396}
397
398static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
399{
400 struct mii_bus *i2c_mii;
401 int ret;
402
403 if (!i2c_check_functionality(i2c, I2C_FUNC_I2C))
404 return -EINVAL;
405
406 sfp->i2c = i2c;
407 sfp->read = sfp_i2c_read;
408 sfp->write = sfp_i2c_write;
409
410 i2c_mii = mdio_i2c_alloc(sfp->dev, i2c);
411 if (IS_ERR(i2c_mii))
412 return PTR_ERR(i2c_mii);
413
414 i2c_mii->name = "SFP I2C Bus";
415 i2c_mii->phy_mask = ~0;
416
417 ret = mdiobus_register(i2c_mii);
418 if (ret < 0) {
419 mdiobus_free(i2c_mii);
420 return ret;
421 }
422
423 sfp->i2c_mii = i2c_mii;
424
425 return 0;
426}
427
428/* Interface */
429static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
430{
431 return sfp->read(sfp, a2, addr, buf, len);
432}
433
434static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
435{
436 return sfp->write(sfp, a2, addr, buf, len);
437}
438
439static unsigned int sfp_soft_get_state(struct sfp *sfp)
440{
441 unsigned int state = 0;
442 u8 status;
443
444 if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
445 sizeof(status)) {
446 if (status & SFP_STATUS_RX_LOS)
447 state |= SFP_F_LOS;
448 if (status & SFP_STATUS_TX_FAULT)
449 state |= SFP_F_TX_FAULT;
450 }
451
452 return state & sfp->state_soft_mask;
453}
454
455static void sfp_soft_set_state(struct sfp *sfp, unsigned int state)
456{
457 u8 status;
458
459 if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
460 sizeof(status)) {
461 if (state & SFP_F_TX_DISABLE)
462 status |= SFP_STATUS_TX_DISABLE_FORCE;
463 else
464 status &= ~SFP_STATUS_TX_DISABLE_FORCE;
465
466 sfp_write(sfp, true, SFP_STATUS, &status, sizeof(status));
467 }
468}
469
470static void sfp_soft_start_poll(struct sfp *sfp)
471{
472 const struct sfp_eeprom_id *id = &sfp->id;
473
474 sfp->state_soft_mask = 0;
475 if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_DISABLE &&
476 !sfp->gpio[GPIO_TX_DISABLE])
477 sfp->state_soft_mask |= SFP_F_TX_DISABLE;
478 if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_FAULT &&
479 !sfp->gpio[GPIO_TX_FAULT])
480 sfp->state_soft_mask |= SFP_F_TX_FAULT;
481 if (id->ext.enhopts & SFP_ENHOPTS_SOFT_RX_LOS &&
482 !sfp->gpio[GPIO_LOS])
483 sfp->state_soft_mask |= SFP_F_LOS;
484
485 if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
486 !sfp->need_poll)
487 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
488}
489
490static void sfp_soft_stop_poll(struct sfp *sfp)
491{
492 sfp->state_soft_mask = 0;
493}
494
495static unsigned int sfp_get_state(struct sfp *sfp)
496{
497 unsigned int state = sfp->get_state(sfp);
498
499 if (state & SFP_F_PRESENT &&
500 sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT))
501 state |= sfp_soft_get_state(sfp);
502
503 return state;
504}
505
506static void sfp_set_state(struct sfp *sfp, unsigned int state)
507{
508 sfp->set_state(sfp, state);
509
510 if (state & SFP_F_PRESENT &&
511 sfp->state_soft_mask & SFP_F_TX_DISABLE)
512 sfp_soft_set_state(sfp, state);
513}
514
515static unsigned int sfp_check(void *buf, size_t len)
516{
517 u8 *p, check;
518
519 for (p = buf, check = 0; len; p++, len--)
520 check += *p;
521
522 return check;
523}
524
525/* hwmon */
526#if IS_ENABLED(CONFIG_HWMON)
527static umode_t sfp_hwmon_is_visible(const void *data,
528 enum hwmon_sensor_types type,
529 u32 attr, int channel)
530{
531 const struct sfp *sfp = data;
532
533 switch (type) {
534 case hwmon_temp:
535 switch (attr) {
536 case hwmon_temp_min_alarm:
537 case hwmon_temp_max_alarm:
538 case hwmon_temp_lcrit_alarm:
539 case hwmon_temp_crit_alarm:
540 case hwmon_temp_min:
541 case hwmon_temp_max:
542 case hwmon_temp_lcrit:
543 case hwmon_temp_crit:
544 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
545 return 0;
546 /* fall through */
547 case hwmon_temp_input:
548 return 0444;
549 default:
550 return 0;
551 }
552 case hwmon_in:
553 switch (attr) {
554 case hwmon_in_min_alarm:
555 case hwmon_in_max_alarm:
556 case hwmon_in_lcrit_alarm:
557 case hwmon_in_crit_alarm:
558 case hwmon_in_min:
559 case hwmon_in_max:
560 case hwmon_in_lcrit:
561 case hwmon_in_crit:
562 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
563 return 0;
564 /* fall through */
565 case hwmon_in_input:
566 return 0444;
567 default:
568 return 0;
569 }
570 case hwmon_curr:
571 switch (attr) {
572 case hwmon_curr_min_alarm:
573 case hwmon_curr_max_alarm:
574 case hwmon_curr_lcrit_alarm:
575 case hwmon_curr_crit_alarm:
576 case hwmon_curr_min:
577 case hwmon_curr_max:
578 case hwmon_curr_lcrit:
579 case hwmon_curr_crit:
580 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
581 return 0;
582 /* fall through */
583 case hwmon_curr_input:
584 return 0444;
585 default:
586 return 0;
587 }
588 case hwmon_power:
589 /* External calibration of receive power requires
590 * floating point arithmetic. Doing that in the kernel
591 * is not easy, so just skip it. If the module does
592 * not require external calibration, we can however
593 * show receiver power, since FP is then not needed.
594 */
595 if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL &&
596 channel == 1)
597 return 0;
598 switch (attr) {
599 case hwmon_power_min_alarm:
600 case hwmon_power_max_alarm:
601 case hwmon_power_lcrit_alarm:
602 case hwmon_power_crit_alarm:
603 case hwmon_power_min:
604 case hwmon_power_max:
605 case hwmon_power_lcrit:
606 case hwmon_power_crit:
607 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
608 return 0;
609 /* fall through */
610 case hwmon_power_input:
611 return 0444;
612 default:
613 return 0;
614 }
615 default:
616 return 0;
617 }
618}
619
620static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
621{
622 __be16 val;
623 int err;
624
625 err = sfp_read(sfp, true, reg, &val, sizeof(val));
626 if (err < 0)
627 return err;
628
629 *value = be16_to_cpu(val);
630
631 return 0;
632}
633
634static void sfp_hwmon_to_rx_power(long *value)
635{
636 *value = DIV_ROUND_CLOSEST(*value, 10);
637}
638
639static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
640 long *value)
641{
642 if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL)
643 *value = DIV_ROUND_CLOSEST(*value * slope, 256) + offset;
644}
645
646static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
647{
648 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_t_slope),
649 be16_to_cpu(sfp->diag.cal_t_offset), value);
650
651 if (*value >= 0x8000)
652 *value -= 0x10000;
653
654 *value = DIV_ROUND_CLOSEST(*value * 1000, 256);
655}
656
657static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
658{
659 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_v_slope),
660 be16_to_cpu(sfp->diag.cal_v_offset), value);
661
662 *value = DIV_ROUND_CLOSEST(*value, 10);
663}
664
665static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
666{
667 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txi_slope),
668 be16_to_cpu(sfp->diag.cal_txi_offset), value);
669
670 *value = DIV_ROUND_CLOSEST(*value, 500);
671}
672
673static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
674{
675 sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txpwr_slope),
676 be16_to_cpu(sfp->diag.cal_txpwr_offset), value);
677
678 *value = DIV_ROUND_CLOSEST(*value, 10);
679}
680
681static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
682{
683 int err;
684
685 err = sfp_hwmon_read_sensor(sfp, reg, value);
686 if (err < 0)
687 return err;
688
689 sfp_hwmon_calibrate_temp(sfp, value);
690
691 return 0;
692}
693
694static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
695{
696 int err;
697
698 err = sfp_hwmon_read_sensor(sfp, reg, value);
699 if (err < 0)
700 return err;
701
702 sfp_hwmon_calibrate_vcc(sfp, value);
703
704 return 0;
705}
706
707static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
708{
709 int err;
710
711 err = sfp_hwmon_read_sensor(sfp, reg, value);
712 if (err < 0)
713 return err;
714
715 sfp_hwmon_calibrate_bias(sfp, value);
716
717 return 0;
718}
719
720static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
721{
722 int err;
723
724 err = sfp_hwmon_read_sensor(sfp, reg, value);
725 if (err < 0)
726 return err;
727
728 sfp_hwmon_calibrate_tx_power(sfp, value);
729
730 return 0;
731}
732
733static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
734{
735 int err;
736
737 err = sfp_hwmon_read_sensor(sfp, reg, value);
738 if (err < 0)
739 return err;
740
741 sfp_hwmon_to_rx_power(value);
742
743 return 0;
744}
745
746static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
747{
748 u8 status;
749 int err;
750
751 switch (attr) {
752 case hwmon_temp_input:
753 return sfp_hwmon_read_temp(sfp, SFP_TEMP, value);
754
755 case hwmon_temp_lcrit:
756 *value = be16_to_cpu(sfp->diag.temp_low_alarm);
757 sfp_hwmon_calibrate_temp(sfp, value);
758 return 0;
759
760 case hwmon_temp_min:
761 *value = be16_to_cpu(sfp->diag.temp_low_warn);
762 sfp_hwmon_calibrate_temp(sfp, value);
763 return 0;
764 case hwmon_temp_max:
765 *value = be16_to_cpu(sfp->diag.temp_high_warn);
766 sfp_hwmon_calibrate_temp(sfp, value);
767 return 0;
768
769 case hwmon_temp_crit:
770 *value = be16_to_cpu(sfp->diag.temp_high_alarm);
771 sfp_hwmon_calibrate_temp(sfp, value);
772 return 0;
773
774 case hwmon_temp_lcrit_alarm:
775 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
776 if (err < 0)
777 return err;
778
779 *value = !!(status & SFP_ALARM0_TEMP_LOW);
780 return 0;
781
782 case hwmon_temp_min_alarm:
783 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
784 if (err < 0)
785 return err;
786
787 *value = !!(status & SFP_WARN0_TEMP_LOW);
788 return 0;
789
790 case hwmon_temp_max_alarm:
791 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
792 if (err < 0)
793 return err;
794
795 *value = !!(status & SFP_WARN0_TEMP_HIGH);
796 return 0;
797
798 case hwmon_temp_crit_alarm:
799 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
800 if (err < 0)
801 return err;
802
803 *value = !!(status & SFP_ALARM0_TEMP_HIGH);
804 return 0;
805 default:
806 return -EOPNOTSUPP;
807 }
808
809 return -EOPNOTSUPP;
810}
811
812static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
813{
814 u8 status;
815 int err;
816
817 switch (attr) {
818 case hwmon_in_input:
819 return sfp_hwmon_read_vcc(sfp, SFP_VCC, value);
820
821 case hwmon_in_lcrit:
822 *value = be16_to_cpu(sfp->diag.volt_low_alarm);
823 sfp_hwmon_calibrate_vcc(sfp, value);
824 return 0;
825
826 case hwmon_in_min:
827 *value = be16_to_cpu(sfp->diag.volt_low_warn);
828 sfp_hwmon_calibrate_vcc(sfp, value);
829 return 0;
830
831 case hwmon_in_max:
832 *value = be16_to_cpu(sfp->diag.volt_high_warn);
833 sfp_hwmon_calibrate_vcc(sfp, value);
834 return 0;
835
836 case hwmon_in_crit:
837 *value = be16_to_cpu(sfp->diag.volt_high_alarm);
838 sfp_hwmon_calibrate_vcc(sfp, value);
839 return 0;
840
841 case hwmon_in_lcrit_alarm:
842 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
843 if (err < 0)
844 return err;
845
846 *value = !!(status & SFP_ALARM0_VCC_LOW);
847 return 0;
848
849 case hwmon_in_min_alarm:
850 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
851 if (err < 0)
852 return err;
853
854 *value = !!(status & SFP_WARN0_VCC_LOW);
855 return 0;
856
857 case hwmon_in_max_alarm:
858 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
859 if (err < 0)
860 return err;
861
862 *value = !!(status & SFP_WARN0_VCC_HIGH);
863 return 0;
864
865 case hwmon_in_crit_alarm:
866 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
867 if (err < 0)
868 return err;
869
870 *value = !!(status & SFP_ALARM0_VCC_HIGH);
871 return 0;
872 default:
873 return -EOPNOTSUPP;
874 }
875
876 return -EOPNOTSUPP;
877}
878
879static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
880{
881 u8 status;
882 int err;
883
884 switch (attr) {
885 case hwmon_curr_input:
886 return sfp_hwmon_read_bias(sfp, SFP_TX_BIAS, value);
887
888 case hwmon_curr_lcrit:
889 *value = be16_to_cpu(sfp->diag.bias_low_alarm);
890 sfp_hwmon_calibrate_bias(sfp, value);
891 return 0;
892
893 case hwmon_curr_min:
894 *value = be16_to_cpu(sfp->diag.bias_low_warn);
895 sfp_hwmon_calibrate_bias(sfp, value);
896 return 0;
897
898 case hwmon_curr_max:
899 *value = be16_to_cpu(sfp->diag.bias_high_warn);
900 sfp_hwmon_calibrate_bias(sfp, value);
901 return 0;
902
903 case hwmon_curr_crit:
904 *value = be16_to_cpu(sfp->diag.bias_high_alarm);
905 sfp_hwmon_calibrate_bias(sfp, value);
906 return 0;
907
908 case hwmon_curr_lcrit_alarm:
909 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
910 if (err < 0)
911 return err;
912
913 *value = !!(status & SFP_ALARM0_TX_BIAS_LOW);
914 return 0;
915
916 case hwmon_curr_min_alarm:
917 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
918 if (err < 0)
919 return err;
920
921 *value = !!(status & SFP_WARN0_TX_BIAS_LOW);
922 return 0;
923
924 case hwmon_curr_max_alarm:
925 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
926 if (err < 0)
927 return err;
928
929 *value = !!(status & SFP_WARN0_TX_BIAS_HIGH);
930 return 0;
931
932 case hwmon_curr_crit_alarm:
933 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
934 if (err < 0)
935 return err;
936
937 *value = !!(status & SFP_ALARM0_TX_BIAS_HIGH);
938 return 0;
939 default:
940 return -EOPNOTSUPP;
941 }
942
943 return -EOPNOTSUPP;
944}
945
946static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
947{
948 u8 status;
949 int err;
950
951 switch (attr) {
952 case hwmon_power_input:
953 return sfp_hwmon_read_tx_power(sfp, SFP_TX_POWER, value);
954
955 case hwmon_power_lcrit:
956 *value = be16_to_cpu(sfp->diag.txpwr_low_alarm);
957 sfp_hwmon_calibrate_tx_power(sfp, value);
958 return 0;
959
960 case hwmon_power_min:
961 *value = be16_to_cpu(sfp->diag.txpwr_low_warn);
962 sfp_hwmon_calibrate_tx_power(sfp, value);
963 return 0;
964
965 case hwmon_power_max:
966 *value = be16_to_cpu(sfp->diag.txpwr_high_warn);
967 sfp_hwmon_calibrate_tx_power(sfp, value);
968 return 0;
969
970 case hwmon_power_crit:
971 *value = be16_to_cpu(sfp->diag.txpwr_high_alarm);
972 sfp_hwmon_calibrate_tx_power(sfp, value);
973 return 0;
974
975 case hwmon_power_lcrit_alarm:
976 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
977 if (err < 0)
978 return err;
979
980 *value = !!(status & SFP_ALARM0_TXPWR_LOW);
981 return 0;
982
983 case hwmon_power_min_alarm:
984 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
985 if (err < 0)
986 return err;
987
988 *value = !!(status & SFP_WARN0_TXPWR_LOW);
989 return 0;
990
991 case hwmon_power_max_alarm:
992 err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
993 if (err < 0)
994 return err;
995
996 *value = !!(status & SFP_WARN0_TXPWR_HIGH);
997 return 0;
998
999 case hwmon_power_crit_alarm:
1000 err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1001 if (err < 0)
1002 return err;
1003
1004 *value = !!(status & SFP_ALARM0_TXPWR_HIGH);
1005 return 0;
1006 default:
1007 return -EOPNOTSUPP;
1008 }
1009
1010 return -EOPNOTSUPP;
1011}
1012
1013static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
1014{
1015 u8 status;
1016 int err;
1017
1018 switch (attr) {
1019 case hwmon_power_input:
1020 return sfp_hwmon_read_rx_power(sfp, SFP_RX_POWER, value);
1021
1022 case hwmon_power_lcrit:
1023 *value = be16_to_cpu(sfp->diag.rxpwr_low_alarm);
1024 sfp_hwmon_to_rx_power(value);
1025 return 0;
1026
1027 case hwmon_power_min:
1028 *value = be16_to_cpu(sfp->diag.rxpwr_low_warn);
1029 sfp_hwmon_to_rx_power(value);
1030 return 0;
1031
1032 case hwmon_power_max:
1033 *value = be16_to_cpu(sfp->diag.rxpwr_high_warn);
1034 sfp_hwmon_to_rx_power(value);
1035 return 0;
1036
1037 case hwmon_power_crit:
1038 *value = be16_to_cpu(sfp->diag.rxpwr_high_alarm);
1039 sfp_hwmon_to_rx_power(value);
1040 return 0;
1041
1042 case hwmon_power_lcrit_alarm:
1043 err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1044 if (err < 0)
1045 return err;
1046
1047 *value = !!(status & SFP_ALARM1_RXPWR_LOW);
1048 return 0;
1049
1050 case hwmon_power_min_alarm:
1051 err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1052 if (err < 0)
1053 return err;
1054
1055 *value = !!(status & SFP_WARN1_RXPWR_LOW);
1056 return 0;
1057
1058 case hwmon_power_max_alarm:
1059 err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1060 if (err < 0)
1061 return err;
1062
1063 *value = !!(status & SFP_WARN1_RXPWR_HIGH);
1064 return 0;
1065
1066 case hwmon_power_crit_alarm:
1067 err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1068 if (err < 0)
1069 return err;
1070
1071 *value = !!(status & SFP_ALARM1_RXPWR_HIGH);
1072 return 0;
1073 default:
1074 return -EOPNOTSUPP;
1075 }
1076
1077 return -EOPNOTSUPP;
1078}
1079
1080static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
1081 u32 attr, int channel, long *value)
1082{
1083 struct sfp *sfp = dev_get_drvdata(dev);
1084
1085 switch (type) {
1086 case hwmon_temp:
1087 return sfp_hwmon_temp(sfp, attr, value);
1088 case hwmon_in:
1089 return sfp_hwmon_vcc(sfp, attr, value);
1090 case hwmon_curr:
1091 return sfp_hwmon_bias(sfp, attr, value);
1092 case hwmon_power:
1093 switch (channel) {
1094 case 0:
1095 return sfp_hwmon_tx_power(sfp, attr, value);
1096 case 1:
1097 return sfp_hwmon_rx_power(sfp, attr, value);
1098 default:
1099 return -EOPNOTSUPP;
1100 }
1101 default:
1102 return -EOPNOTSUPP;
1103 }
1104}
1105
1106static const struct hwmon_ops sfp_hwmon_ops = {
1107 .is_visible = sfp_hwmon_is_visible,
1108 .read = sfp_hwmon_read,
1109};
1110
1111static u32 sfp_hwmon_chip_config[] = {
1112 HWMON_C_REGISTER_TZ,
1113 0,
1114};
1115
1116static const struct hwmon_channel_info sfp_hwmon_chip = {
1117 .type = hwmon_chip,
1118 .config = sfp_hwmon_chip_config,
1119};
1120
1121static u32 sfp_hwmon_temp_config[] = {
1122 HWMON_T_INPUT |
1123 HWMON_T_MAX | HWMON_T_MIN |
1124 HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM |
1125 HWMON_T_CRIT | HWMON_T_LCRIT |
1126 HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM,
1127 0,
1128};
1129
1130static const struct hwmon_channel_info sfp_hwmon_temp_channel_info = {
1131 .type = hwmon_temp,
1132 .config = sfp_hwmon_temp_config,
1133};
1134
1135static u32 sfp_hwmon_vcc_config[] = {
1136 HWMON_I_INPUT |
1137 HWMON_I_MAX | HWMON_I_MIN |
1138 HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM |
1139 HWMON_I_CRIT | HWMON_I_LCRIT |
1140 HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM,
1141 0,
1142};
1143
1144static const struct hwmon_channel_info sfp_hwmon_vcc_channel_info = {
1145 .type = hwmon_in,
1146 .config = sfp_hwmon_vcc_config,
1147};
1148
1149static u32 sfp_hwmon_bias_config[] = {
1150 HWMON_C_INPUT |
1151 HWMON_C_MAX | HWMON_C_MIN |
1152 HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM |
1153 HWMON_C_CRIT | HWMON_C_LCRIT |
1154 HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM,
1155 0,
1156};
1157
1158static const struct hwmon_channel_info sfp_hwmon_bias_channel_info = {
1159 .type = hwmon_curr,
1160 .config = sfp_hwmon_bias_config,
1161};
1162
1163static u32 sfp_hwmon_power_config[] = {
1164 /* Transmit power */
1165 HWMON_P_INPUT |
1166 HWMON_P_MAX | HWMON_P_MIN |
1167 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1168 HWMON_P_CRIT | HWMON_P_LCRIT |
1169 HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1170 /* Receive power */
1171 HWMON_P_INPUT |
1172 HWMON_P_MAX | HWMON_P_MIN |
1173 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1174 HWMON_P_CRIT | HWMON_P_LCRIT |
1175 HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1176 0,
1177};
1178
1179static const struct hwmon_channel_info sfp_hwmon_power_channel_info = {
1180 .type = hwmon_power,
1181 .config = sfp_hwmon_power_config,
1182};
1183
1184static const struct hwmon_channel_info *sfp_hwmon_info[] = {
1185 &sfp_hwmon_chip,
1186 &sfp_hwmon_vcc_channel_info,
1187 &sfp_hwmon_temp_channel_info,
1188 &sfp_hwmon_bias_channel_info,
1189 &sfp_hwmon_power_channel_info,
1190 NULL,
1191};
1192
1193static const struct hwmon_chip_info sfp_hwmon_chip_info = {
1194 .ops = &sfp_hwmon_ops,
1195 .info = sfp_hwmon_info,
1196};
1197
1198static void sfp_hwmon_probe(struct work_struct *work)
1199{
1200 struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
1201 int err, i;
1202
1203 err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1204 if (err < 0) {
1205 if (sfp->hwmon_tries--) {
1206 mod_delayed_work(system_wq, &sfp->hwmon_probe,
1207 T_PROBE_RETRY_SLOW);
1208 } else {
1209 dev_warn(sfp->dev, "hwmon probe failed: %d\n", err);
1210 }
1211 return;
1212 }
1213
1214 sfp->hwmon_name = kstrdup(dev_name(sfp->dev), GFP_KERNEL);
1215 if (!sfp->hwmon_name) {
1216 dev_err(sfp->dev, "out of memory for hwmon name\n");
1217 return;
1218 }
1219
1220 for (i = 0; sfp->hwmon_name[i]; i++)
1221 if (hwmon_is_bad_char(sfp->hwmon_name[i]))
1222 sfp->hwmon_name[i] = '_';
1223
1224 sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1225 sfp->hwmon_name, sfp,
1226 &sfp_hwmon_chip_info,
1227 NULL);
1228 if (IS_ERR(sfp->hwmon_dev))
1229 dev_err(sfp->dev, "failed to register hwmon device: %ld\n",
1230 PTR_ERR(sfp->hwmon_dev));
1231}
1232
1233static int sfp_hwmon_insert(struct sfp *sfp)
1234{
1235 if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE)
1236 return 0;
1237
1238 if (!(sfp->id.ext.diagmon & SFP_DIAGMON_DDM))
1239 return 0;
1240
1241 if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1242 /* This driver in general does not support address
1243 * change.
1244 */
1245 return 0;
1246
1247 mod_delayed_work(system_wq, &sfp->hwmon_probe, 1);
1248 sfp->hwmon_tries = R_PROBE_RETRY_SLOW;
1249
1250 return 0;
1251}
1252
1253static void sfp_hwmon_remove(struct sfp *sfp)
1254{
1255 cancel_delayed_work_sync(&sfp->hwmon_probe);
1256 if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1257 hwmon_device_unregister(sfp->hwmon_dev);
1258 sfp->hwmon_dev = NULL;
1259 kfree(sfp->hwmon_name);
1260 }
1261}
1262
1263static int sfp_hwmon_init(struct sfp *sfp)
1264{
1265 INIT_DELAYED_WORK(&sfp->hwmon_probe, sfp_hwmon_probe);
1266
1267 return 0;
1268}
1269
1270static void sfp_hwmon_exit(struct sfp *sfp)
1271{
1272 cancel_delayed_work_sync(&sfp->hwmon_probe);
1273}
1274#else
1275static int sfp_hwmon_insert(struct sfp *sfp)
1276{
1277 return 0;
1278}
1279
1280static void sfp_hwmon_remove(struct sfp *sfp)
1281{
1282}
1283
1284static int sfp_hwmon_init(struct sfp *sfp)
1285{
1286 return 0;
1287}
1288
1289static void sfp_hwmon_exit(struct sfp *sfp)
1290{
1291}
1292#endif
1293
1294/* Helpers */
1295static void sfp_module_tx_disable(struct sfp *sfp)
1296{
1297 dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1298 sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 1);
1299 sfp->state |= SFP_F_TX_DISABLE;
1300 sfp_set_state(sfp, sfp->state);
1301}
1302
1303static void sfp_module_tx_enable(struct sfp *sfp)
1304{
1305 dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1306 sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 0);
1307 sfp->state &= ~SFP_F_TX_DISABLE;
1308 sfp_set_state(sfp, sfp->state);
1309}
1310
1311static void sfp_module_tx_fault_reset(struct sfp *sfp)
1312{
1313 unsigned int state = sfp->state;
1314
1315 if (state & SFP_F_TX_DISABLE)
1316 return;
1317
1318 sfp_set_state(sfp, state | SFP_F_TX_DISABLE);
1319
1320 udelay(T_RESET_US);
1321
1322 sfp_set_state(sfp, state);
1323}
1324
1325/* SFP state machine */
1326static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
1327{
1328 if (timeout)
1329 mod_delayed_work(system_power_efficient_wq, &sfp->timeout,
1330 timeout);
1331 else
1332 cancel_delayed_work(&sfp->timeout);
1333}
1334
1335static void sfp_sm_next(struct sfp *sfp, unsigned int state,
1336 unsigned int timeout)
1337{
1338 sfp->sm_state = state;
1339 sfp_sm_set_timer(sfp, timeout);
1340}
1341
1342static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
1343 unsigned int timeout)
1344{
1345 sfp->sm_mod_state = state;
1346 sfp_sm_set_timer(sfp, timeout);
1347}
1348
1349static void sfp_sm_phy_detach(struct sfp *sfp)
1350{
1351 sfp_remove_phy(sfp->sfp_bus);
1352 phy_device_remove(sfp->mod_phy);
1353 phy_device_free(sfp->mod_phy);
1354 sfp->mod_phy = NULL;
1355}
1356
1357static int sfp_sm_probe_phy(struct sfp *sfp, bool is_c45)
1358{
1359 struct phy_device *phy;
1360 int err;
1361
1362 phy = get_phy_device(sfp->i2c_mii, SFP_PHY_ADDR, is_c45);
1363 if (phy == ERR_PTR(-ENODEV))
1364 return PTR_ERR(phy);
1365 if (IS_ERR(phy)) {
1366 dev_err(sfp->dev, "mdiobus scan returned %ld\n", PTR_ERR(phy));
1367 return PTR_ERR(phy);
1368 }
1369
1370 err = phy_device_register(phy);
1371 if (err) {
1372 phy_device_free(phy);
1373 dev_err(sfp->dev, "phy_device_register failed: %d\n", err);
1374 return err;
1375 }
1376
1377 err = sfp_add_phy(sfp->sfp_bus, phy);
1378 if (err) {
1379 phy_device_remove(phy);
1380 phy_device_free(phy);
1381 dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
1382 return err;
1383 }
1384
1385 sfp->mod_phy = phy;
1386
1387 return 0;
1388}
1389
1390static void sfp_sm_link_up(struct sfp *sfp)
1391{
1392 sfp_link_up(sfp->sfp_bus);
1393 sfp_sm_next(sfp, SFP_S_LINK_UP, 0);
1394}
1395
1396static void sfp_sm_link_down(struct sfp *sfp)
1397{
1398 sfp_link_down(sfp->sfp_bus);
1399}
1400
1401static void sfp_sm_link_check_los(struct sfp *sfp)
1402{
1403 unsigned int los = sfp->state & SFP_F_LOS;
1404
1405 /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1406 * are set, we assume that no LOS signal is available.
1407 */
1408 if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
1409 los ^= SFP_F_LOS;
1410 else if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL)))
1411 los = 0;
1412
1413 if (los)
1414 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1415 else
1416 sfp_sm_link_up(sfp);
1417}
1418
1419static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
1420{
1421 return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1422 event == SFP_E_LOS_LOW) ||
1423 (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1424 event == SFP_E_LOS_HIGH);
1425}
1426
1427static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
1428{
1429 return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1430 event == SFP_E_LOS_HIGH) ||
1431 (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1432 event == SFP_E_LOS_LOW);
1433}
1434
1435static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
1436{
1437 if (sfp->sm_fault_retries && !--sfp->sm_fault_retries) {
1438 dev_err(sfp->dev,
1439 "module persistently indicates fault, disabling\n");
1440 sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
1441 } else {
1442 if (warn)
1443 dev_err(sfp->dev, "module transmit fault indicated\n");
1444
1445 sfp_sm_next(sfp, next_state, T_FAULT_RECOVER);
1446 }
1447}
1448
1449/* Probe a SFP for a PHY device if the module supports copper - the PHY
1450 * normally sits at I2C bus address 0x56, and may either be a clause 22
1451 * or clause 45 PHY.
1452 *
1453 * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1454 * negotiation enabled, but some may be in 1000base-X - which is for the
1455 * PHY driver to determine.
1456 *
1457 * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1458 * mode according to the negotiated line speed.
1459 */
1460static int sfp_sm_probe_for_phy(struct sfp *sfp)
1461{
1462 int err = 0;
1463
1464 switch (sfp->id.base.extended_cc) {
1465 case SFF8024_ECC_10GBASE_T_SFI:
1466 case SFF8024_ECC_10GBASE_T_SR:
1467 case SFF8024_ECC_5GBASE_T:
1468 case SFF8024_ECC_2_5GBASE_T:
1469 err = sfp_sm_probe_phy(sfp, true);
1470 break;
1471
1472 default:
1473 if (sfp->id.base.e1000_base_t)
1474 err = sfp_sm_probe_phy(sfp, false);
1475 break;
1476 }
1477 return err;
1478}
1479
1480static int sfp_module_parse_power(struct sfp *sfp)
1481{
1482 u32 power_mW = 1000;
1483
1484 if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1485 power_mW = 1500;
1486 if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1487 power_mW = 2000;
1488
1489 if (power_mW > sfp->max_power_mW) {
1490 /* Module power specification exceeds the allowed maximum. */
1491 if (sfp->id.ext.sff8472_compliance ==
1492 SFP_SFF8472_COMPLIANCE_NONE &&
1493 !(sfp->id.ext.diagmon & SFP_DIAGMON_DDM)) {
1494 /* The module appears not to implement bus address
1495 * 0xa2, so assume that the module powers up in the
1496 * indicated mode.
1497 */
1498 dev_err(sfp->dev,
1499 "Host does not support %u.%uW modules\n",
1500 power_mW / 1000, (power_mW / 100) % 10);
1501 return -EINVAL;
1502 } else {
1503 dev_warn(sfp->dev,
1504 "Host does not support %u.%uW modules, module left in power mode 1\n",
1505 power_mW / 1000, (power_mW / 100) % 10);
1506 return 0;
1507 }
1508 }
1509
1510 /* If the module requires a higher power mode, but also requires
1511 * an address change sequence, warn the user that the module may
1512 * not be functional.
1513 */
1514 if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE && power_mW > 1000) {
1515 dev_warn(sfp->dev,
1516 "Address Change Sequence not supported but module requies %u.%uW, module may not be functional\n",
1517 power_mW / 1000, (power_mW / 100) % 10);
1518 return 0;
1519 }
1520
1521 sfp->module_power_mW = power_mW;
1522
1523 return 0;
1524}
1525
1526static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
1527{
1528 u8 val;
1529 int err;
1530
1531 err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1532 if (err != sizeof(val)) {
1533 dev_err(sfp->dev, "Failed to read EEPROM: %d\n", err);
1534 return -EAGAIN;
1535 }
1536
1537 /* DM7052 reports as a high power module, responds to reads (with
1538 * all bytes 0xff) at 0x51 but does not accept writes. In any case,
1539 * if the bit is already set, we're already in high power mode.
1540 */
1541 if (!!(val & BIT(0)) == enable)
1542 return 0;
1543
1544 if (enable)
1545 val |= BIT(0);
1546 else
1547 val &= ~BIT(0);
1548
1549 err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1550 if (err != sizeof(val)) {
1551 dev_err(sfp->dev, "Failed to write EEPROM: %d\n", err);
1552 return -EAGAIN;
1553 }
1554
1555 if (enable)
1556 dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1557 sfp->module_power_mW / 1000,
1558 (sfp->module_power_mW / 100) % 10);
1559
1560 return 0;
1561}
1562
1563static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
1564{
1565 /* SFP module inserted - read I2C data */
1566 struct sfp_eeprom_id id;
1567 bool cotsworks;
1568 u8 check;
1569 int ret;
1570
1571 ret = sfp_read(sfp, false, 0, &id, sizeof(id));
1572 if (ret < 0) {
1573 if (report)
1574 dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
1575 return -EAGAIN;
1576 }
1577
1578 if (ret != sizeof(id)) {
1579 dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
1580 return -EAGAIN;
1581 }
1582
1583 /* Cotsworks do not seem to update the checksums when they
1584 * do the final programming with the final module part number,
1585 * serial number and date code.
1586 */
1587 cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS ", 16);
1588
1589 /* Validate the checksum over the base structure */
1590 check = sfp_check(&id.base, sizeof(id.base) - 1);
1591 if (check != id.base.cc_base) {
1592 if (cotsworks) {
1593 dev_warn(sfp->dev,
1594 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
1595 check, id.base.cc_base);
1596 } else {
1597 dev_err(sfp->dev,
1598 "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
1599 check, id.base.cc_base);
1600 print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1601 16, 1, &id, sizeof(id), true);
1602 return -EINVAL;
1603 }
1604 }
1605
1606 check = sfp_check(&id.ext, sizeof(id.ext) - 1);
1607 if (check != id.ext.cc_ext) {
1608 if (cotsworks) {
1609 dev_warn(sfp->dev,
1610 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
1611 check, id.ext.cc_ext);
1612 } else {
1613 dev_err(sfp->dev,
1614 "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
1615 check, id.ext.cc_ext);
1616 print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
1617 16, 1, &id, sizeof(id), true);
1618 memset(&id.ext, 0, sizeof(id.ext));
1619 }
1620 }
1621
1622 sfp->id = id;
1623
1624 dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
1625 (int)sizeof(id.base.vendor_name), id.base.vendor_name,
1626 (int)sizeof(id.base.vendor_pn), id.base.vendor_pn,
1627 (int)sizeof(id.base.vendor_rev), id.base.vendor_rev,
1628 (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
1629 (int)sizeof(id.ext.datecode), id.ext.datecode);
1630
1631 /* Check whether we support this module */
1632 if (!sfp->type->module_supported(&id)) {
1633 dev_err(sfp->dev,
1634 "module is not supported - phys id 0x%02x 0x%02x\n",
1635 sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
1636 return -EINVAL;
1637 }
1638
1639 /* If the module requires address swap mode, warn about it */
1640 if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1641 dev_warn(sfp->dev,
1642 "module address swap to access page 0xA2 is not supported.\n");
1643
1644 /* Parse the module power requirement */
1645 ret = sfp_module_parse_power(sfp);
1646 if (ret < 0)
1647 return ret;
1648
1649 if (!memcmp(id.base.vendor_name, "ALCATELLUCENT ", 16) &&
1650 !memcmp(id.base.vendor_pn, "3FE46541AA ", 16))
1651 sfp->module_t_start_up = T_START_UP_BAD_GPON;
1652 else
1653 sfp->module_t_start_up = T_START_UP;
1654
1655 return 0;
1656}
1657
1658static void sfp_sm_mod_remove(struct sfp *sfp)
1659{
1660 if (sfp->sm_mod_state > SFP_MOD_WAITDEV)
1661 sfp_module_remove(sfp->sfp_bus);
1662
1663 sfp_hwmon_remove(sfp);
1664
1665 memset(&sfp->id, 0, sizeof(sfp->id));
1666 sfp->module_power_mW = 0;
1667
1668 dev_info(sfp->dev, "module removed\n");
1669}
1670
1671/* This state machine tracks the upstream's state */
1672static void sfp_sm_device(struct sfp *sfp, unsigned int event)
1673{
1674 switch (sfp->sm_dev_state) {
1675 default:
1676 if (event == SFP_E_DEV_ATTACH)
1677 sfp->sm_dev_state = SFP_DEV_DOWN;
1678 break;
1679
1680 case SFP_DEV_DOWN:
1681 if (event == SFP_E_DEV_DETACH)
1682 sfp->sm_dev_state = SFP_DEV_DETACHED;
1683 else if (event == SFP_E_DEV_UP)
1684 sfp->sm_dev_state = SFP_DEV_UP;
1685 break;
1686
1687 case SFP_DEV_UP:
1688 if (event == SFP_E_DEV_DETACH)
1689 sfp->sm_dev_state = SFP_DEV_DETACHED;
1690 else if (event == SFP_E_DEV_DOWN)
1691 sfp->sm_dev_state = SFP_DEV_DOWN;
1692 break;
1693 }
1694}
1695
1696/* This state machine tracks the insert/remove state of the module, probes
1697 * the on-board EEPROM, and sets up the power level.
1698 */
1699static void sfp_sm_module(struct sfp *sfp, unsigned int event)
1700{
1701 int err;
1702
1703 /* Handle remove event globally, it resets this state machine */
1704 if (event == SFP_E_REMOVE) {
1705 if (sfp->sm_mod_state > SFP_MOD_PROBE)
1706 sfp_sm_mod_remove(sfp);
1707 sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0);
1708 return;
1709 }
1710
1711 /* Handle device detach globally */
1712 if (sfp->sm_dev_state < SFP_DEV_DOWN &&
1713 sfp->sm_mod_state > SFP_MOD_WAITDEV) {
1714 if (sfp->module_power_mW > 1000 &&
1715 sfp->sm_mod_state > SFP_MOD_HPOWER)
1716 sfp_sm_mod_hpower(sfp, false);
1717 sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
1718 return;
1719 }
1720
1721 switch (sfp->sm_mod_state) {
1722 default:
1723 if (event == SFP_E_INSERT) {
1724 sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL);
1725 sfp->sm_mod_tries_init = R_PROBE_RETRY_INIT;
1726 sfp->sm_mod_tries = R_PROBE_RETRY_SLOW;
1727 }
1728 break;
1729
1730 case SFP_MOD_PROBE:
1731 /* Wait for T_PROBE_INIT to time out */
1732 if (event != SFP_E_TIMEOUT)
1733 break;
1734
1735 err = sfp_sm_mod_probe(sfp, sfp->sm_mod_tries == 1);
1736 if (err == -EAGAIN) {
1737 if (sfp->sm_mod_tries_init &&
1738 --sfp->sm_mod_tries_init) {
1739 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
1740 break;
1741 } else if (sfp->sm_mod_tries && --sfp->sm_mod_tries) {
1742 if (sfp->sm_mod_tries == R_PROBE_RETRY_SLOW - 1)
1743 dev_warn(sfp->dev,
1744 "please wait, module slow to respond\n");
1745 sfp_sm_set_timer(sfp, T_PROBE_RETRY_SLOW);
1746 break;
1747 }
1748 }
1749 if (err < 0) {
1750 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
1751 break;
1752 }
1753
1754 err = sfp_hwmon_insert(sfp);
1755 if (err)
1756 dev_warn(sfp->dev, "hwmon probe failed: %d\n", err);
1757
1758 sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
1759 /* fall through */
1760 case SFP_MOD_WAITDEV:
1761 /* Ensure that the device is attached before proceeding */
1762 if (sfp->sm_dev_state < SFP_DEV_DOWN)
1763 break;
1764
1765 /* Report the module insertion to the upstream device */
1766 err = sfp_module_insert(sfp->sfp_bus, &sfp->id);
1767 if (err < 0) {
1768 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
1769 break;
1770 }
1771
1772 /* If this is a power level 1 module, we are done */
1773 if (sfp->module_power_mW <= 1000)
1774 goto insert;
1775
1776 sfp_sm_mod_next(sfp, SFP_MOD_HPOWER, 0);
1777 /* fall through */
1778 case SFP_MOD_HPOWER:
1779 /* Enable high power mode */
1780 err = sfp_sm_mod_hpower(sfp, true);
1781 if (err < 0) {
1782 if (err != -EAGAIN) {
1783 sfp_module_remove(sfp->sfp_bus);
1784 sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
1785 } else {
1786 sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
1787 }
1788 break;
1789 }
1790
1791 sfp_sm_mod_next(sfp, SFP_MOD_WAITPWR, T_HPOWER_LEVEL);
1792 break;
1793
1794 case SFP_MOD_WAITPWR:
1795 /* Wait for T_HPOWER_LEVEL to time out */
1796 if (event != SFP_E_TIMEOUT)
1797 break;
1798
1799 insert:
1800 sfp_sm_mod_next(sfp, SFP_MOD_PRESENT, 0);
1801 break;
1802
1803 case SFP_MOD_PRESENT:
1804 case SFP_MOD_ERROR:
1805 break;
1806 }
1807}
1808
1809static void sfp_sm_main(struct sfp *sfp, unsigned int event)
1810{
1811 unsigned long timeout;
1812 int ret;
1813
1814 /* Some events are global */
1815 if (sfp->sm_state != SFP_S_DOWN &&
1816 (sfp->sm_mod_state != SFP_MOD_PRESENT ||
1817 sfp->sm_dev_state != SFP_DEV_UP)) {
1818 if (sfp->sm_state == SFP_S_LINK_UP &&
1819 sfp->sm_dev_state == SFP_DEV_UP)
1820 sfp_sm_link_down(sfp);
1821 if (sfp->sm_state > SFP_S_INIT)
1822 sfp_module_stop(sfp->sfp_bus);
1823 if (sfp->mod_phy)
1824 sfp_sm_phy_detach(sfp);
1825 sfp_module_tx_disable(sfp);
1826 sfp_soft_stop_poll(sfp);
1827 sfp_sm_next(sfp, SFP_S_DOWN, 0);
1828 return;
1829 }
1830
1831 /* The main state machine */
1832 switch (sfp->sm_state) {
1833 case SFP_S_DOWN:
1834 if (sfp->sm_mod_state != SFP_MOD_PRESENT ||
1835 sfp->sm_dev_state != SFP_DEV_UP)
1836 break;
1837
1838 if (!(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE))
1839 sfp_soft_start_poll(sfp);
1840
1841 sfp_module_tx_enable(sfp);
1842
1843 /* Initialise the fault clearance retries */
1844 sfp->sm_fault_retries = N_FAULT_INIT;
1845
1846 /* We need to check the TX_FAULT state, which is not defined
1847 * while TX_DISABLE is asserted. The earliest we want to do
1848 * anything (such as probe for a PHY) is 50ms.
1849 */
1850 sfp_sm_next(sfp, SFP_S_WAIT, T_WAIT);
1851 break;
1852
1853 case SFP_S_WAIT:
1854 if (event != SFP_E_TIMEOUT)
1855 break;
1856
1857 if (sfp->state & SFP_F_TX_FAULT) {
1858 /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
1859 * from the TX_DISABLE deassertion for the module to
1860 * initialise, which is indicated by TX_FAULT
1861 * deasserting.
1862 */
1863 timeout = sfp->module_t_start_up;
1864 if (timeout > T_WAIT)
1865 timeout -= T_WAIT;
1866 else
1867 timeout = 1;
1868
1869 sfp_sm_next(sfp, SFP_S_INIT, timeout);
1870 } else {
1871 /* TX_FAULT is not asserted, assume the module has
1872 * finished initialising.
1873 */
1874 goto init_done;
1875 }
1876 break;
1877
1878 case SFP_S_INIT:
1879 if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
1880 /* TX_FAULT is still asserted after t_init or
1881 * or t_start_up, so assume there is a fault.
1882 */
1883 sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
1884 sfp->sm_fault_retries == N_FAULT_INIT);
1885 } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
1886 init_done:
1887 sfp->sm_phy_retries = R_PHY_RETRY;
1888 goto phy_probe;
1889 }
1890 break;
1891
1892 case SFP_S_INIT_PHY:
1893 if (event != SFP_E_TIMEOUT)
1894 break;
1895 phy_probe:
1896 /* TX_FAULT deasserted or we timed out with TX_FAULT
1897 * clear. Probe for the PHY and check the LOS state.
1898 */
1899 ret = sfp_sm_probe_for_phy(sfp);
1900 if (ret == -ENODEV) {
1901 if (--sfp->sm_phy_retries) {
1902 sfp_sm_next(sfp, SFP_S_INIT_PHY, T_PHY_RETRY);
1903 break;
1904 } else {
1905 dev_info(sfp->dev, "no PHY detected\n");
1906 }
1907 } else if (ret) {
1908 sfp_sm_next(sfp, SFP_S_FAIL, 0);
1909 break;
1910 }
1911 if (sfp_module_start(sfp->sfp_bus)) {
1912 sfp_sm_next(sfp, SFP_S_FAIL, 0);
1913 break;
1914 }
1915 sfp_sm_link_check_los(sfp);
1916
1917 /* Reset the fault retry count */
1918 sfp->sm_fault_retries = N_FAULT;
1919 break;
1920
1921 case SFP_S_INIT_TX_FAULT:
1922 if (event == SFP_E_TIMEOUT) {
1923 sfp_module_tx_fault_reset(sfp);
1924 sfp_sm_next(sfp, SFP_S_INIT, sfp->module_t_start_up);
1925 }
1926 break;
1927
1928 case SFP_S_WAIT_LOS:
1929 if (event == SFP_E_TX_FAULT)
1930 sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
1931 else if (sfp_los_event_inactive(sfp, event))
1932 sfp_sm_link_up(sfp);
1933 break;
1934
1935 case SFP_S_LINK_UP:
1936 if (event == SFP_E_TX_FAULT) {
1937 sfp_sm_link_down(sfp);
1938 sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
1939 } else if (sfp_los_event_active(sfp, event)) {
1940 sfp_sm_link_down(sfp);
1941 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1942 }
1943 break;
1944
1945 case SFP_S_TX_FAULT:
1946 if (event == SFP_E_TIMEOUT) {
1947 sfp_module_tx_fault_reset(sfp);
1948 sfp_sm_next(sfp, SFP_S_REINIT, sfp->module_t_start_up);
1949 }
1950 break;
1951
1952 case SFP_S_REINIT:
1953 if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
1954 sfp_sm_fault(sfp, SFP_S_TX_FAULT, false);
1955 } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
1956 dev_info(sfp->dev, "module transmit fault recovered\n");
1957 sfp_sm_link_check_los(sfp);
1958 }
1959 break;
1960
1961 case SFP_S_TX_DISABLE:
1962 break;
1963 }
1964}
1965
1966static void sfp_sm_event(struct sfp *sfp, unsigned int event)
1967{
1968 mutex_lock(&sfp->sm_mutex);
1969
1970 dev_dbg(sfp->dev, "SM: enter %s:%s:%s event %s\n",
1971 mod_state_to_str(sfp->sm_mod_state),
1972 dev_state_to_str(sfp->sm_dev_state),
1973 sm_state_to_str(sfp->sm_state),
1974 event_to_str(event));
1975
1976 sfp_sm_device(sfp, event);
1977 sfp_sm_module(sfp, event);
1978 sfp_sm_main(sfp, event);
1979
1980 dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
1981 mod_state_to_str(sfp->sm_mod_state),
1982 dev_state_to_str(sfp->sm_dev_state),
1983 sm_state_to_str(sfp->sm_state));
1984
1985 mutex_unlock(&sfp->sm_mutex);
1986}
1987
1988static void sfp_attach(struct sfp *sfp)
1989{
1990 sfp_sm_event(sfp, SFP_E_DEV_ATTACH);
1991}
1992
1993static void sfp_detach(struct sfp *sfp)
1994{
1995 sfp_sm_event(sfp, SFP_E_DEV_DETACH);
1996}
1997
1998static void sfp_start(struct sfp *sfp)
1999{
2000 sfp_sm_event(sfp, SFP_E_DEV_UP);
2001}
2002
2003static void sfp_stop(struct sfp *sfp)
2004{
2005 sfp_sm_event(sfp, SFP_E_DEV_DOWN);
2006}
2007
2008static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo)
2009{
2010 /* locking... and check module is present */
2011
2012 if (sfp->id.ext.sff8472_compliance &&
2013 !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) {
2014 modinfo->type = ETH_MODULE_SFF_8472;
2015 modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
2016 } else {
2017 modinfo->type = ETH_MODULE_SFF_8079;
2018 modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
2019 }
2020 return 0;
2021}
2022
2023static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee,
2024 u8 *data)
2025{
2026 unsigned int first, last, len;
2027 int ret;
2028
2029 if (ee->len == 0)
2030 return -EINVAL;
2031
2032 first = ee->offset;
2033 last = ee->offset + ee->len;
2034 if (first < ETH_MODULE_SFF_8079_LEN) {
2035 len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN);
2036 len -= first;
2037
2038 ret = sfp_read(sfp, false, first, data, len);
2039 if (ret < 0)
2040 return ret;
2041
2042 first += len;
2043 data += len;
2044 }
2045 if (first < ETH_MODULE_SFF_8472_LEN && last > ETH_MODULE_SFF_8079_LEN) {
2046 len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN);
2047 len -= first;
2048 first -= ETH_MODULE_SFF_8079_LEN;
2049
2050 ret = sfp_read(sfp, true, first, data, len);
2051 if (ret < 0)
2052 return ret;
2053 }
2054 return 0;
2055}
2056
2057static const struct sfp_socket_ops sfp_module_ops = {
2058 .attach = sfp_attach,
2059 .detach = sfp_detach,
2060 .start = sfp_start,
2061 .stop = sfp_stop,
2062 .module_info = sfp_module_info,
2063 .module_eeprom = sfp_module_eeprom,
2064};
2065
2066static void sfp_timeout(struct work_struct *work)
2067{
2068 struct sfp *sfp = container_of(work, struct sfp, timeout.work);
2069
2070 rtnl_lock();
2071 sfp_sm_event(sfp, SFP_E_TIMEOUT);
2072 rtnl_unlock();
2073}
2074
2075static void sfp_check_state(struct sfp *sfp)
2076{
2077 unsigned int state, i, changed;
2078
2079 mutex_lock(&sfp->st_mutex);
2080 state = sfp_get_state(sfp);
2081 changed = state ^ sfp->state;
2082 changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
2083
2084 for (i = 0; i < GPIO_MAX; i++)
2085 if (changed & BIT(i))
2086 dev_dbg(sfp->dev, "%s %u -> %u\n", gpio_of_names[i],
2087 !!(sfp->state & BIT(i)), !!(state & BIT(i)));
2088
2089 state |= sfp->state & (SFP_F_TX_DISABLE | SFP_F_RATE_SELECT);
2090 sfp->state = state;
2091
2092 rtnl_lock();
2093 if (changed & SFP_F_PRESENT)
2094 sfp_sm_event(sfp, state & SFP_F_PRESENT ?
2095 SFP_E_INSERT : SFP_E_REMOVE);
2096
2097 if (changed & SFP_F_TX_FAULT)
2098 sfp_sm_event(sfp, state & SFP_F_TX_FAULT ?
2099 SFP_E_TX_FAULT : SFP_E_TX_CLEAR);
2100
2101 if (changed & SFP_F_LOS)
2102 sfp_sm_event(sfp, state & SFP_F_LOS ?
2103 SFP_E_LOS_HIGH : SFP_E_LOS_LOW);
2104 rtnl_unlock();
2105 mutex_unlock(&sfp->st_mutex);
2106}
2107
2108static irqreturn_t sfp_irq(int irq, void *data)
2109{
2110 struct sfp *sfp = data;
2111
2112 sfp_check_state(sfp);
2113
2114 return IRQ_HANDLED;
2115}
2116
2117static void sfp_poll(struct work_struct *work)
2118{
2119 struct sfp *sfp = container_of(work, struct sfp, poll.work);
2120
2121 sfp_check_state(sfp);
2122
2123 if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) ||
2124 sfp->need_poll)
2125 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2126}
2127
2128static struct sfp *sfp_alloc(struct device *dev)
2129{
2130 struct sfp *sfp;
2131
2132 sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
2133 if (!sfp)
2134 return ERR_PTR(-ENOMEM);
2135
2136 sfp->dev = dev;
2137
2138 mutex_init(&sfp->sm_mutex);
2139 mutex_init(&sfp->st_mutex);
2140 INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
2141 INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
2142
2143 sfp_hwmon_init(sfp);
2144
2145 return sfp;
2146}
2147
2148static void sfp_cleanup(void *data)
2149{
2150 struct sfp *sfp = data;
2151
2152 sfp_hwmon_exit(sfp);
2153
2154 cancel_delayed_work_sync(&sfp->poll);
2155 cancel_delayed_work_sync(&sfp->timeout);
2156 if (sfp->i2c_mii) {
2157 mdiobus_unregister(sfp->i2c_mii);
2158 mdiobus_free(sfp->i2c_mii);
2159 }
2160 if (sfp->i2c)
2161 i2c_put_adapter(sfp->i2c);
2162 kfree(sfp);
2163}
2164
2165static int sfp_probe(struct platform_device *pdev)
2166{
2167 const struct sff_data *sff;
2168 struct sfp *sfp;
2169 int err, i;
2170
2171 sfp = sfp_alloc(&pdev->dev);
2172 if (IS_ERR(sfp))
2173 return PTR_ERR(sfp);
2174
2175 platform_set_drvdata(pdev, sfp);
2176
2177 err = devm_add_action(sfp->dev, sfp_cleanup, sfp);
2178 if (err < 0)
2179 return err;
2180
2181 sff = sfp->type = &sfp_data;
2182
2183 if (pdev->dev.of_node) {
2184 struct device_node *node = pdev->dev.of_node;
2185 const struct of_device_id *id;
2186 struct i2c_adapter *i2c;
2187 struct device_node *np;
2188
2189 id = of_match_node(sfp_of_match, node);
2190 if (WARN_ON(!id))
2191 return -EINVAL;
2192
2193 sff = sfp->type = id->data;
2194
2195 np = of_parse_phandle(node, "i2c-bus", 0);
2196 if (!np) {
2197 dev_err(sfp->dev, "missing 'i2c-bus' property\n");
2198 return -ENODEV;
2199 }
2200
2201 i2c = of_find_i2c_adapter_by_node(np);
2202 of_node_put(np);
2203 if (!i2c)
2204 return -EPROBE_DEFER;
2205
2206 err = sfp_i2c_configure(sfp, i2c);
2207 if (err < 0) {
2208 i2c_put_adapter(i2c);
2209 return err;
2210 }
2211 }
2212
2213 for (i = 0; i < GPIO_MAX; i++)
2214 if (sff->gpios & BIT(i)) {
2215 sfp->gpio[i] = devm_gpiod_get_optional(sfp->dev,
2216 gpio_of_names[i], gpio_flags[i]);
2217 if (IS_ERR(sfp->gpio[i]))
2218 return PTR_ERR(sfp->gpio[i]);
2219 }
2220
2221 sfp->get_state = sfp_gpio_get_state;
2222 sfp->set_state = sfp_gpio_set_state;
2223
2224 /* Modules that have no detect signal are always present */
2225 if (!(sfp->gpio[GPIO_MODDEF0]))
2226 sfp->get_state = sff_gpio_get_state;
2227
2228 device_property_read_u32(&pdev->dev, "maximum-power-milliwatt",
2229 &sfp->max_power_mW);
2230 if (!sfp->max_power_mW)
2231 sfp->max_power_mW = 1000;
2232
2233 dev_info(sfp->dev, "Host maximum power %u.%uW\n",
2234 sfp->max_power_mW / 1000, (sfp->max_power_mW / 100) % 10);
2235
2236 /* Get the initial state, and always signal TX disable,
2237 * since the network interface will not be up.
2238 */
2239 sfp->state = sfp_get_state(sfp) | SFP_F_TX_DISABLE;
2240
2241 if (sfp->gpio[GPIO_RATE_SELECT] &&
2242 gpiod_get_value_cansleep(sfp->gpio[GPIO_RATE_SELECT]))
2243 sfp->state |= SFP_F_RATE_SELECT;
2244 sfp_set_state(sfp, sfp->state);
2245 sfp_module_tx_disable(sfp);
2246 if (sfp->state & SFP_F_PRESENT) {
2247 rtnl_lock();
2248 sfp_sm_event(sfp, SFP_E_INSERT);
2249 rtnl_unlock();
2250 }
2251
2252 for (i = 0; i < GPIO_MAX; i++) {
2253 if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
2254 continue;
2255
2256 sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
2257 if (!sfp->gpio_irq[i]) {
2258 sfp->need_poll = true;
2259 continue;
2260 }
2261
2262 err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
2263 NULL, sfp_irq,
2264 IRQF_ONESHOT |
2265 IRQF_TRIGGER_RISING |
2266 IRQF_TRIGGER_FALLING,
2267 dev_name(sfp->dev), sfp);
2268 if (err) {
2269 sfp->gpio_irq[i] = 0;
2270 sfp->need_poll = true;
2271 }
2272 }
2273
2274 if (sfp->need_poll)
2275 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2276
2277 /* We could have an issue in cases no Tx disable pin is available or
2278 * wired as modules using a laser as their light source will continue to
2279 * be active when the fiber is removed. This could be a safety issue and
2280 * we should at least warn the user about that.
2281 */
2282 if (!sfp->gpio[GPIO_TX_DISABLE])
2283 dev_warn(sfp->dev,
2284 "No tx_disable pin: SFP modules will always be emitting.\n");
2285
2286 sfp->sfp_bus = sfp_register_socket(sfp->dev, sfp, &sfp_module_ops);
2287 if (!sfp->sfp_bus)
2288 return -ENOMEM;
2289
2290 return 0;
2291}
2292
2293static int sfp_remove(struct platform_device *pdev)
2294{
2295 struct sfp *sfp = platform_get_drvdata(pdev);
2296
2297 sfp_unregister_socket(sfp->sfp_bus);
2298
2299 rtnl_lock();
2300 sfp_sm_event(sfp, SFP_E_REMOVE);
2301 rtnl_unlock();
2302
2303 return 0;
2304}
2305
2306static void sfp_shutdown(struct platform_device *pdev)
2307{
2308 struct sfp *sfp = platform_get_drvdata(pdev);
2309 int i;
2310
2311 for (i = 0; i < GPIO_MAX; i++) {
2312 if (!sfp->gpio_irq[i])
2313 continue;
2314
2315 devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
2316 }
2317
2318 cancel_delayed_work_sync(&sfp->poll);
2319 cancel_delayed_work_sync(&sfp->timeout);
2320}
2321
2322static struct platform_driver sfp_driver = {
2323 .probe = sfp_probe,
2324 .remove = sfp_remove,
2325 .shutdown = sfp_shutdown,
2326 .driver = {
2327 .name = "sfp",
2328 .of_match_table = sfp_of_match,
2329 },
2330};
2331
2332static int sfp_init(void)
2333{
2334 poll_jiffies = msecs_to_jiffies(100);
2335
2336 return platform_driver_register(&sfp_driver);
2337}
2338module_init(sfp_init);
2339
2340static void sfp_exit(void)
2341{
2342 platform_driver_unregister(&sfp_driver);
2343}
2344module_exit(sfp_exit);
2345
2346MODULE_ALIAS("platform:sfp");
2347MODULE_AUTHOR("Russell King");
2348MODULE_LICENSE("GPL v2");