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