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