xref: /openbmc/linux/drivers/net/phy/sfp.c (revision 0352f880)
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/acpi.h>
3 #include <linux/ctype.h>
4 #include <linux/debugfs.h>
5 #include <linux/delay.h>
6 #include <linux/gpio/consumer.h>
7 #include <linux/hwmon.h>
8 #include <linux/i2c.h>
9 #include <linux/interrupt.h>
10 #include <linux/jiffies.h>
11 #include <linux/mdio/mdio-i2c.h>
12 #include <linux/module.h>
13 #include <linux/mutex.h>
14 #include <linux/of.h>
15 #include <linux/phy.h>
16 #include <linux/platform_device.h>
17 #include <linux/rtnetlink.h>
18 #include <linux/slab.h>
19 #include <linux/workqueue.h>
20 
21 #include "sfp.h"
22 #include "swphy.h"
23 
24 enum {
25 	GPIO_MODDEF0,
26 	GPIO_LOS,
27 	GPIO_TX_FAULT,
28 	GPIO_TX_DISABLE,
29 	GPIO_RATE_SELECT,
30 	GPIO_MAX,
31 
32 	SFP_F_PRESENT = BIT(GPIO_MODDEF0),
33 	SFP_F_LOS = BIT(GPIO_LOS),
34 	SFP_F_TX_FAULT = BIT(GPIO_TX_FAULT),
35 	SFP_F_TX_DISABLE = BIT(GPIO_TX_DISABLE),
36 	SFP_F_RATE_SELECT = BIT(GPIO_RATE_SELECT),
37 
38 	SFP_E_INSERT = 0,
39 	SFP_E_REMOVE,
40 	SFP_E_DEV_ATTACH,
41 	SFP_E_DEV_DETACH,
42 	SFP_E_DEV_DOWN,
43 	SFP_E_DEV_UP,
44 	SFP_E_TX_FAULT,
45 	SFP_E_TX_CLEAR,
46 	SFP_E_LOS_HIGH,
47 	SFP_E_LOS_LOW,
48 	SFP_E_TIMEOUT,
49 
50 	SFP_MOD_EMPTY = 0,
51 	SFP_MOD_ERROR,
52 	SFP_MOD_PROBE,
53 	SFP_MOD_WAITDEV,
54 	SFP_MOD_HPOWER,
55 	SFP_MOD_WAITPWR,
56 	SFP_MOD_PRESENT,
57 
58 	SFP_DEV_DETACHED = 0,
59 	SFP_DEV_DOWN,
60 	SFP_DEV_UP,
61 
62 	SFP_S_DOWN = 0,
63 	SFP_S_FAIL,
64 	SFP_S_WAIT,
65 	SFP_S_INIT,
66 	SFP_S_INIT_PHY,
67 	SFP_S_INIT_TX_FAULT,
68 	SFP_S_WAIT_LOS,
69 	SFP_S_LINK_UP,
70 	SFP_S_TX_FAULT,
71 	SFP_S_REINIT,
72 	SFP_S_TX_DISABLE,
73 };
74 
75 static const char  * const mod_state_strings[] = {
76 	[SFP_MOD_EMPTY] = "empty",
77 	[SFP_MOD_ERROR] = "error",
78 	[SFP_MOD_PROBE] = "probe",
79 	[SFP_MOD_WAITDEV] = "waitdev",
80 	[SFP_MOD_HPOWER] = "hpower",
81 	[SFP_MOD_WAITPWR] = "waitpwr",
82 	[SFP_MOD_PRESENT] = "present",
83 };
84 
85 static const char *mod_state_to_str(unsigned short mod_state)
86 {
87 	if (mod_state >= ARRAY_SIZE(mod_state_strings))
88 		return "Unknown module state";
89 	return mod_state_strings[mod_state];
90 }
91 
92 static const char * const dev_state_strings[] = {
93 	[SFP_DEV_DETACHED] = "detached",
94 	[SFP_DEV_DOWN] = "down",
95 	[SFP_DEV_UP] = "up",
96 };
97 
98 static const char *dev_state_to_str(unsigned short dev_state)
99 {
100 	if (dev_state >= ARRAY_SIZE(dev_state_strings))
101 		return "Unknown device state";
102 	return dev_state_strings[dev_state];
103 }
104 
105 static const char * const event_strings[] = {
106 	[SFP_E_INSERT] = "insert",
107 	[SFP_E_REMOVE] = "remove",
108 	[SFP_E_DEV_ATTACH] = "dev_attach",
109 	[SFP_E_DEV_DETACH] = "dev_detach",
110 	[SFP_E_DEV_DOWN] = "dev_down",
111 	[SFP_E_DEV_UP] = "dev_up",
112 	[SFP_E_TX_FAULT] = "tx_fault",
113 	[SFP_E_TX_CLEAR] = "tx_clear",
114 	[SFP_E_LOS_HIGH] = "los_high",
115 	[SFP_E_LOS_LOW] = "los_low",
116 	[SFP_E_TIMEOUT] = "timeout",
117 };
118 
119 static const char *event_to_str(unsigned short event)
120 {
121 	if (event >= ARRAY_SIZE(event_strings))
122 		return "Unknown event";
123 	return event_strings[event];
124 }
125 
126 static const char * const sm_state_strings[] = {
127 	[SFP_S_DOWN] = "down",
128 	[SFP_S_FAIL] = "fail",
129 	[SFP_S_WAIT] = "wait",
130 	[SFP_S_INIT] = "init",
131 	[SFP_S_INIT_PHY] = "init_phy",
132 	[SFP_S_INIT_TX_FAULT] = "init_tx_fault",
133 	[SFP_S_WAIT_LOS] = "wait_los",
134 	[SFP_S_LINK_UP] = "link_up",
135 	[SFP_S_TX_FAULT] = "tx_fault",
136 	[SFP_S_REINIT] = "reinit",
137 	[SFP_S_TX_DISABLE] = "tx_disable",
138 };
139 
140 static const char *sm_state_to_str(unsigned short sm_state)
141 {
142 	if (sm_state >= ARRAY_SIZE(sm_state_strings))
143 		return "Unknown state";
144 	return sm_state_strings[sm_state];
145 }
146 
147 static const char *gpio_of_names[] = {
148 	"mod-def0",
149 	"los",
150 	"tx-fault",
151 	"tx-disable",
152 	"rate-select0",
153 };
154 
155 static const enum gpiod_flags gpio_flags[] = {
156 	GPIOD_IN,
157 	GPIOD_IN,
158 	GPIOD_IN,
159 	GPIOD_ASIS,
160 	GPIOD_ASIS,
161 };
162 
163 /* t_start_up (SFF-8431) or t_init (SFF-8472) is the time required for a
164  * non-cooled module to initialise its laser safety circuitry. We wait
165  * an initial T_WAIT period before we check the tx fault to give any PHY
166  * on board (for a copper SFP) time to initialise.
167  */
168 #define T_WAIT			msecs_to_jiffies(50)
169 #define T_WAIT_ROLLBALL		msecs_to_jiffies(25000)
170 #define T_START_UP		msecs_to_jiffies(300)
171 #define T_START_UP_BAD_GPON	msecs_to_jiffies(60000)
172 
173 /* t_reset is the time required to assert the TX_DISABLE signal to reset
174  * an indicated TX_FAULT.
175  */
176 #define T_RESET_US		10
177 #define T_FAULT_RECOVER		msecs_to_jiffies(1000)
178 
179 /* N_FAULT_INIT is the number of recovery attempts at module initialisation
180  * time. If the TX_FAULT signal is not deasserted after this number of
181  * attempts at clearing it, we decide that the module is faulty.
182  * N_FAULT is the same but after the module has initialised.
183  */
184 #define N_FAULT_INIT		5
185 #define N_FAULT			5
186 
187 /* T_PHY_RETRY is the time interval between attempts to probe the PHY.
188  * R_PHY_RETRY is the number of attempts.
189  */
190 #define T_PHY_RETRY		msecs_to_jiffies(50)
191 #define R_PHY_RETRY		12
192 
193 /* SFP module presence detection is poor: the three MOD DEF signals are
194  * the same length on the PCB, which means it's possible for MOD DEF 0 to
195  * connect before the I2C bus on MOD DEF 1/2.
196  *
197  * The SFF-8472 specifies t_serial ("Time from power on until module is
198  * ready for data transmission over the two wire serial bus.") as 300ms.
199  */
200 #define T_SERIAL		msecs_to_jiffies(300)
201 #define T_HPOWER_LEVEL		msecs_to_jiffies(300)
202 #define T_PROBE_RETRY_INIT	msecs_to_jiffies(100)
203 #define R_PROBE_RETRY_INIT	10
204 #define T_PROBE_RETRY_SLOW	msecs_to_jiffies(5000)
205 #define R_PROBE_RETRY_SLOW	12
206 
207 /* SFP modules appear to always have their PHY configured for bus address
208  * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
209  * RollBall SFPs access phy via SFP Enhanced Digital Diagnostic Interface
210  * via address 0x51 (mdio-i2c will use RollBall protocol on this address).
211  */
212 #define SFP_PHY_ADDR		22
213 #define SFP_PHY_ADDR_ROLLBALL	17
214 
215 struct sff_data {
216 	unsigned int gpios;
217 	bool (*module_supported)(const struct sfp_eeprom_id *id);
218 };
219 
220 struct sfp {
221 	struct device *dev;
222 	struct i2c_adapter *i2c;
223 	struct mii_bus *i2c_mii;
224 	struct sfp_bus *sfp_bus;
225 	enum mdio_i2c_proto mdio_protocol;
226 	struct phy_device *mod_phy;
227 	const struct sff_data *type;
228 	size_t i2c_block_size;
229 	u32 max_power_mW;
230 
231 	unsigned int (*get_state)(struct sfp *);
232 	void (*set_state)(struct sfp *, unsigned int);
233 	int (*read)(struct sfp *, bool, u8, void *, size_t);
234 	int (*write)(struct sfp *, bool, u8, void *, size_t);
235 
236 	struct gpio_desc *gpio[GPIO_MAX];
237 	int gpio_irq[GPIO_MAX];
238 
239 	bool need_poll;
240 
241 	struct mutex st_mutex;			/* Protects state */
242 	unsigned int state_hw_mask;
243 	unsigned int state_soft_mask;
244 	unsigned int state;
245 	struct delayed_work poll;
246 	struct delayed_work timeout;
247 	struct mutex sm_mutex;			/* Protects state machine */
248 	unsigned char sm_mod_state;
249 	unsigned char sm_mod_tries_init;
250 	unsigned char sm_mod_tries;
251 	unsigned char sm_dev_state;
252 	unsigned short sm_state;
253 	unsigned char sm_fault_retries;
254 	unsigned char sm_phy_retries;
255 
256 	struct sfp_eeprom_id id;
257 	unsigned int module_power_mW;
258 	unsigned int module_t_start_up;
259 	unsigned int module_t_wait;
260 	bool tx_fault_ignore;
261 
262 	const struct sfp_quirk *quirk;
263 
264 #if IS_ENABLED(CONFIG_HWMON)
265 	struct sfp_diag diag;
266 	struct delayed_work hwmon_probe;
267 	unsigned int hwmon_tries;
268 	struct device *hwmon_dev;
269 	char *hwmon_name;
270 #endif
271 
272 #if IS_ENABLED(CONFIG_DEBUG_FS)
273 	struct dentry *debugfs_dir;
274 #endif
275 };
276 
277 static bool sff_module_supported(const struct sfp_eeprom_id *id)
278 {
279 	return id->base.phys_id == SFF8024_ID_SFF_8472 &&
280 	       id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
281 }
282 
283 static const struct sff_data sff_data = {
284 	.gpios = SFP_F_LOS | SFP_F_TX_FAULT | SFP_F_TX_DISABLE,
285 	.module_supported = sff_module_supported,
286 };
287 
288 static bool sfp_module_supported(const struct sfp_eeprom_id *id)
289 {
290 	if (id->base.phys_id == SFF8024_ID_SFP &&
291 	    id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP)
292 		return true;
293 
294 	/* SFP GPON module Ubiquiti U-Fiber Instant has in its EEPROM stored
295 	 * phys id SFF instead of SFP. Therefore mark this module explicitly
296 	 * as supported based on vendor name and pn match.
297 	 */
298 	if (id->base.phys_id == SFF8024_ID_SFF_8472 &&
299 	    id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP &&
300 	    !memcmp(id->base.vendor_name, "UBNT            ", 16) &&
301 	    !memcmp(id->base.vendor_pn, "UF-INSTANT      ", 16))
302 		return true;
303 
304 	return false;
305 }
306 
307 static const struct sff_data sfp_data = {
308 	.gpios = SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT |
309 		 SFP_F_TX_DISABLE | SFP_F_RATE_SELECT,
310 	.module_supported = sfp_module_supported,
311 };
312 
313 static const struct of_device_id sfp_of_match[] = {
314 	{ .compatible = "sff,sff", .data = &sff_data, },
315 	{ .compatible = "sff,sfp", .data = &sfp_data, },
316 	{ },
317 };
318 MODULE_DEVICE_TABLE(of, sfp_of_match);
319 
320 static void sfp_fixup_long_startup(struct sfp *sfp)
321 {
322 	sfp->module_t_start_up = T_START_UP_BAD_GPON;
323 }
324 
325 static void sfp_fixup_ignore_tx_fault(struct sfp *sfp)
326 {
327 	sfp->tx_fault_ignore = true;
328 }
329 
330 static void sfp_fixup_halny_gsfp(struct sfp *sfp)
331 {
332 	/* Ignore the TX_FAULT and LOS signals on this module.
333 	 * these are possibly used for other purposes on this
334 	 * module, e.g. a serial port.
335 	 */
336 	sfp->state_hw_mask &= ~(SFP_F_TX_FAULT | SFP_F_LOS);
337 }
338 
339 static void sfp_fixup_rollball(struct sfp *sfp)
340 {
341 	sfp->mdio_protocol = MDIO_I2C_ROLLBALL;
342 	sfp->module_t_wait = T_WAIT_ROLLBALL;
343 }
344 
345 static void sfp_fixup_rollball_cc(struct sfp *sfp)
346 {
347 	sfp_fixup_rollball(sfp);
348 
349 	/* Some RollBall SFPs may have wrong (zero) extended compliance code
350 	 * burned in EEPROM. For PHY probing we need the correct one.
351 	 */
352 	sfp->id.base.extended_cc = SFF8024_ECC_10GBASE_T_SFI;
353 }
354 
355 static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
356 				unsigned long *modes,
357 				unsigned long *interfaces)
358 {
359 	linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT, modes);
360 	__set_bit(PHY_INTERFACE_MODE_2500BASEX, interfaces);
361 }
362 
363 static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,
364 				      unsigned long *modes,
365 				      unsigned long *interfaces)
366 {
367 	/* Ubiquiti U-Fiber Instant module claims that support all transceiver
368 	 * types including 10G Ethernet which is not truth. So clear all claimed
369 	 * modes and set only one mode which module supports: 1000baseX_Full.
370 	 */
371 	linkmode_zero(modes);
372 	linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT, modes);
373 }
374 
375 #define SFP_QUIRK(_v, _p, _m, _f) \
376 	{ .vendor = _v, .part = _p, .modes = _m, .fixup = _f, }
377 #define SFP_QUIRK_M(_v, _p, _m) SFP_QUIRK(_v, _p, _m, NULL)
378 #define SFP_QUIRK_F(_v, _p, _f) SFP_QUIRK(_v, _p, NULL, _f)
379 
380 static const struct sfp_quirk sfp_quirks[] = {
381 	// Alcatel Lucent G-010S-P can operate at 2500base-X, but incorrectly
382 	// report 2500MBd NRZ in their EEPROM
383 	SFP_QUIRK_M("ALCATELLUCENT", "G010SP", sfp_quirk_2500basex),
384 
385 	// Alcatel Lucent G-010S-A can operate at 2500base-X, but report 3.2GBd
386 	// NRZ in their EEPROM
387 	SFP_QUIRK("ALCATELLUCENT", "3FE46541AA", sfp_quirk_2500basex,
388 		  sfp_fixup_long_startup),
389 
390 	SFP_QUIRK_F("HALNy", "HL-GSFP", sfp_fixup_halny_gsfp),
391 
392 	// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd NRZ in
393 	// their EEPROM
394 	SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex,
395 		  sfp_fixup_ignore_tx_fault),
396 
397 	// Lantech 8330-262D-E can operate at 2500base-X, but incorrectly report
398 	// 2500MBd NRZ in their EEPROM
399 	SFP_QUIRK_M("Lantech", "8330-262D-E", sfp_quirk_2500basex),
400 
401 	SFP_QUIRK_M("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
402 
403 	SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc),
404 	SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc),
405 	SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc),
406 	SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball),
407 	SFP_QUIRK_F("Turris", "RTSFP-10G", sfp_fixup_rollball),
408 };
409 
410 static size_t sfp_strlen(const char *str, size_t maxlen)
411 {
412 	size_t size, i;
413 
414 	/* Trailing characters should be filled with space chars, but
415 	 * some manufacturers can't read SFF-8472 and use NUL.
416 	 */
417 	for (i = 0, size = 0; i < maxlen; i++)
418 		if (str[i] != ' ' && str[i] != '\0')
419 			size = i + 1;
420 
421 	return size;
422 }
423 
424 static bool sfp_match(const char *qs, const char *str, size_t len)
425 {
426 	if (!qs)
427 		return true;
428 	if (strlen(qs) != len)
429 		return false;
430 	return !strncmp(qs, str, len);
431 }
432 
433 static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id)
434 {
435 	const struct sfp_quirk *q;
436 	unsigned int i;
437 	size_t vs, ps;
438 
439 	vs = sfp_strlen(id->base.vendor_name, ARRAY_SIZE(id->base.vendor_name));
440 	ps = sfp_strlen(id->base.vendor_pn, ARRAY_SIZE(id->base.vendor_pn));
441 
442 	for (i = 0, q = sfp_quirks; i < ARRAY_SIZE(sfp_quirks); i++, q++)
443 		if (sfp_match(q->vendor, id->base.vendor_name, vs) &&
444 		    sfp_match(q->part, id->base.vendor_pn, ps))
445 			return q;
446 
447 	return NULL;
448 }
449 
450 static unsigned long poll_jiffies;
451 
452 static unsigned int sfp_gpio_get_state(struct sfp *sfp)
453 {
454 	unsigned int i, state, v;
455 
456 	for (i = state = 0; i < GPIO_MAX; i++) {
457 		if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
458 			continue;
459 
460 		v = gpiod_get_value_cansleep(sfp->gpio[i]);
461 		if (v)
462 			state |= BIT(i);
463 	}
464 
465 	return state;
466 }
467 
468 static unsigned int sff_gpio_get_state(struct sfp *sfp)
469 {
470 	return sfp_gpio_get_state(sfp) | SFP_F_PRESENT;
471 }
472 
473 static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
474 {
475 	if (state & SFP_F_PRESENT) {
476 		/* If the module is present, drive the signals */
477 		if (sfp->gpio[GPIO_TX_DISABLE])
478 			gpiod_direction_output(sfp->gpio[GPIO_TX_DISABLE],
479 					       state & SFP_F_TX_DISABLE);
480 		if (state & SFP_F_RATE_SELECT)
481 			gpiod_direction_output(sfp->gpio[GPIO_RATE_SELECT],
482 					       state & SFP_F_RATE_SELECT);
483 	} else {
484 		/* Otherwise, let them float to the pull-ups */
485 		if (sfp->gpio[GPIO_TX_DISABLE])
486 			gpiod_direction_input(sfp->gpio[GPIO_TX_DISABLE]);
487 		if (state & SFP_F_RATE_SELECT)
488 			gpiod_direction_input(sfp->gpio[GPIO_RATE_SELECT]);
489 	}
490 }
491 
492 static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
493 			size_t len)
494 {
495 	struct i2c_msg msgs[2];
496 	u8 bus_addr = a2 ? 0x51 : 0x50;
497 	size_t block_size = sfp->i2c_block_size;
498 	size_t this_len;
499 	int ret;
500 
501 	msgs[0].addr = bus_addr;
502 	msgs[0].flags = 0;
503 	msgs[0].len = 1;
504 	msgs[0].buf = &dev_addr;
505 	msgs[1].addr = bus_addr;
506 	msgs[1].flags = I2C_M_RD;
507 	msgs[1].len = len;
508 	msgs[1].buf = buf;
509 
510 	while (len) {
511 		this_len = len;
512 		if (this_len > block_size)
513 			this_len = block_size;
514 
515 		msgs[1].len = this_len;
516 
517 		ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
518 		if (ret < 0)
519 			return ret;
520 
521 		if (ret != ARRAY_SIZE(msgs))
522 			break;
523 
524 		msgs[1].buf += this_len;
525 		dev_addr += this_len;
526 		len -= this_len;
527 	}
528 
529 	return msgs[1].buf - (u8 *)buf;
530 }
531 
532 static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
533 	size_t len)
534 {
535 	struct i2c_msg msgs[1];
536 	u8 bus_addr = a2 ? 0x51 : 0x50;
537 	int ret;
538 
539 	msgs[0].addr = bus_addr;
540 	msgs[0].flags = 0;
541 	msgs[0].len = 1 + len;
542 	msgs[0].buf = kmalloc(1 + len, GFP_KERNEL);
543 	if (!msgs[0].buf)
544 		return -ENOMEM;
545 
546 	msgs[0].buf[0] = dev_addr;
547 	memcpy(&msgs[0].buf[1], buf, len);
548 
549 	ret = i2c_transfer(sfp->i2c, msgs, ARRAY_SIZE(msgs));
550 
551 	kfree(msgs[0].buf);
552 
553 	if (ret < 0)
554 		return ret;
555 
556 	return ret == ARRAY_SIZE(msgs) ? len : 0;
557 }
558 
559 static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
560 {
561 	if (!i2c_check_functionality(i2c, I2C_FUNC_I2C))
562 		return -EINVAL;
563 
564 	sfp->i2c = i2c;
565 	sfp->read = sfp_i2c_read;
566 	sfp->write = sfp_i2c_write;
567 
568 	return 0;
569 }
570 
571 static int sfp_i2c_mdiobus_create(struct sfp *sfp)
572 {
573 	struct mii_bus *i2c_mii;
574 	int ret;
575 
576 	i2c_mii = mdio_i2c_alloc(sfp->dev, sfp->i2c, sfp->mdio_protocol);
577 	if (IS_ERR(i2c_mii))
578 		return PTR_ERR(i2c_mii);
579 
580 	i2c_mii->name = "SFP I2C Bus";
581 	i2c_mii->phy_mask = ~0;
582 
583 	ret = mdiobus_register(i2c_mii);
584 	if (ret < 0) {
585 		mdiobus_free(i2c_mii);
586 		return ret;
587 	}
588 
589 	sfp->i2c_mii = i2c_mii;
590 
591 	return 0;
592 }
593 
594 static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
595 {
596 	mdiobus_unregister(sfp->i2c_mii);
597 	sfp->i2c_mii = NULL;
598 }
599 
600 /* Interface */
601 static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
602 {
603 	return sfp->read(sfp, a2, addr, buf, len);
604 }
605 
606 static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
607 {
608 	return sfp->write(sfp, a2, addr, buf, len);
609 }
610 
611 static unsigned int sfp_soft_get_state(struct sfp *sfp)
612 {
613 	unsigned int state = 0;
614 	u8 status;
615 	int ret;
616 
617 	ret = sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status));
618 	if (ret == sizeof(status)) {
619 		if (status & SFP_STATUS_RX_LOS)
620 			state |= SFP_F_LOS;
621 		if (status & SFP_STATUS_TX_FAULT)
622 			state |= SFP_F_TX_FAULT;
623 	} else {
624 		dev_err_ratelimited(sfp->dev,
625 				    "failed to read SFP soft status: %pe\n",
626 				    ERR_PTR(ret));
627 		/* Preserve the current state */
628 		state = sfp->state;
629 	}
630 
631 	return state & sfp->state_soft_mask;
632 }
633 
634 static void sfp_soft_set_state(struct sfp *sfp, unsigned int state)
635 {
636 	u8 status;
637 
638 	if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
639 		     sizeof(status)) {
640 		if (state & SFP_F_TX_DISABLE)
641 			status |= SFP_STATUS_TX_DISABLE_FORCE;
642 		else
643 			status &= ~SFP_STATUS_TX_DISABLE_FORCE;
644 
645 		sfp_write(sfp, true, SFP_STATUS, &status, sizeof(status));
646 	}
647 }
648 
649 static void sfp_soft_start_poll(struct sfp *sfp)
650 {
651 	const struct sfp_eeprom_id *id = &sfp->id;
652 	unsigned int mask = 0;
653 
654 	sfp->state_soft_mask = 0;
655 	if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_DISABLE)
656 		mask |= SFP_F_TX_DISABLE;
657 	if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_FAULT)
658 		mask |= SFP_F_TX_FAULT;
659 	if (id->ext.enhopts & SFP_ENHOPTS_SOFT_RX_LOS)
660 		mask |= SFP_F_LOS;
661 
662 	// Poll the soft state for hardware pins we want to ignore
663 	sfp->state_soft_mask = ~sfp->state_hw_mask & mask;
664 
665 	if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
666 	    !sfp->need_poll)
667 		mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
668 }
669 
670 static void sfp_soft_stop_poll(struct sfp *sfp)
671 {
672 	sfp->state_soft_mask = 0;
673 }
674 
675 static unsigned int sfp_get_state(struct sfp *sfp)
676 {
677 	unsigned int soft = sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT);
678 	unsigned int state;
679 
680 	state = sfp->get_state(sfp) & sfp->state_hw_mask;
681 	if (state & SFP_F_PRESENT && soft)
682 		state |= sfp_soft_get_state(sfp);
683 
684 	return state;
685 }
686 
687 static void sfp_set_state(struct sfp *sfp, unsigned int state)
688 {
689 	sfp->set_state(sfp, state);
690 
691 	if (state & SFP_F_PRESENT &&
692 	    sfp->state_soft_mask & SFP_F_TX_DISABLE)
693 		sfp_soft_set_state(sfp, state);
694 }
695 
696 static unsigned int sfp_check(void *buf, size_t len)
697 {
698 	u8 *p, check;
699 
700 	for (p = buf, check = 0; len; p++, len--)
701 		check += *p;
702 
703 	return check;
704 }
705 
706 /* hwmon */
707 #if IS_ENABLED(CONFIG_HWMON)
708 static umode_t sfp_hwmon_is_visible(const void *data,
709 				    enum hwmon_sensor_types type,
710 				    u32 attr, int channel)
711 {
712 	const struct sfp *sfp = data;
713 
714 	switch (type) {
715 	case hwmon_temp:
716 		switch (attr) {
717 		case hwmon_temp_min_alarm:
718 		case hwmon_temp_max_alarm:
719 		case hwmon_temp_lcrit_alarm:
720 		case hwmon_temp_crit_alarm:
721 		case hwmon_temp_min:
722 		case hwmon_temp_max:
723 		case hwmon_temp_lcrit:
724 		case hwmon_temp_crit:
725 			if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
726 				return 0;
727 			fallthrough;
728 		case hwmon_temp_input:
729 		case hwmon_temp_label:
730 			return 0444;
731 		default:
732 			return 0;
733 		}
734 	case hwmon_in:
735 		switch (attr) {
736 		case hwmon_in_min_alarm:
737 		case hwmon_in_max_alarm:
738 		case hwmon_in_lcrit_alarm:
739 		case hwmon_in_crit_alarm:
740 		case hwmon_in_min:
741 		case hwmon_in_max:
742 		case hwmon_in_lcrit:
743 		case hwmon_in_crit:
744 			if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
745 				return 0;
746 			fallthrough;
747 		case hwmon_in_input:
748 		case hwmon_in_label:
749 			return 0444;
750 		default:
751 			return 0;
752 		}
753 	case hwmon_curr:
754 		switch (attr) {
755 		case hwmon_curr_min_alarm:
756 		case hwmon_curr_max_alarm:
757 		case hwmon_curr_lcrit_alarm:
758 		case hwmon_curr_crit_alarm:
759 		case hwmon_curr_min:
760 		case hwmon_curr_max:
761 		case hwmon_curr_lcrit:
762 		case hwmon_curr_crit:
763 			if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
764 				return 0;
765 			fallthrough;
766 		case hwmon_curr_input:
767 		case hwmon_curr_label:
768 			return 0444;
769 		default:
770 			return 0;
771 		}
772 	case hwmon_power:
773 		/* External calibration of receive power requires
774 		 * floating point arithmetic. Doing that in the kernel
775 		 * is not easy, so just skip it. If the module does
776 		 * not require external calibration, we can however
777 		 * show receiver power, since FP is then not needed.
778 		 */
779 		if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL &&
780 		    channel == 1)
781 			return 0;
782 		switch (attr) {
783 		case hwmon_power_min_alarm:
784 		case hwmon_power_max_alarm:
785 		case hwmon_power_lcrit_alarm:
786 		case hwmon_power_crit_alarm:
787 		case hwmon_power_min:
788 		case hwmon_power_max:
789 		case hwmon_power_lcrit:
790 		case hwmon_power_crit:
791 			if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
792 				return 0;
793 			fallthrough;
794 		case hwmon_power_input:
795 		case hwmon_power_label:
796 			return 0444;
797 		default:
798 			return 0;
799 		}
800 	default:
801 		return 0;
802 	}
803 }
804 
805 static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
806 {
807 	__be16 val;
808 	int err;
809 
810 	err = sfp_read(sfp, true, reg, &val, sizeof(val));
811 	if (err < 0)
812 		return err;
813 
814 	*value = be16_to_cpu(val);
815 
816 	return 0;
817 }
818 
819 static void sfp_hwmon_to_rx_power(long *value)
820 {
821 	*value = DIV_ROUND_CLOSEST(*value, 10);
822 }
823 
824 static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
825 				long *value)
826 {
827 	if (sfp->id.ext.diagmon & SFP_DIAGMON_EXT_CAL)
828 		*value = DIV_ROUND_CLOSEST(*value * slope, 256) + offset;
829 }
830 
831 static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
832 {
833 	sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_t_slope),
834 			    be16_to_cpu(sfp->diag.cal_t_offset), value);
835 
836 	if (*value >= 0x8000)
837 		*value -= 0x10000;
838 
839 	*value = DIV_ROUND_CLOSEST(*value * 1000, 256);
840 }
841 
842 static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
843 {
844 	sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_v_slope),
845 			    be16_to_cpu(sfp->diag.cal_v_offset), value);
846 
847 	*value = DIV_ROUND_CLOSEST(*value, 10);
848 }
849 
850 static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
851 {
852 	sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txi_slope),
853 			    be16_to_cpu(sfp->diag.cal_txi_offset), value);
854 
855 	*value = DIV_ROUND_CLOSEST(*value, 500);
856 }
857 
858 static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
859 {
860 	sfp_hwmon_calibrate(sfp, be16_to_cpu(sfp->diag.cal_txpwr_slope),
861 			    be16_to_cpu(sfp->diag.cal_txpwr_offset), value);
862 
863 	*value = DIV_ROUND_CLOSEST(*value, 10);
864 }
865 
866 static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
867 {
868 	int err;
869 
870 	err = sfp_hwmon_read_sensor(sfp, reg, value);
871 	if (err < 0)
872 		return err;
873 
874 	sfp_hwmon_calibrate_temp(sfp, value);
875 
876 	return 0;
877 }
878 
879 static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
880 {
881 	int err;
882 
883 	err = sfp_hwmon_read_sensor(sfp, reg, value);
884 	if (err < 0)
885 		return err;
886 
887 	sfp_hwmon_calibrate_vcc(sfp, value);
888 
889 	return 0;
890 }
891 
892 static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
893 {
894 	int err;
895 
896 	err = sfp_hwmon_read_sensor(sfp, reg, value);
897 	if (err < 0)
898 		return err;
899 
900 	sfp_hwmon_calibrate_bias(sfp, value);
901 
902 	return 0;
903 }
904 
905 static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
906 {
907 	int err;
908 
909 	err = sfp_hwmon_read_sensor(sfp, reg, value);
910 	if (err < 0)
911 		return err;
912 
913 	sfp_hwmon_calibrate_tx_power(sfp, value);
914 
915 	return 0;
916 }
917 
918 static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
919 {
920 	int err;
921 
922 	err = sfp_hwmon_read_sensor(sfp, reg, value);
923 	if (err < 0)
924 		return err;
925 
926 	sfp_hwmon_to_rx_power(value);
927 
928 	return 0;
929 }
930 
931 static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
932 {
933 	u8 status;
934 	int err;
935 
936 	switch (attr) {
937 	case hwmon_temp_input:
938 		return sfp_hwmon_read_temp(sfp, SFP_TEMP, value);
939 
940 	case hwmon_temp_lcrit:
941 		*value = be16_to_cpu(sfp->diag.temp_low_alarm);
942 		sfp_hwmon_calibrate_temp(sfp, value);
943 		return 0;
944 
945 	case hwmon_temp_min:
946 		*value = be16_to_cpu(sfp->diag.temp_low_warn);
947 		sfp_hwmon_calibrate_temp(sfp, value);
948 		return 0;
949 	case hwmon_temp_max:
950 		*value = be16_to_cpu(sfp->diag.temp_high_warn);
951 		sfp_hwmon_calibrate_temp(sfp, value);
952 		return 0;
953 
954 	case hwmon_temp_crit:
955 		*value = be16_to_cpu(sfp->diag.temp_high_alarm);
956 		sfp_hwmon_calibrate_temp(sfp, value);
957 		return 0;
958 
959 	case hwmon_temp_lcrit_alarm:
960 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
961 		if (err < 0)
962 			return err;
963 
964 		*value = !!(status & SFP_ALARM0_TEMP_LOW);
965 		return 0;
966 
967 	case hwmon_temp_min_alarm:
968 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
969 		if (err < 0)
970 			return err;
971 
972 		*value = !!(status & SFP_WARN0_TEMP_LOW);
973 		return 0;
974 
975 	case hwmon_temp_max_alarm:
976 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
977 		if (err < 0)
978 			return err;
979 
980 		*value = !!(status & SFP_WARN0_TEMP_HIGH);
981 		return 0;
982 
983 	case hwmon_temp_crit_alarm:
984 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
985 		if (err < 0)
986 			return err;
987 
988 		*value = !!(status & SFP_ALARM0_TEMP_HIGH);
989 		return 0;
990 	default:
991 		return -EOPNOTSUPP;
992 	}
993 
994 	return -EOPNOTSUPP;
995 }
996 
997 static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
998 {
999 	u8 status;
1000 	int err;
1001 
1002 	switch (attr) {
1003 	case hwmon_in_input:
1004 		return sfp_hwmon_read_vcc(sfp, SFP_VCC, value);
1005 
1006 	case hwmon_in_lcrit:
1007 		*value = be16_to_cpu(sfp->diag.volt_low_alarm);
1008 		sfp_hwmon_calibrate_vcc(sfp, value);
1009 		return 0;
1010 
1011 	case hwmon_in_min:
1012 		*value = be16_to_cpu(sfp->diag.volt_low_warn);
1013 		sfp_hwmon_calibrate_vcc(sfp, value);
1014 		return 0;
1015 
1016 	case hwmon_in_max:
1017 		*value = be16_to_cpu(sfp->diag.volt_high_warn);
1018 		sfp_hwmon_calibrate_vcc(sfp, value);
1019 		return 0;
1020 
1021 	case hwmon_in_crit:
1022 		*value = be16_to_cpu(sfp->diag.volt_high_alarm);
1023 		sfp_hwmon_calibrate_vcc(sfp, value);
1024 		return 0;
1025 
1026 	case hwmon_in_lcrit_alarm:
1027 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1028 		if (err < 0)
1029 			return err;
1030 
1031 		*value = !!(status & SFP_ALARM0_VCC_LOW);
1032 		return 0;
1033 
1034 	case hwmon_in_min_alarm:
1035 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1036 		if (err < 0)
1037 			return err;
1038 
1039 		*value = !!(status & SFP_WARN0_VCC_LOW);
1040 		return 0;
1041 
1042 	case hwmon_in_max_alarm:
1043 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1044 		if (err < 0)
1045 			return err;
1046 
1047 		*value = !!(status & SFP_WARN0_VCC_HIGH);
1048 		return 0;
1049 
1050 	case hwmon_in_crit_alarm:
1051 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1052 		if (err < 0)
1053 			return err;
1054 
1055 		*value = !!(status & SFP_ALARM0_VCC_HIGH);
1056 		return 0;
1057 	default:
1058 		return -EOPNOTSUPP;
1059 	}
1060 
1061 	return -EOPNOTSUPP;
1062 }
1063 
1064 static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
1065 {
1066 	u8 status;
1067 	int err;
1068 
1069 	switch (attr) {
1070 	case hwmon_curr_input:
1071 		return sfp_hwmon_read_bias(sfp, SFP_TX_BIAS, value);
1072 
1073 	case hwmon_curr_lcrit:
1074 		*value = be16_to_cpu(sfp->diag.bias_low_alarm);
1075 		sfp_hwmon_calibrate_bias(sfp, value);
1076 		return 0;
1077 
1078 	case hwmon_curr_min:
1079 		*value = be16_to_cpu(sfp->diag.bias_low_warn);
1080 		sfp_hwmon_calibrate_bias(sfp, value);
1081 		return 0;
1082 
1083 	case hwmon_curr_max:
1084 		*value = be16_to_cpu(sfp->diag.bias_high_warn);
1085 		sfp_hwmon_calibrate_bias(sfp, value);
1086 		return 0;
1087 
1088 	case hwmon_curr_crit:
1089 		*value = be16_to_cpu(sfp->diag.bias_high_alarm);
1090 		sfp_hwmon_calibrate_bias(sfp, value);
1091 		return 0;
1092 
1093 	case hwmon_curr_lcrit_alarm:
1094 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1095 		if (err < 0)
1096 			return err;
1097 
1098 		*value = !!(status & SFP_ALARM0_TX_BIAS_LOW);
1099 		return 0;
1100 
1101 	case hwmon_curr_min_alarm:
1102 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1103 		if (err < 0)
1104 			return err;
1105 
1106 		*value = !!(status & SFP_WARN0_TX_BIAS_LOW);
1107 		return 0;
1108 
1109 	case hwmon_curr_max_alarm:
1110 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1111 		if (err < 0)
1112 			return err;
1113 
1114 		*value = !!(status & SFP_WARN0_TX_BIAS_HIGH);
1115 		return 0;
1116 
1117 	case hwmon_curr_crit_alarm:
1118 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1119 		if (err < 0)
1120 			return err;
1121 
1122 		*value = !!(status & SFP_ALARM0_TX_BIAS_HIGH);
1123 		return 0;
1124 	default:
1125 		return -EOPNOTSUPP;
1126 	}
1127 
1128 	return -EOPNOTSUPP;
1129 }
1130 
1131 static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
1132 {
1133 	u8 status;
1134 	int err;
1135 
1136 	switch (attr) {
1137 	case hwmon_power_input:
1138 		return sfp_hwmon_read_tx_power(sfp, SFP_TX_POWER, value);
1139 
1140 	case hwmon_power_lcrit:
1141 		*value = be16_to_cpu(sfp->diag.txpwr_low_alarm);
1142 		sfp_hwmon_calibrate_tx_power(sfp, value);
1143 		return 0;
1144 
1145 	case hwmon_power_min:
1146 		*value = be16_to_cpu(sfp->diag.txpwr_low_warn);
1147 		sfp_hwmon_calibrate_tx_power(sfp, value);
1148 		return 0;
1149 
1150 	case hwmon_power_max:
1151 		*value = be16_to_cpu(sfp->diag.txpwr_high_warn);
1152 		sfp_hwmon_calibrate_tx_power(sfp, value);
1153 		return 0;
1154 
1155 	case hwmon_power_crit:
1156 		*value = be16_to_cpu(sfp->diag.txpwr_high_alarm);
1157 		sfp_hwmon_calibrate_tx_power(sfp, value);
1158 		return 0;
1159 
1160 	case hwmon_power_lcrit_alarm:
1161 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1162 		if (err < 0)
1163 			return err;
1164 
1165 		*value = !!(status & SFP_ALARM0_TXPWR_LOW);
1166 		return 0;
1167 
1168 	case hwmon_power_min_alarm:
1169 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1170 		if (err < 0)
1171 			return err;
1172 
1173 		*value = !!(status & SFP_WARN0_TXPWR_LOW);
1174 		return 0;
1175 
1176 	case hwmon_power_max_alarm:
1177 		err = sfp_read(sfp, true, SFP_WARN0, &status, sizeof(status));
1178 		if (err < 0)
1179 			return err;
1180 
1181 		*value = !!(status & SFP_WARN0_TXPWR_HIGH);
1182 		return 0;
1183 
1184 	case hwmon_power_crit_alarm:
1185 		err = sfp_read(sfp, true, SFP_ALARM0, &status, sizeof(status));
1186 		if (err < 0)
1187 			return err;
1188 
1189 		*value = !!(status & SFP_ALARM0_TXPWR_HIGH);
1190 		return 0;
1191 	default:
1192 		return -EOPNOTSUPP;
1193 	}
1194 
1195 	return -EOPNOTSUPP;
1196 }
1197 
1198 static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
1199 {
1200 	u8 status;
1201 	int err;
1202 
1203 	switch (attr) {
1204 	case hwmon_power_input:
1205 		return sfp_hwmon_read_rx_power(sfp, SFP_RX_POWER, value);
1206 
1207 	case hwmon_power_lcrit:
1208 		*value = be16_to_cpu(sfp->diag.rxpwr_low_alarm);
1209 		sfp_hwmon_to_rx_power(value);
1210 		return 0;
1211 
1212 	case hwmon_power_min:
1213 		*value = be16_to_cpu(sfp->diag.rxpwr_low_warn);
1214 		sfp_hwmon_to_rx_power(value);
1215 		return 0;
1216 
1217 	case hwmon_power_max:
1218 		*value = be16_to_cpu(sfp->diag.rxpwr_high_warn);
1219 		sfp_hwmon_to_rx_power(value);
1220 		return 0;
1221 
1222 	case hwmon_power_crit:
1223 		*value = be16_to_cpu(sfp->diag.rxpwr_high_alarm);
1224 		sfp_hwmon_to_rx_power(value);
1225 		return 0;
1226 
1227 	case hwmon_power_lcrit_alarm:
1228 		err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1229 		if (err < 0)
1230 			return err;
1231 
1232 		*value = !!(status & SFP_ALARM1_RXPWR_LOW);
1233 		return 0;
1234 
1235 	case hwmon_power_min_alarm:
1236 		err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1237 		if (err < 0)
1238 			return err;
1239 
1240 		*value = !!(status & SFP_WARN1_RXPWR_LOW);
1241 		return 0;
1242 
1243 	case hwmon_power_max_alarm:
1244 		err = sfp_read(sfp, true, SFP_WARN1, &status, sizeof(status));
1245 		if (err < 0)
1246 			return err;
1247 
1248 		*value = !!(status & SFP_WARN1_RXPWR_HIGH);
1249 		return 0;
1250 
1251 	case hwmon_power_crit_alarm:
1252 		err = sfp_read(sfp, true, SFP_ALARM1, &status, sizeof(status));
1253 		if (err < 0)
1254 			return err;
1255 
1256 		*value = !!(status & SFP_ALARM1_RXPWR_HIGH);
1257 		return 0;
1258 	default:
1259 		return -EOPNOTSUPP;
1260 	}
1261 
1262 	return -EOPNOTSUPP;
1263 }
1264 
1265 static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
1266 			  u32 attr, int channel, long *value)
1267 {
1268 	struct sfp *sfp = dev_get_drvdata(dev);
1269 
1270 	switch (type) {
1271 	case hwmon_temp:
1272 		return sfp_hwmon_temp(sfp, attr, value);
1273 	case hwmon_in:
1274 		return sfp_hwmon_vcc(sfp, attr, value);
1275 	case hwmon_curr:
1276 		return sfp_hwmon_bias(sfp, attr, value);
1277 	case hwmon_power:
1278 		switch (channel) {
1279 		case 0:
1280 			return sfp_hwmon_tx_power(sfp, attr, value);
1281 		case 1:
1282 			return sfp_hwmon_rx_power(sfp, attr, value);
1283 		default:
1284 			return -EOPNOTSUPP;
1285 		}
1286 	default:
1287 		return -EOPNOTSUPP;
1288 	}
1289 }
1290 
1291 static const char *const sfp_hwmon_power_labels[] = {
1292 	"TX_power",
1293 	"RX_power",
1294 };
1295 
1296 static int sfp_hwmon_read_string(struct device *dev,
1297 				 enum hwmon_sensor_types type,
1298 				 u32 attr, int channel, const char **str)
1299 {
1300 	switch (type) {
1301 	case hwmon_curr:
1302 		switch (attr) {
1303 		case hwmon_curr_label:
1304 			*str = "bias";
1305 			return 0;
1306 		default:
1307 			return -EOPNOTSUPP;
1308 		}
1309 		break;
1310 	case hwmon_temp:
1311 		switch (attr) {
1312 		case hwmon_temp_label:
1313 			*str = "temperature";
1314 			return 0;
1315 		default:
1316 			return -EOPNOTSUPP;
1317 		}
1318 		break;
1319 	case hwmon_in:
1320 		switch (attr) {
1321 		case hwmon_in_label:
1322 			*str = "VCC";
1323 			return 0;
1324 		default:
1325 			return -EOPNOTSUPP;
1326 		}
1327 		break;
1328 	case hwmon_power:
1329 		switch (attr) {
1330 		case hwmon_power_label:
1331 			*str = sfp_hwmon_power_labels[channel];
1332 			return 0;
1333 		default:
1334 			return -EOPNOTSUPP;
1335 		}
1336 		break;
1337 	default:
1338 		return -EOPNOTSUPP;
1339 	}
1340 
1341 	return -EOPNOTSUPP;
1342 }
1343 
1344 static const struct hwmon_ops sfp_hwmon_ops = {
1345 	.is_visible = sfp_hwmon_is_visible,
1346 	.read = sfp_hwmon_read,
1347 	.read_string = sfp_hwmon_read_string,
1348 };
1349 
1350 static const struct hwmon_channel_info *sfp_hwmon_info[] = {
1351 	HWMON_CHANNEL_INFO(chip,
1352 			   HWMON_C_REGISTER_TZ),
1353 	HWMON_CHANNEL_INFO(in,
1354 			   HWMON_I_INPUT |
1355 			   HWMON_I_MAX | HWMON_I_MIN |
1356 			   HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM |
1357 			   HWMON_I_CRIT | HWMON_I_LCRIT |
1358 			   HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM |
1359 			   HWMON_I_LABEL),
1360 	HWMON_CHANNEL_INFO(temp,
1361 			   HWMON_T_INPUT |
1362 			   HWMON_T_MAX | HWMON_T_MIN |
1363 			   HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM |
1364 			   HWMON_T_CRIT | HWMON_T_LCRIT |
1365 			   HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM |
1366 			   HWMON_T_LABEL),
1367 	HWMON_CHANNEL_INFO(curr,
1368 			   HWMON_C_INPUT |
1369 			   HWMON_C_MAX | HWMON_C_MIN |
1370 			   HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM |
1371 			   HWMON_C_CRIT | HWMON_C_LCRIT |
1372 			   HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM |
1373 			   HWMON_C_LABEL),
1374 	HWMON_CHANNEL_INFO(power,
1375 			   /* Transmit power */
1376 			   HWMON_P_INPUT |
1377 			   HWMON_P_MAX | HWMON_P_MIN |
1378 			   HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1379 			   HWMON_P_CRIT | HWMON_P_LCRIT |
1380 			   HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1381 			   HWMON_P_LABEL,
1382 			   /* Receive power */
1383 			   HWMON_P_INPUT |
1384 			   HWMON_P_MAX | HWMON_P_MIN |
1385 			   HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1386 			   HWMON_P_CRIT | HWMON_P_LCRIT |
1387 			   HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1388 			   HWMON_P_LABEL),
1389 	NULL,
1390 };
1391 
1392 static const struct hwmon_chip_info sfp_hwmon_chip_info = {
1393 	.ops = &sfp_hwmon_ops,
1394 	.info = sfp_hwmon_info,
1395 };
1396 
1397 static void sfp_hwmon_probe(struct work_struct *work)
1398 {
1399 	struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
1400 	int err;
1401 
1402 	/* hwmon interface needs to access 16bit registers in atomic way to
1403 	 * guarantee coherency of the diagnostic monitoring data. If it is not
1404 	 * possible to guarantee coherency because EEPROM is broken in such way
1405 	 * that does not support atomic 16bit read operation then we have to
1406 	 * skip registration of hwmon device.
1407 	 */
1408 	if (sfp->i2c_block_size < 2) {
1409 		dev_info(sfp->dev,
1410 			 "skipping hwmon device registration due to broken EEPROM\n");
1411 		dev_info(sfp->dev,
1412 			 "diagnostic EEPROM area cannot be read atomically to guarantee data coherency\n");
1413 		return;
1414 	}
1415 
1416 	err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1417 	if (err < 0) {
1418 		if (sfp->hwmon_tries--) {
1419 			mod_delayed_work(system_wq, &sfp->hwmon_probe,
1420 					 T_PROBE_RETRY_SLOW);
1421 		} else {
1422 			dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
1423 				 ERR_PTR(err));
1424 		}
1425 		return;
1426 	}
1427 
1428 	sfp->hwmon_name = hwmon_sanitize_name(dev_name(sfp->dev));
1429 	if (IS_ERR(sfp->hwmon_name)) {
1430 		dev_err(sfp->dev, "out of memory for hwmon name\n");
1431 		return;
1432 	}
1433 
1434 	sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1435 							 sfp->hwmon_name, sfp,
1436 							 &sfp_hwmon_chip_info,
1437 							 NULL);
1438 	if (IS_ERR(sfp->hwmon_dev))
1439 		dev_err(sfp->dev, "failed to register hwmon device: %ld\n",
1440 			PTR_ERR(sfp->hwmon_dev));
1441 }
1442 
1443 static int sfp_hwmon_insert(struct sfp *sfp)
1444 {
1445 	if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE)
1446 		return 0;
1447 
1448 	if (!(sfp->id.ext.diagmon & SFP_DIAGMON_DDM))
1449 		return 0;
1450 
1451 	if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
1452 		/* This driver in general does not support address
1453 		 * change.
1454 		 */
1455 		return 0;
1456 
1457 	mod_delayed_work(system_wq, &sfp->hwmon_probe, 1);
1458 	sfp->hwmon_tries = R_PROBE_RETRY_SLOW;
1459 
1460 	return 0;
1461 }
1462 
1463 static void sfp_hwmon_remove(struct sfp *sfp)
1464 {
1465 	cancel_delayed_work_sync(&sfp->hwmon_probe);
1466 	if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
1467 		hwmon_device_unregister(sfp->hwmon_dev);
1468 		sfp->hwmon_dev = NULL;
1469 		kfree(sfp->hwmon_name);
1470 	}
1471 }
1472 
1473 static int sfp_hwmon_init(struct sfp *sfp)
1474 {
1475 	INIT_DELAYED_WORK(&sfp->hwmon_probe, sfp_hwmon_probe);
1476 
1477 	return 0;
1478 }
1479 
1480 static void sfp_hwmon_exit(struct sfp *sfp)
1481 {
1482 	cancel_delayed_work_sync(&sfp->hwmon_probe);
1483 }
1484 #else
1485 static int sfp_hwmon_insert(struct sfp *sfp)
1486 {
1487 	return 0;
1488 }
1489 
1490 static void sfp_hwmon_remove(struct sfp *sfp)
1491 {
1492 }
1493 
1494 static int sfp_hwmon_init(struct sfp *sfp)
1495 {
1496 	return 0;
1497 }
1498 
1499 static void sfp_hwmon_exit(struct sfp *sfp)
1500 {
1501 }
1502 #endif
1503 
1504 /* Helpers */
1505 static void sfp_module_tx_disable(struct sfp *sfp)
1506 {
1507 	dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1508 		sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 1);
1509 	sfp->state |= SFP_F_TX_DISABLE;
1510 	sfp_set_state(sfp, sfp->state);
1511 }
1512 
1513 static void sfp_module_tx_enable(struct sfp *sfp)
1514 {
1515 	dev_dbg(sfp->dev, "tx disable %u -> %u\n",
1516 		sfp->state & SFP_F_TX_DISABLE ? 1 : 0, 0);
1517 	sfp->state &= ~SFP_F_TX_DISABLE;
1518 	sfp_set_state(sfp, sfp->state);
1519 }
1520 
1521 #if IS_ENABLED(CONFIG_DEBUG_FS)
1522 static int sfp_debug_state_show(struct seq_file *s, void *data)
1523 {
1524 	struct sfp *sfp = s->private;
1525 
1526 	seq_printf(s, "Module state: %s\n",
1527 		   mod_state_to_str(sfp->sm_mod_state));
1528 	seq_printf(s, "Module probe attempts: %d %d\n",
1529 		   R_PROBE_RETRY_INIT - sfp->sm_mod_tries_init,
1530 		   R_PROBE_RETRY_SLOW - sfp->sm_mod_tries);
1531 	seq_printf(s, "Device state: %s\n",
1532 		   dev_state_to_str(sfp->sm_dev_state));
1533 	seq_printf(s, "Main state: %s\n",
1534 		   sm_state_to_str(sfp->sm_state));
1535 	seq_printf(s, "Fault recovery remaining retries: %d\n",
1536 		   sfp->sm_fault_retries);
1537 	seq_printf(s, "PHY probe remaining retries: %d\n",
1538 		   sfp->sm_phy_retries);
1539 	seq_printf(s, "moddef0: %d\n", !!(sfp->state & SFP_F_PRESENT));
1540 	seq_printf(s, "rx_los: %d\n", !!(sfp->state & SFP_F_LOS));
1541 	seq_printf(s, "tx_fault: %d\n", !!(sfp->state & SFP_F_TX_FAULT));
1542 	seq_printf(s, "tx_disable: %d\n", !!(sfp->state & SFP_F_TX_DISABLE));
1543 	return 0;
1544 }
1545 DEFINE_SHOW_ATTRIBUTE(sfp_debug_state);
1546 
1547 static void sfp_debugfs_init(struct sfp *sfp)
1548 {
1549 	sfp->debugfs_dir = debugfs_create_dir(dev_name(sfp->dev), NULL);
1550 
1551 	debugfs_create_file("state", 0600, sfp->debugfs_dir, sfp,
1552 			    &sfp_debug_state_fops);
1553 }
1554 
1555 static void sfp_debugfs_exit(struct sfp *sfp)
1556 {
1557 	debugfs_remove_recursive(sfp->debugfs_dir);
1558 }
1559 #else
1560 static void sfp_debugfs_init(struct sfp *sfp)
1561 {
1562 }
1563 
1564 static void sfp_debugfs_exit(struct sfp *sfp)
1565 {
1566 }
1567 #endif
1568 
1569 static void sfp_module_tx_fault_reset(struct sfp *sfp)
1570 {
1571 	unsigned int state = sfp->state;
1572 
1573 	if (state & SFP_F_TX_DISABLE)
1574 		return;
1575 
1576 	sfp_set_state(sfp, state | SFP_F_TX_DISABLE);
1577 
1578 	udelay(T_RESET_US);
1579 
1580 	sfp_set_state(sfp, state);
1581 }
1582 
1583 /* SFP state machine */
1584 static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
1585 {
1586 	if (timeout)
1587 		mod_delayed_work(system_power_efficient_wq, &sfp->timeout,
1588 				 timeout);
1589 	else
1590 		cancel_delayed_work(&sfp->timeout);
1591 }
1592 
1593 static void sfp_sm_next(struct sfp *sfp, unsigned int state,
1594 			unsigned int timeout)
1595 {
1596 	sfp->sm_state = state;
1597 	sfp_sm_set_timer(sfp, timeout);
1598 }
1599 
1600 static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
1601 			    unsigned int timeout)
1602 {
1603 	sfp->sm_mod_state = state;
1604 	sfp_sm_set_timer(sfp, timeout);
1605 }
1606 
1607 static void sfp_sm_phy_detach(struct sfp *sfp)
1608 {
1609 	sfp_remove_phy(sfp->sfp_bus);
1610 	phy_device_remove(sfp->mod_phy);
1611 	phy_device_free(sfp->mod_phy);
1612 	sfp->mod_phy = NULL;
1613 }
1614 
1615 static int sfp_sm_probe_phy(struct sfp *sfp, int addr, bool is_c45)
1616 {
1617 	struct phy_device *phy;
1618 	int err;
1619 
1620 	phy = get_phy_device(sfp->i2c_mii, addr, is_c45);
1621 	if (phy == ERR_PTR(-ENODEV))
1622 		return PTR_ERR(phy);
1623 	if (IS_ERR(phy)) {
1624 		dev_err(sfp->dev, "mdiobus scan returned %pe\n", phy);
1625 		return PTR_ERR(phy);
1626 	}
1627 
1628 	err = phy_device_register(phy);
1629 	if (err) {
1630 		phy_device_free(phy);
1631 		dev_err(sfp->dev, "phy_device_register failed: %pe\n",
1632 			ERR_PTR(err));
1633 		return err;
1634 	}
1635 
1636 	err = sfp_add_phy(sfp->sfp_bus, phy);
1637 	if (err) {
1638 		phy_device_remove(phy);
1639 		phy_device_free(phy);
1640 		dev_err(sfp->dev, "sfp_add_phy failed: %pe\n", ERR_PTR(err));
1641 		return err;
1642 	}
1643 
1644 	sfp->mod_phy = phy;
1645 
1646 	return 0;
1647 }
1648 
1649 static void sfp_sm_link_up(struct sfp *sfp)
1650 {
1651 	sfp_link_up(sfp->sfp_bus);
1652 	sfp_sm_next(sfp, SFP_S_LINK_UP, 0);
1653 }
1654 
1655 static void sfp_sm_link_down(struct sfp *sfp)
1656 {
1657 	sfp_link_down(sfp->sfp_bus);
1658 }
1659 
1660 static void sfp_sm_link_check_los(struct sfp *sfp)
1661 {
1662 	const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1663 	const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1664 	__be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1665 	bool los = false;
1666 
1667 	/* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1668 	 * are set, we assume that no LOS signal is available. If both are
1669 	 * set, we assume LOS is not implemented (and is meaningless.)
1670 	 */
1671 	if (los_options == los_inverted)
1672 		los = !(sfp->state & SFP_F_LOS);
1673 	else if (los_options == los_normal)
1674 		los = !!(sfp->state & SFP_F_LOS);
1675 
1676 	if (los)
1677 		sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1678 	else
1679 		sfp_sm_link_up(sfp);
1680 }
1681 
1682 static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
1683 {
1684 	const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1685 	const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1686 	__be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1687 
1688 	return (los_options == los_inverted && event == SFP_E_LOS_LOW) ||
1689 	       (los_options == los_normal && event == SFP_E_LOS_HIGH);
1690 }
1691 
1692 static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
1693 {
1694 	const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1695 	const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1696 	__be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1697 
1698 	return (los_options == los_inverted && event == SFP_E_LOS_HIGH) ||
1699 	       (los_options == los_normal && event == SFP_E_LOS_LOW);
1700 }
1701 
1702 static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
1703 {
1704 	if (sfp->sm_fault_retries && !--sfp->sm_fault_retries) {
1705 		dev_err(sfp->dev,
1706 			"module persistently indicates fault, disabling\n");
1707 		sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
1708 	} else {
1709 		if (warn)
1710 			dev_err(sfp->dev, "module transmit fault indicated\n");
1711 
1712 		sfp_sm_next(sfp, next_state, T_FAULT_RECOVER);
1713 	}
1714 }
1715 
1716 static int sfp_sm_add_mdio_bus(struct sfp *sfp)
1717 {
1718 	if (sfp->mdio_protocol != MDIO_I2C_NONE)
1719 		return sfp_i2c_mdiobus_create(sfp);
1720 
1721 	return 0;
1722 }
1723 
1724 /* Probe a SFP for a PHY device if the module supports copper - the PHY
1725  * normally sits at I2C bus address 0x56, and may either be a clause 22
1726  * or clause 45 PHY.
1727  *
1728  * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1729  * negotiation enabled, but some may be in 1000base-X - which is for the
1730  * PHY driver to determine.
1731  *
1732  * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1733  * mode according to the negotiated line speed.
1734  */
1735 static int sfp_sm_probe_for_phy(struct sfp *sfp)
1736 {
1737 	int err = 0;
1738 
1739 	switch (sfp->mdio_protocol) {
1740 	case MDIO_I2C_NONE:
1741 		break;
1742 
1743 	case MDIO_I2C_MARVELL_C22:
1744 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, false);
1745 		break;
1746 
1747 	case MDIO_I2C_C45:
1748 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR, true);
1749 		break;
1750 
1751 	case MDIO_I2C_ROLLBALL:
1752 		err = sfp_sm_probe_phy(sfp, SFP_PHY_ADDR_ROLLBALL, true);
1753 		break;
1754 	}
1755 
1756 	return err;
1757 }
1758 
1759 static int sfp_module_parse_power(struct sfp *sfp)
1760 {
1761 	u32 power_mW = 1000;
1762 	bool supports_a2;
1763 
1764 	if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1765 		power_mW = 1500;
1766 	if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1767 		power_mW = 2000;
1768 
1769 	supports_a2 = sfp->id.ext.sff8472_compliance !=
1770 				SFP_SFF8472_COMPLIANCE_NONE ||
1771 		      sfp->id.ext.diagmon & SFP_DIAGMON_DDM;
1772 
1773 	if (power_mW > sfp->max_power_mW) {
1774 		/* Module power specification exceeds the allowed maximum. */
1775 		if (!supports_a2) {
1776 			/* The module appears not to implement bus address
1777 			 * 0xa2, so assume that the module powers up in the
1778 			 * indicated mode.
1779 			 */
1780 			dev_err(sfp->dev,
1781 				"Host does not support %u.%uW modules\n",
1782 				power_mW / 1000, (power_mW / 100) % 10);
1783 			return -EINVAL;
1784 		} else {
1785 			dev_warn(sfp->dev,
1786 				 "Host does not support %u.%uW modules, module left in power mode 1\n",
1787 				 power_mW / 1000, (power_mW / 100) % 10);
1788 			return 0;
1789 		}
1790 	}
1791 
1792 	if (power_mW <= 1000) {
1793 		/* Modules below 1W do not require a power change sequence */
1794 		sfp->module_power_mW = power_mW;
1795 		return 0;
1796 	}
1797 
1798 	if (!supports_a2) {
1799 		/* The module power level is below the host maximum and the
1800 		 * module appears not to implement bus address 0xa2, so assume
1801 		 * that the module powers up in the indicated mode.
1802 		 */
1803 		return 0;
1804 	}
1805 
1806 	/* If the module requires a higher power mode, but also requires
1807 	 * an address change sequence, warn the user that the module may
1808 	 * not be functional.
1809 	 */
1810 	if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) {
1811 		dev_warn(sfp->dev,
1812 			 "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1813 			 power_mW / 1000, (power_mW / 100) % 10);
1814 		return 0;
1815 	}
1816 
1817 	sfp->module_power_mW = power_mW;
1818 
1819 	return 0;
1820 }
1821 
1822 static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
1823 {
1824 	u8 val;
1825 	int err;
1826 
1827 	err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1828 	if (err != sizeof(val)) {
1829 		dev_err(sfp->dev, "Failed to read EEPROM: %pe\n", ERR_PTR(err));
1830 		return -EAGAIN;
1831 	}
1832 
1833 	/* DM7052 reports as a high power module, responds to reads (with
1834 	 * all bytes 0xff) at 0x51 but does not accept writes.  In any case,
1835 	 * if the bit is already set, we're already in high power mode.
1836 	 */
1837 	if (!!(val & BIT(0)) == enable)
1838 		return 0;
1839 
1840 	if (enable)
1841 		val |= BIT(0);
1842 	else
1843 		val &= ~BIT(0);
1844 
1845 	err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
1846 	if (err != sizeof(val)) {
1847 		dev_err(sfp->dev, "Failed to write EEPROM: %pe\n",
1848 			ERR_PTR(err));
1849 		return -EAGAIN;
1850 	}
1851 
1852 	if (enable)
1853 		dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1854 			 sfp->module_power_mW / 1000,
1855 			 (sfp->module_power_mW / 100) % 10);
1856 
1857 	return 0;
1858 }
1859 
1860 /* GPON modules based on Realtek RTL8672 and RTL9601C chips (e.g. V-SOL
1861  * V2801F, CarlitoxxPro CPGOS03-0490, Ubiquiti U-Fiber Instant, ...) do
1862  * not support multibyte reads from the EEPROM. Each multi-byte read
1863  * operation returns just one byte of EEPROM followed by zeros. There is
1864  * no way to identify which modules are using Realtek RTL8672 and RTL9601C
1865  * chips. Moreover every OEM of V-SOL V2801F module puts its own vendor
1866  * name and vendor id into EEPROM, so there is even no way to detect if
1867  * module is V-SOL V2801F. Therefore check for those zeros in the read
1868  * data and then based on check switch to reading EEPROM to one byte
1869  * at a time.
1870  */
1871 static bool sfp_id_needs_byte_io(struct sfp *sfp, void *buf, size_t len)
1872 {
1873 	size_t i, block_size = sfp->i2c_block_size;
1874 
1875 	/* Already using byte IO */
1876 	if (block_size == 1)
1877 		return false;
1878 
1879 	for (i = 1; i < len; i += block_size) {
1880 		if (memchr_inv(buf + i, '\0', min(block_size - 1, len - i)))
1881 			return false;
1882 	}
1883 	return true;
1884 }
1885 
1886 static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id)
1887 {
1888 	u8 check;
1889 	int err;
1890 
1891 	if (id->base.phys_id != SFF8024_ID_SFF_8472 ||
1892 	    id->base.phys_ext_id != SFP_PHYS_EXT_ID_SFP ||
1893 	    id->base.connector != SFF8024_CONNECTOR_LC) {
1894 		dev_warn(sfp->dev, "Rewriting fiber module EEPROM with corrected values\n");
1895 		id->base.phys_id = SFF8024_ID_SFF_8472;
1896 		id->base.phys_ext_id = SFP_PHYS_EXT_ID_SFP;
1897 		id->base.connector = SFF8024_CONNECTOR_LC;
1898 		err = sfp_write(sfp, false, SFP_PHYS_ID, &id->base, 3);
1899 		if (err != 3) {
1900 			dev_err(sfp->dev,
1901 				"Failed to rewrite module EEPROM: %pe\n",
1902 				ERR_PTR(err));
1903 			return err;
1904 		}
1905 
1906 		/* Cotsworks modules have been found to require a delay between write operations. */
1907 		mdelay(50);
1908 
1909 		/* Update base structure checksum */
1910 		check = sfp_check(&id->base, sizeof(id->base) - 1);
1911 		err = sfp_write(sfp, false, SFP_CC_BASE, &check, 1);
1912 		if (err != 1) {
1913 			dev_err(sfp->dev,
1914 				"Failed to update base structure checksum in fiber module EEPROM: %pe\n",
1915 				ERR_PTR(err));
1916 			return err;
1917 		}
1918 	}
1919 	return 0;
1920 }
1921 
1922 static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
1923 {
1924 	/* SFP module inserted - read I2C data */
1925 	struct sfp_eeprom_id id;
1926 	bool cotsworks_sfbg;
1927 	bool cotsworks;
1928 	u8 check;
1929 	int ret;
1930 
1931 	/* Some SFP modules and also some Linux I2C drivers do not like reads
1932 	 * longer than 16 bytes, so read the EEPROM in chunks of 16 bytes at
1933 	 * a time.
1934 	 */
1935 	sfp->i2c_block_size = 16;
1936 
1937 	ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
1938 	if (ret < 0) {
1939 		if (report)
1940 			dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
1941 				ERR_PTR(ret));
1942 		return -EAGAIN;
1943 	}
1944 
1945 	if (ret != sizeof(id.base)) {
1946 		dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
1947 		return -EAGAIN;
1948 	}
1949 
1950 	/* Some SFP modules (e.g. Nokia 3FE46541AA) lock up if read from
1951 	 * address 0x51 is just one byte at a time. Also SFF-8472 requires
1952 	 * that EEPROM supports atomic 16bit read operation for diagnostic
1953 	 * fields, so do not switch to one byte reading at a time unless it
1954 	 * is really required and we have no other option.
1955 	 */
1956 	if (sfp_id_needs_byte_io(sfp, &id.base, sizeof(id.base))) {
1957 		dev_info(sfp->dev,
1958 			 "Detected broken RTL8672/RTL9601C emulated EEPROM\n");
1959 		dev_info(sfp->dev,
1960 			 "Switching to reading EEPROM to one byte at a time\n");
1961 		sfp->i2c_block_size = 1;
1962 
1963 		ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
1964 		if (ret < 0) {
1965 			if (report)
1966 				dev_err(sfp->dev,
1967 					"failed to read EEPROM: %pe\n",
1968 					ERR_PTR(ret));
1969 			return -EAGAIN;
1970 		}
1971 
1972 		if (ret != sizeof(id.base)) {
1973 			dev_err(sfp->dev, "EEPROM short read: %pe\n",
1974 				ERR_PTR(ret));
1975 			return -EAGAIN;
1976 		}
1977 	}
1978 
1979 	/* Cotsworks do not seem to update the checksums when they
1980 	 * do the final programming with the final module part number,
1981 	 * serial number and date code.
1982 	 */
1983 	cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS       ", 16);
1984 	cotsworks_sfbg = !memcmp(id.base.vendor_pn, "SFBG", 4);
1985 
1986 	/* Cotsworks SFF module EEPROM do not always have valid phys_id,
1987 	 * phys_ext_id, and connector bytes.  Rewrite SFF EEPROM bytes if
1988 	 * Cotsworks PN matches and bytes are not correct.
1989 	 */
1990 	if (cotsworks && cotsworks_sfbg) {
1991 		ret = sfp_cotsworks_fixup_check(sfp, &id);
1992 		if (ret < 0)
1993 			return ret;
1994 	}
1995 
1996 	/* Validate the checksum over the base structure */
1997 	check = sfp_check(&id.base, sizeof(id.base) - 1);
1998 	if (check != id.base.cc_base) {
1999 		if (cotsworks) {
2000 			dev_warn(sfp->dev,
2001 				 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
2002 				 check, id.base.cc_base);
2003 		} else {
2004 			dev_err(sfp->dev,
2005 				"EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
2006 				check, id.base.cc_base);
2007 			print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
2008 				       16, 1, &id, sizeof(id), true);
2009 			return -EINVAL;
2010 		}
2011 	}
2012 
2013 	ret = sfp_read(sfp, false, SFP_CC_BASE + 1, &id.ext, sizeof(id.ext));
2014 	if (ret < 0) {
2015 		if (report)
2016 			dev_err(sfp->dev, "failed to read EEPROM: %pe\n",
2017 				ERR_PTR(ret));
2018 		return -EAGAIN;
2019 	}
2020 
2021 	if (ret != sizeof(id.ext)) {
2022 		dev_err(sfp->dev, "EEPROM short read: %pe\n", ERR_PTR(ret));
2023 		return -EAGAIN;
2024 	}
2025 
2026 	check = sfp_check(&id.ext, sizeof(id.ext) - 1);
2027 	if (check != id.ext.cc_ext) {
2028 		if (cotsworks) {
2029 			dev_warn(sfp->dev,
2030 				 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
2031 				 check, id.ext.cc_ext);
2032 		} else {
2033 			dev_err(sfp->dev,
2034 				"EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
2035 				check, id.ext.cc_ext);
2036 			print_hex_dump(KERN_ERR, "sfp EE: ", DUMP_PREFIX_OFFSET,
2037 				       16, 1, &id, sizeof(id), true);
2038 			memset(&id.ext, 0, sizeof(id.ext));
2039 		}
2040 	}
2041 
2042 	sfp->id = id;
2043 
2044 	dev_info(sfp->dev, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
2045 		 (int)sizeof(id.base.vendor_name), id.base.vendor_name,
2046 		 (int)sizeof(id.base.vendor_pn), id.base.vendor_pn,
2047 		 (int)sizeof(id.base.vendor_rev), id.base.vendor_rev,
2048 		 (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
2049 		 (int)sizeof(id.ext.datecode), id.ext.datecode);
2050 
2051 	/* Check whether we support this module */
2052 	if (!sfp->type->module_supported(&id)) {
2053 		dev_err(sfp->dev,
2054 			"module is not supported - phys id 0x%02x 0x%02x\n",
2055 			sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
2056 		return -EINVAL;
2057 	}
2058 
2059 	/* If the module requires address swap mode, warn about it */
2060 	if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)
2061 		dev_warn(sfp->dev,
2062 			 "module address swap to access page 0xA2 is not supported.\n");
2063 
2064 	/* Parse the module power requirement */
2065 	ret = sfp_module_parse_power(sfp);
2066 	if (ret < 0)
2067 		return ret;
2068 
2069 	/* Initialise state bits to use from hardware */
2070 	sfp->state_hw_mask = SFP_F_PRESENT;
2071 	if (sfp->gpio[GPIO_TX_DISABLE])
2072 		sfp->state_hw_mask |= SFP_F_TX_DISABLE;
2073 	if (sfp->gpio[GPIO_TX_FAULT])
2074 		sfp->state_hw_mask |= SFP_F_TX_FAULT;
2075 	if (sfp->gpio[GPIO_LOS])
2076 		sfp->state_hw_mask |= SFP_F_LOS;
2077 
2078 	sfp->module_t_start_up = T_START_UP;
2079 	sfp->module_t_wait = T_WAIT;
2080 
2081 	sfp->tx_fault_ignore = false;
2082 
2083 	if (sfp->id.base.extended_cc == SFF8024_ECC_10GBASE_T_SFI ||
2084 	    sfp->id.base.extended_cc == SFF8024_ECC_10GBASE_T_SR ||
2085 	    sfp->id.base.extended_cc == SFF8024_ECC_5GBASE_T ||
2086 	    sfp->id.base.extended_cc == SFF8024_ECC_2_5GBASE_T)
2087 		sfp->mdio_protocol = MDIO_I2C_C45;
2088 	else if (sfp->id.base.e1000_base_t)
2089 		sfp->mdio_protocol = MDIO_I2C_MARVELL_C22;
2090 	else
2091 		sfp->mdio_protocol = MDIO_I2C_NONE;
2092 
2093 	sfp->quirk = sfp_lookup_quirk(&id);
2094 	if (sfp->quirk && sfp->quirk->fixup)
2095 		sfp->quirk->fixup(sfp);
2096 
2097 	return 0;
2098 }
2099 
2100 static void sfp_sm_mod_remove(struct sfp *sfp)
2101 {
2102 	if (sfp->sm_mod_state > SFP_MOD_WAITDEV)
2103 		sfp_module_remove(sfp->sfp_bus);
2104 
2105 	sfp_hwmon_remove(sfp);
2106 
2107 	memset(&sfp->id, 0, sizeof(sfp->id));
2108 	sfp->module_power_mW = 0;
2109 
2110 	dev_info(sfp->dev, "module removed\n");
2111 }
2112 
2113 /* This state machine tracks the upstream's state */
2114 static void sfp_sm_device(struct sfp *sfp, unsigned int event)
2115 {
2116 	switch (sfp->sm_dev_state) {
2117 	default:
2118 		if (event == SFP_E_DEV_ATTACH)
2119 			sfp->sm_dev_state = SFP_DEV_DOWN;
2120 		break;
2121 
2122 	case SFP_DEV_DOWN:
2123 		if (event == SFP_E_DEV_DETACH)
2124 			sfp->sm_dev_state = SFP_DEV_DETACHED;
2125 		else if (event == SFP_E_DEV_UP)
2126 			sfp->sm_dev_state = SFP_DEV_UP;
2127 		break;
2128 
2129 	case SFP_DEV_UP:
2130 		if (event == SFP_E_DEV_DETACH)
2131 			sfp->sm_dev_state = SFP_DEV_DETACHED;
2132 		else if (event == SFP_E_DEV_DOWN)
2133 			sfp->sm_dev_state = SFP_DEV_DOWN;
2134 		break;
2135 	}
2136 }
2137 
2138 /* This state machine tracks the insert/remove state of the module, probes
2139  * the on-board EEPROM, and sets up the power level.
2140  */
2141 static void sfp_sm_module(struct sfp *sfp, unsigned int event)
2142 {
2143 	int err;
2144 
2145 	/* Handle remove event globally, it resets this state machine */
2146 	if (event == SFP_E_REMOVE) {
2147 		if (sfp->sm_mod_state > SFP_MOD_PROBE)
2148 			sfp_sm_mod_remove(sfp);
2149 		sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0);
2150 		return;
2151 	}
2152 
2153 	/* Handle device detach globally */
2154 	if (sfp->sm_dev_state < SFP_DEV_DOWN &&
2155 	    sfp->sm_mod_state > SFP_MOD_WAITDEV) {
2156 		if (sfp->module_power_mW > 1000 &&
2157 		    sfp->sm_mod_state > SFP_MOD_HPOWER)
2158 			sfp_sm_mod_hpower(sfp, false);
2159 		sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2160 		return;
2161 	}
2162 
2163 	switch (sfp->sm_mod_state) {
2164 	default:
2165 		if (event == SFP_E_INSERT) {
2166 			sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL);
2167 			sfp->sm_mod_tries_init = R_PROBE_RETRY_INIT;
2168 			sfp->sm_mod_tries = R_PROBE_RETRY_SLOW;
2169 		}
2170 		break;
2171 
2172 	case SFP_MOD_PROBE:
2173 		/* Wait for T_PROBE_INIT to time out */
2174 		if (event != SFP_E_TIMEOUT)
2175 			break;
2176 
2177 		err = sfp_sm_mod_probe(sfp, sfp->sm_mod_tries == 1);
2178 		if (err == -EAGAIN) {
2179 			if (sfp->sm_mod_tries_init &&
2180 			   --sfp->sm_mod_tries_init) {
2181 				sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2182 				break;
2183 			} else if (sfp->sm_mod_tries && --sfp->sm_mod_tries) {
2184 				if (sfp->sm_mod_tries == R_PROBE_RETRY_SLOW - 1)
2185 					dev_warn(sfp->dev,
2186 						 "please wait, module slow to respond\n");
2187 				sfp_sm_set_timer(sfp, T_PROBE_RETRY_SLOW);
2188 				break;
2189 			}
2190 		}
2191 		if (err < 0) {
2192 			sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2193 			break;
2194 		}
2195 
2196 		err = sfp_hwmon_insert(sfp);
2197 		if (err)
2198 			dev_warn(sfp->dev, "hwmon probe failed: %pe\n",
2199 				 ERR_PTR(err));
2200 
2201 		sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2202 		fallthrough;
2203 	case SFP_MOD_WAITDEV:
2204 		/* Ensure that the device is attached before proceeding */
2205 		if (sfp->sm_dev_state < SFP_DEV_DOWN)
2206 			break;
2207 
2208 		/* Report the module insertion to the upstream device */
2209 		err = sfp_module_insert(sfp->sfp_bus, &sfp->id,
2210 					sfp->quirk);
2211 		if (err < 0) {
2212 			sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2213 			break;
2214 		}
2215 
2216 		/* If this is a power level 1 module, we are done */
2217 		if (sfp->module_power_mW <= 1000)
2218 			goto insert;
2219 
2220 		sfp_sm_mod_next(sfp, SFP_MOD_HPOWER, 0);
2221 		fallthrough;
2222 	case SFP_MOD_HPOWER:
2223 		/* Enable high power mode */
2224 		err = sfp_sm_mod_hpower(sfp, true);
2225 		if (err < 0) {
2226 			if (err != -EAGAIN) {
2227 				sfp_module_remove(sfp->sfp_bus);
2228 				sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2229 			} else {
2230 				sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2231 			}
2232 			break;
2233 		}
2234 
2235 		sfp_sm_mod_next(sfp, SFP_MOD_WAITPWR, T_HPOWER_LEVEL);
2236 		break;
2237 
2238 	case SFP_MOD_WAITPWR:
2239 		/* Wait for T_HPOWER_LEVEL to time out */
2240 		if (event != SFP_E_TIMEOUT)
2241 			break;
2242 
2243 	insert:
2244 		sfp_sm_mod_next(sfp, SFP_MOD_PRESENT, 0);
2245 		break;
2246 
2247 	case SFP_MOD_PRESENT:
2248 	case SFP_MOD_ERROR:
2249 		break;
2250 	}
2251 }
2252 
2253 static void sfp_sm_main(struct sfp *sfp, unsigned int event)
2254 {
2255 	unsigned long timeout;
2256 	int ret;
2257 
2258 	/* Some events are global */
2259 	if (sfp->sm_state != SFP_S_DOWN &&
2260 	    (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2261 	     sfp->sm_dev_state != SFP_DEV_UP)) {
2262 		if (sfp->sm_state == SFP_S_LINK_UP &&
2263 		    sfp->sm_dev_state == SFP_DEV_UP)
2264 			sfp_sm_link_down(sfp);
2265 		if (sfp->sm_state > SFP_S_INIT)
2266 			sfp_module_stop(sfp->sfp_bus);
2267 		if (sfp->mod_phy)
2268 			sfp_sm_phy_detach(sfp);
2269 		if (sfp->i2c_mii)
2270 			sfp_i2c_mdiobus_destroy(sfp);
2271 		sfp_module_tx_disable(sfp);
2272 		sfp_soft_stop_poll(sfp);
2273 		sfp_sm_next(sfp, SFP_S_DOWN, 0);
2274 		return;
2275 	}
2276 
2277 	/* The main state machine */
2278 	switch (sfp->sm_state) {
2279 	case SFP_S_DOWN:
2280 		if (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2281 		    sfp->sm_dev_state != SFP_DEV_UP)
2282 			break;
2283 
2284 		if (!(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE))
2285 			sfp_soft_start_poll(sfp);
2286 
2287 		sfp_module_tx_enable(sfp);
2288 
2289 		/* Initialise the fault clearance retries */
2290 		sfp->sm_fault_retries = N_FAULT_INIT;
2291 
2292 		/* We need to check the TX_FAULT state, which is not defined
2293 		 * while TX_DISABLE is asserted. The earliest we want to do
2294 		 * anything (such as probe for a PHY) is 50ms (or more on
2295 		 * specific modules).
2296 		 */
2297 		sfp_sm_next(sfp, SFP_S_WAIT, sfp->module_t_wait);
2298 		break;
2299 
2300 	case SFP_S_WAIT:
2301 		if (event != SFP_E_TIMEOUT)
2302 			break;
2303 
2304 		if (sfp->state & SFP_F_TX_FAULT) {
2305 			/* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
2306 			 * from the TX_DISABLE deassertion for the module to
2307 			 * initialise, which is indicated by TX_FAULT
2308 			 * deasserting.
2309 			 */
2310 			timeout = sfp->module_t_start_up;
2311 			if (timeout > sfp->module_t_wait)
2312 				timeout -= sfp->module_t_wait;
2313 			else
2314 				timeout = 1;
2315 
2316 			sfp_sm_next(sfp, SFP_S_INIT, timeout);
2317 		} else {
2318 			/* TX_FAULT is not asserted, assume the module has
2319 			 * finished initialising.
2320 			 */
2321 			goto init_done;
2322 		}
2323 		break;
2324 
2325 	case SFP_S_INIT:
2326 		if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2327 			/* TX_FAULT is still asserted after t_init
2328 			 * or t_start_up, so assume there is a fault.
2329 			 */
2330 			sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
2331 				     sfp->sm_fault_retries == N_FAULT_INIT);
2332 		} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2333 	init_done:
2334 			/* Create mdiobus and start trying for PHY */
2335 			ret = sfp_sm_add_mdio_bus(sfp);
2336 			if (ret < 0) {
2337 				sfp_sm_next(sfp, SFP_S_FAIL, 0);
2338 				break;
2339 			}
2340 			sfp->sm_phy_retries = R_PHY_RETRY;
2341 			goto phy_probe;
2342 		}
2343 		break;
2344 
2345 	case SFP_S_INIT_PHY:
2346 		if (event != SFP_E_TIMEOUT)
2347 			break;
2348 	phy_probe:
2349 		/* TX_FAULT deasserted or we timed out with TX_FAULT
2350 		 * clear.  Probe for the PHY and check the LOS state.
2351 		 */
2352 		ret = sfp_sm_probe_for_phy(sfp);
2353 		if (ret == -ENODEV) {
2354 			if (--sfp->sm_phy_retries) {
2355 				sfp_sm_next(sfp, SFP_S_INIT_PHY, T_PHY_RETRY);
2356 				break;
2357 			} else {
2358 				dev_info(sfp->dev, "no PHY detected\n");
2359 			}
2360 		} else if (ret) {
2361 			sfp_sm_next(sfp, SFP_S_FAIL, 0);
2362 			break;
2363 		}
2364 		if (sfp_module_start(sfp->sfp_bus)) {
2365 			sfp_sm_next(sfp, SFP_S_FAIL, 0);
2366 			break;
2367 		}
2368 		sfp_sm_link_check_los(sfp);
2369 
2370 		/* Reset the fault retry count */
2371 		sfp->sm_fault_retries = N_FAULT;
2372 		break;
2373 
2374 	case SFP_S_INIT_TX_FAULT:
2375 		if (event == SFP_E_TIMEOUT) {
2376 			sfp_module_tx_fault_reset(sfp);
2377 			sfp_sm_next(sfp, SFP_S_INIT, sfp->module_t_start_up);
2378 		}
2379 		break;
2380 
2381 	case SFP_S_WAIT_LOS:
2382 		if (event == SFP_E_TX_FAULT)
2383 			sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2384 		else if (sfp_los_event_inactive(sfp, event))
2385 			sfp_sm_link_up(sfp);
2386 		break;
2387 
2388 	case SFP_S_LINK_UP:
2389 		if (event == SFP_E_TX_FAULT) {
2390 			sfp_sm_link_down(sfp);
2391 			sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2392 		} else if (sfp_los_event_active(sfp, event)) {
2393 			sfp_sm_link_down(sfp);
2394 			sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
2395 		}
2396 		break;
2397 
2398 	case SFP_S_TX_FAULT:
2399 		if (event == SFP_E_TIMEOUT) {
2400 			sfp_module_tx_fault_reset(sfp);
2401 			sfp_sm_next(sfp, SFP_S_REINIT, sfp->module_t_start_up);
2402 		}
2403 		break;
2404 
2405 	case SFP_S_REINIT:
2406 		if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2407 			sfp_sm_fault(sfp, SFP_S_TX_FAULT, false);
2408 		} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2409 			dev_info(sfp->dev, "module transmit fault recovered\n");
2410 			sfp_sm_link_check_los(sfp);
2411 		}
2412 		break;
2413 
2414 	case SFP_S_TX_DISABLE:
2415 		break;
2416 	}
2417 }
2418 
2419 static void sfp_sm_event(struct sfp *sfp, unsigned int event)
2420 {
2421 	mutex_lock(&sfp->sm_mutex);
2422 
2423 	dev_dbg(sfp->dev, "SM: enter %s:%s:%s event %s\n",
2424 		mod_state_to_str(sfp->sm_mod_state),
2425 		dev_state_to_str(sfp->sm_dev_state),
2426 		sm_state_to_str(sfp->sm_state),
2427 		event_to_str(event));
2428 
2429 	sfp_sm_device(sfp, event);
2430 	sfp_sm_module(sfp, event);
2431 	sfp_sm_main(sfp, event);
2432 
2433 	dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
2434 		mod_state_to_str(sfp->sm_mod_state),
2435 		dev_state_to_str(sfp->sm_dev_state),
2436 		sm_state_to_str(sfp->sm_state));
2437 
2438 	mutex_unlock(&sfp->sm_mutex);
2439 }
2440 
2441 static void sfp_attach(struct sfp *sfp)
2442 {
2443 	sfp_sm_event(sfp, SFP_E_DEV_ATTACH);
2444 }
2445 
2446 static void sfp_detach(struct sfp *sfp)
2447 {
2448 	sfp_sm_event(sfp, SFP_E_DEV_DETACH);
2449 }
2450 
2451 static void sfp_start(struct sfp *sfp)
2452 {
2453 	sfp_sm_event(sfp, SFP_E_DEV_UP);
2454 }
2455 
2456 static void sfp_stop(struct sfp *sfp)
2457 {
2458 	sfp_sm_event(sfp, SFP_E_DEV_DOWN);
2459 }
2460 
2461 static int sfp_module_info(struct sfp *sfp, struct ethtool_modinfo *modinfo)
2462 {
2463 	/* locking... and check module is present */
2464 
2465 	if (sfp->id.ext.sff8472_compliance &&
2466 	    !(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE)) {
2467 		modinfo->type = ETH_MODULE_SFF_8472;
2468 		modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
2469 	} else {
2470 		modinfo->type = ETH_MODULE_SFF_8079;
2471 		modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
2472 	}
2473 	return 0;
2474 }
2475 
2476 static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee,
2477 			     u8 *data)
2478 {
2479 	unsigned int first, last, len;
2480 	int ret;
2481 
2482 	if (ee->len == 0)
2483 		return -EINVAL;
2484 
2485 	first = ee->offset;
2486 	last = ee->offset + ee->len;
2487 	if (first < ETH_MODULE_SFF_8079_LEN) {
2488 		len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN);
2489 		len -= first;
2490 
2491 		ret = sfp_read(sfp, false, first, data, len);
2492 		if (ret < 0)
2493 			return ret;
2494 
2495 		first += len;
2496 		data += len;
2497 	}
2498 	if (first < ETH_MODULE_SFF_8472_LEN && last > ETH_MODULE_SFF_8079_LEN) {
2499 		len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN);
2500 		len -= first;
2501 		first -= ETH_MODULE_SFF_8079_LEN;
2502 
2503 		ret = sfp_read(sfp, true, first, data, len);
2504 		if (ret < 0)
2505 			return ret;
2506 	}
2507 	return 0;
2508 }
2509 
2510 static int sfp_module_eeprom_by_page(struct sfp *sfp,
2511 				     const struct ethtool_module_eeprom *page,
2512 				     struct netlink_ext_ack *extack)
2513 {
2514 	if (page->bank) {
2515 		NL_SET_ERR_MSG(extack, "Banks not supported");
2516 		return -EOPNOTSUPP;
2517 	}
2518 
2519 	if (page->page) {
2520 		NL_SET_ERR_MSG(extack, "Only page 0 supported");
2521 		return -EOPNOTSUPP;
2522 	}
2523 
2524 	if (page->i2c_address != 0x50 &&
2525 	    page->i2c_address != 0x51) {
2526 		NL_SET_ERR_MSG(extack, "Only address 0x50 and 0x51 supported");
2527 		return -EOPNOTSUPP;
2528 	}
2529 
2530 	return sfp_read(sfp, page->i2c_address == 0x51, page->offset,
2531 			page->data, page->length);
2532 };
2533 
2534 static const struct sfp_socket_ops sfp_module_ops = {
2535 	.attach = sfp_attach,
2536 	.detach = sfp_detach,
2537 	.start = sfp_start,
2538 	.stop = sfp_stop,
2539 	.module_info = sfp_module_info,
2540 	.module_eeprom = sfp_module_eeprom,
2541 	.module_eeprom_by_page = sfp_module_eeprom_by_page,
2542 };
2543 
2544 static void sfp_timeout(struct work_struct *work)
2545 {
2546 	struct sfp *sfp = container_of(work, struct sfp, timeout.work);
2547 
2548 	rtnl_lock();
2549 	sfp_sm_event(sfp, SFP_E_TIMEOUT);
2550 	rtnl_unlock();
2551 }
2552 
2553 static void sfp_check_state(struct sfp *sfp)
2554 {
2555 	unsigned int state, i, changed;
2556 
2557 	mutex_lock(&sfp->st_mutex);
2558 	state = sfp_get_state(sfp);
2559 	changed = state ^ sfp->state;
2560 	if (sfp->tx_fault_ignore)
2561 		changed &= SFP_F_PRESENT | SFP_F_LOS;
2562 	else
2563 		changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
2564 
2565 	for (i = 0; i < GPIO_MAX; i++)
2566 		if (changed & BIT(i))
2567 			dev_dbg(sfp->dev, "%s %u -> %u\n", gpio_of_names[i],
2568 				!!(sfp->state & BIT(i)), !!(state & BIT(i)));
2569 
2570 	state |= sfp->state & (SFP_F_TX_DISABLE | SFP_F_RATE_SELECT);
2571 	sfp->state = state;
2572 
2573 	rtnl_lock();
2574 	if (changed & SFP_F_PRESENT)
2575 		sfp_sm_event(sfp, state & SFP_F_PRESENT ?
2576 				SFP_E_INSERT : SFP_E_REMOVE);
2577 
2578 	if (changed & SFP_F_TX_FAULT)
2579 		sfp_sm_event(sfp, state & SFP_F_TX_FAULT ?
2580 				SFP_E_TX_FAULT : SFP_E_TX_CLEAR);
2581 
2582 	if (changed & SFP_F_LOS)
2583 		sfp_sm_event(sfp, state & SFP_F_LOS ?
2584 				SFP_E_LOS_HIGH : SFP_E_LOS_LOW);
2585 	rtnl_unlock();
2586 	mutex_unlock(&sfp->st_mutex);
2587 }
2588 
2589 static irqreturn_t sfp_irq(int irq, void *data)
2590 {
2591 	struct sfp *sfp = data;
2592 
2593 	sfp_check_state(sfp);
2594 
2595 	return IRQ_HANDLED;
2596 }
2597 
2598 static void sfp_poll(struct work_struct *work)
2599 {
2600 	struct sfp *sfp = container_of(work, struct sfp, poll.work);
2601 
2602 	sfp_check_state(sfp);
2603 
2604 	if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) ||
2605 	    sfp->need_poll)
2606 		mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2607 }
2608 
2609 static struct sfp *sfp_alloc(struct device *dev)
2610 {
2611 	struct sfp *sfp;
2612 
2613 	sfp = kzalloc(sizeof(*sfp), GFP_KERNEL);
2614 	if (!sfp)
2615 		return ERR_PTR(-ENOMEM);
2616 
2617 	sfp->dev = dev;
2618 
2619 	mutex_init(&sfp->sm_mutex);
2620 	mutex_init(&sfp->st_mutex);
2621 	INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
2622 	INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
2623 
2624 	sfp_hwmon_init(sfp);
2625 
2626 	return sfp;
2627 }
2628 
2629 static void sfp_cleanup(void *data)
2630 {
2631 	struct sfp *sfp = data;
2632 
2633 	sfp_hwmon_exit(sfp);
2634 
2635 	cancel_delayed_work_sync(&sfp->poll);
2636 	cancel_delayed_work_sync(&sfp->timeout);
2637 	if (sfp->i2c_mii) {
2638 		mdiobus_unregister(sfp->i2c_mii);
2639 		mdiobus_free(sfp->i2c_mii);
2640 	}
2641 	if (sfp->i2c)
2642 		i2c_put_adapter(sfp->i2c);
2643 	kfree(sfp);
2644 }
2645 
2646 static int sfp_probe(struct platform_device *pdev)
2647 {
2648 	const struct sff_data *sff;
2649 	struct i2c_adapter *i2c;
2650 	char *sfp_irq_name;
2651 	struct sfp *sfp;
2652 	int err, i;
2653 
2654 	sfp = sfp_alloc(&pdev->dev);
2655 	if (IS_ERR(sfp))
2656 		return PTR_ERR(sfp);
2657 
2658 	platform_set_drvdata(pdev, sfp);
2659 
2660 	err = devm_add_action_or_reset(sfp->dev, sfp_cleanup, sfp);
2661 	if (err < 0)
2662 		return err;
2663 
2664 	sff = sfp->type = &sfp_data;
2665 
2666 	if (pdev->dev.of_node) {
2667 		struct device_node *node = pdev->dev.of_node;
2668 		const struct of_device_id *id;
2669 		struct device_node *np;
2670 
2671 		id = of_match_node(sfp_of_match, node);
2672 		if (WARN_ON(!id))
2673 			return -EINVAL;
2674 
2675 		sff = sfp->type = id->data;
2676 
2677 		np = of_parse_phandle(node, "i2c-bus", 0);
2678 		if (!np) {
2679 			dev_err(sfp->dev, "missing 'i2c-bus' property\n");
2680 			return -ENODEV;
2681 		}
2682 
2683 		i2c = of_find_i2c_adapter_by_node(np);
2684 		of_node_put(np);
2685 	} else if (has_acpi_companion(&pdev->dev)) {
2686 		struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
2687 		struct fwnode_handle *fw = acpi_fwnode_handle(adev);
2688 		struct fwnode_reference_args args;
2689 		struct acpi_handle *acpi_handle;
2690 		int ret;
2691 
2692 		ret = acpi_node_get_property_reference(fw, "i2c-bus", 0, &args);
2693 		if (ret || !is_acpi_device_node(args.fwnode)) {
2694 			dev_err(&pdev->dev, "missing 'i2c-bus' property\n");
2695 			return -ENODEV;
2696 		}
2697 
2698 		acpi_handle = ACPI_HANDLE_FWNODE(args.fwnode);
2699 		i2c = i2c_acpi_find_adapter_by_handle(acpi_handle);
2700 	} else {
2701 		return -EINVAL;
2702 	}
2703 
2704 	if (!i2c)
2705 		return -EPROBE_DEFER;
2706 
2707 	err = sfp_i2c_configure(sfp, i2c);
2708 	if (err < 0) {
2709 		i2c_put_adapter(i2c);
2710 		return err;
2711 	}
2712 
2713 	for (i = 0; i < GPIO_MAX; i++)
2714 		if (sff->gpios & BIT(i)) {
2715 			sfp->gpio[i] = devm_gpiod_get_optional(sfp->dev,
2716 					   gpio_of_names[i], gpio_flags[i]);
2717 			if (IS_ERR(sfp->gpio[i]))
2718 				return PTR_ERR(sfp->gpio[i]);
2719 		}
2720 
2721 	sfp->state_hw_mask = SFP_F_PRESENT;
2722 
2723 	sfp->get_state = sfp_gpio_get_state;
2724 	sfp->set_state = sfp_gpio_set_state;
2725 
2726 	/* Modules that have no detect signal are always present */
2727 	if (!(sfp->gpio[GPIO_MODDEF0]))
2728 		sfp->get_state = sff_gpio_get_state;
2729 
2730 	device_property_read_u32(&pdev->dev, "maximum-power-milliwatt",
2731 				 &sfp->max_power_mW);
2732 	if (!sfp->max_power_mW)
2733 		sfp->max_power_mW = 1000;
2734 
2735 	dev_info(sfp->dev, "Host maximum power %u.%uW\n",
2736 		 sfp->max_power_mW / 1000, (sfp->max_power_mW / 100) % 10);
2737 
2738 	/* Get the initial state, and always signal TX disable,
2739 	 * since the network interface will not be up.
2740 	 */
2741 	sfp->state = sfp_get_state(sfp) | SFP_F_TX_DISABLE;
2742 
2743 	if (sfp->gpio[GPIO_RATE_SELECT] &&
2744 	    gpiod_get_value_cansleep(sfp->gpio[GPIO_RATE_SELECT]))
2745 		sfp->state |= SFP_F_RATE_SELECT;
2746 	sfp_set_state(sfp, sfp->state);
2747 	sfp_module_tx_disable(sfp);
2748 	if (sfp->state & SFP_F_PRESENT) {
2749 		rtnl_lock();
2750 		sfp_sm_event(sfp, SFP_E_INSERT);
2751 		rtnl_unlock();
2752 	}
2753 
2754 	for (i = 0; i < GPIO_MAX; i++) {
2755 		if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
2756 			continue;
2757 
2758 		sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
2759 		if (sfp->gpio_irq[i] < 0) {
2760 			sfp->gpio_irq[i] = 0;
2761 			sfp->need_poll = true;
2762 			continue;
2763 		}
2764 
2765 		sfp_irq_name = devm_kasprintf(sfp->dev, GFP_KERNEL,
2766 					      "%s-%s", dev_name(sfp->dev),
2767 					      gpio_of_names[i]);
2768 
2769 		if (!sfp_irq_name)
2770 			return -ENOMEM;
2771 
2772 		err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
2773 						NULL, sfp_irq,
2774 						IRQF_ONESHOT |
2775 						IRQF_TRIGGER_RISING |
2776 						IRQF_TRIGGER_FALLING,
2777 						sfp_irq_name, sfp);
2778 		if (err) {
2779 			sfp->gpio_irq[i] = 0;
2780 			sfp->need_poll = true;
2781 		}
2782 	}
2783 
2784 	if (sfp->need_poll)
2785 		mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2786 
2787 	/* We could have an issue in cases no Tx disable pin is available or
2788 	 * wired as modules using a laser as their light source will continue to
2789 	 * be active when the fiber is removed. This could be a safety issue and
2790 	 * we should at least warn the user about that.
2791 	 */
2792 	if (!sfp->gpio[GPIO_TX_DISABLE])
2793 		dev_warn(sfp->dev,
2794 			 "No tx_disable pin: SFP modules will always be emitting.\n");
2795 
2796 	sfp->sfp_bus = sfp_register_socket(sfp->dev, sfp, &sfp_module_ops);
2797 	if (!sfp->sfp_bus)
2798 		return -ENOMEM;
2799 
2800 	sfp_debugfs_init(sfp);
2801 
2802 	return 0;
2803 }
2804 
2805 static int sfp_remove(struct platform_device *pdev)
2806 {
2807 	struct sfp *sfp = platform_get_drvdata(pdev);
2808 
2809 	sfp_debugfs_exit(sfp);
2810 	sfp_unregister_socket(sfp->sfp_bus);
2811 
2812 	rtnl_lock();
2813 	sfp_sm_event(sfp, SFP_E_REMOVE);
2814 	rtnl_unlock();
2815 
2816 	return 0;
2817 }
2818 
2819 static void sfp_shutdown(struct platform_device *pdev)
2820 {
2821 	struct sfp *sfp = platform_get_drvdata(pdev);
2822 	int i;
2823 
2824 	for (i = 0; i < GPIO_MAX; i++) {
2825 		if (!sfp->gpio_irq[i])
2826 			continue;
2827 
2828 		devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
2829 	}
2830 
2831 	cancel_delayed_work_sync(&sfp->poll);
2832 	cancel_delayed_work_sync(&sfp->timeout);
2833 }
2834 
2835 static struct platform_driver sfp_driver = {
2836 	.probe = sfp_probe,
2837 	.remove = sfp_remove,
2838 	.shutdown = sfp_shutdown,
2839 	.driver = {
2840 		.name = "sfp",
2841 		.of_match_table = sfp_of_match,
2842 	},
2843 };
2844 
2845 static int sfp_init(void)
2846 {
2847 	poll_jiffies = msecs_to_jiffies(100);
2848 
2849 	return platform_driver_register(&sfp_driver);
2850 }
2851 module_init(sfp_init);
2852 
2853 static void sfp_exit(void)
2854 {
2855 	platform_driver_unregister(&sfp_driver);
2856 }
2857 module_exit(sfp_exit);
2858 
2859 MODULE_ALIAS("platform:sfp");
2860 MODULE_AUTHOR("Russell King");
2861 MODULE_LICENSE("GPL v2");
2862