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>
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>
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>
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
),
38 SFP_F_OUTPUTS
= SFP_F_TX_DISABLE
| SFP_F_RS0
| SFP_F_RS1
,
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",
87 static const char *mod_state_to_str(unsigned short mod_state
)
89 if (mod_state
>= ARRAY_SIZE(mod_state_strings
))
90 return "Unknown module state";
91 return mod_state_strings
[mod_state
];
94 static const char * const dev_state_strings
[] = {
95 [SFP_DEV_DETACHED
] = "detached",
96 [SFP_DEV_DOWN
] = "down",
100 static const char *dev_state_to_str(unsigned short dev_state
)
102 if (dev_state
>= ARRAY_SIZE(dev_state_strings
))
103 return "Unknown device state";
104 return dev_state_strings
[dev_state
];
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",
121 static const char *event_to_str(unsigned short event
)
123 if (event
>= ARRAY_SIZE(event_strings
))
124 return "Unknown event";
125 return event_strings
[event
];
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",
142 static const char *sm_state_to_str(unsigned short sm_state
)
144 if (sm_state
>= ARRAY_SIZE(sm_state_strings
))
145 return "Unknown state";
146 return sm_state_strings
[sm_state
];
149 static const char *gpio_names
[] = {
158 static const enum gpiod_flags gpio_flags
[] = {
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.
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)
176 /* t_reset is the time required to assert the TX_DISABLE signal to reset
177 * an indicated TX_FAULT.
179 #define T_RESET_US 10
180 #define T_FAULT_RECOVER msecs_to_jiffies(1000)
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.
187 #define N_FAULT_INIT 5
190 /* T_PHY_RETRY is the time interval between attempts to probe the PHY.
191 * R_PHY_RETRY is the number of attempts.
193 #define T_PHY_RETRY msecs_to_jiffies(50)
194 #define R_PHY_RETRY 25
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.
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.
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
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).
215 #define SFP_PHY_ADDR 22
216 #define SFP_PHY_ADDR_ROLLBALL 17
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.
222 #define SFP_EEPROM_BLOCK_SIZE 16
226 bool (*module_supported
)(const struct sfp_eeprom_id
*id
);
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_block_size
;
240 unsigned int (*get_state
)(struct sfp
*);
241 void (*set_state
)(struct sfp
*, unsigned int);
242 int (*read
)(struct sfp
*, bool, u8
, void *, size_t);
243 int (*write
)(struct sfp
*, bool, u8
, void *, size_t);
245 struct gpio_desc
*gpio
[GPIO_MAX
];
246 int gpio_irq
[GPIO_MAX
];
251 * state_hw_drive: st_mutex held
252 * state_hw_mask: st_mutex held
253 * state_soft_mask: st_mutex held
254 * state: st_mutex held unless reading input bits
256 struct mutex st_mutex
; /* Protects state */
257 unsigned int state_hw_drive
;
258 unsigned int state_hw_mask
;
259 unsigned int state_soft_mask
;
260 unsigned int state_ignore_mask
;
263 struct delayed_work poll
;
264 struct delayed_work timeout
;
265 struct mutex sm_mutex
; /* Protects state machine */
266 unsigned char sm_mod_state
;
267 unsigned char sm_mod_tries_init
;
268 unsigned char sm_mod_tries
;
269 unsigned char sm_dev_state
;
270 unsigned short sm_state
;
271 unsigned char sm_fault_retries
;
272 unsigned char sm_phy_retries
;
274 struct sfp_eeprom_id id
;
275 unsigned int module_power_mW
;
276 unsigned int module_t_start_up
;
277 unsigned int module_t_wait
;
278 unsigned int phy_t_retry
;
280 unsigned int rate_kbd
;
281 unsigned int rs_threshold_kbd
;
282 unsigned int rs_state_mask
;
286 const struct sfp_quirk
*quirk
;
288 #if IS_ENABLED(CONFIG_HWMON)
289 struct sfp_diag diag
;
290 struct delayed_work hwmon_probe
;
291 unsigned int hwmon_tries
;
292 struct device
*hwmon_dev
;
296 #if IS_ENABLED(CONFIG_DEBUG_FS)
297 struct dentry
*debugfs_dir
;
301 static bool sff_module_supported(const struct sfp_eeprom_id
*id
)
303 return id
->base
.phys_id
== SFF8024_ID_SFF_8472
&&
304 id
->base
.phys_ext_id
== SFP_PHYS_EXT_ID_SFP
;
307 static const struct sff_data sff_data
= {
308 .gpios
= SFP_F_LOS
| SFP_F_TX_FAULT
| SFP_F_TX_DISABLE
,
309 .module_supported
= sff_module_supported
,
312 static bool sfp_module_supported(const struct sfp_eeprom_id
*id
)
314 if (id
->base
.phys_id
== SFF8024_ID_SFP
&&
315 id
->base
.phys_ext_id
== SFP_PHYS_EXT_ID_SFP
)
318 /* SFP GPON module Ubiquiti U-Fiber Instant has in its EEPROM stored
319 * phys id SFF instead of SFP. Therefore mark this module explicitly
320 * as supported based on vendor name and pn match.
322 if (id
->base
.phys_id
== SFF8024_ID_SFF_8472
&&
323 id
->base
.phys_ext_id
== SFP_PHYS_EXT_ID_SFP
&&
324 !memcmp(id
->base
.vendor_name
, "UBNT ", 16) &&
325 !memcmp(id
->base
.vendor_pn
, "UF-INSTANT ", 16))
331 static const struct sff_data sfp_data
= {
332 .gpios
= SFP_F_PRESENT
| SFP_F_LOS
| SFP_F_TX_FAULT
|
333 SFP_F_TX_DISABLE
| SFP_F_RS0
| SFP_F_RS1
,
334 .module_supported
= sfp_module_supported
,
337 static const struct of_device_id sfp_of_match
[] = {
338 { .compatible
= "sff,sff", .data
= &sff_data
, },
339 { .compatible
= "sff,sfp", .data
= &sfp_data
, },
342 MODULE_DEVICE_TABLE(of
, sfp_of_match
);
344 static void sfp_fixup_long_startup(struct sfp
*sfp
)
346 sfp
->module_t_start_up
= T_START_UP_BAD_GPON
;
349 static void sfp_fixup_ignore_los(struct sfp
*sfp
)
351 /* This forces LOS to zero, so we ignore transitions */
352 sfp
->state_ignore_mask
|= SFP_F_LOS
;
353 /* Make sure that LOS options are clear */
354 sfp
->id
.ext
.options
&= ~cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
|
355 SFP_OPTIONS_LOS_NORMAL
);
358 static void sfp_fixup_ignore_tx_fault(struct sfp
*sfp
)
360 sfp
->state_ignore_mask
|= SFP_F_TX_FAULT
;
363 static void sfp_fixup_nokia(struct sfp
*sfp
)
365 sfp_fixup_long_startup(sfp
);
366 sfp_fixup_ignore_los(sfp
);
369 // For 10GBASE-T short-reach modules
370 static void sfp_fixup_10gbaset_30m(struct sfp
*sfp
)
372 sfp
->id
.base
.connector
= SFF8024_CONNECTOR_RJ45
;
373 sfp
->id
.base
.extended_cc
= SFF8024_ECC_10GBASE_T_SR
;
376 static void sfp_fixup_rollball(struct sfp
*sfp
)
378 sfp
->mdio_protocol
= MDIO_I2C_ROLLBALL
;
380 /* RollBall modules may disallow access to PHY registers for up to 25
381 * seconds, and the reads return 0xffff before that. Increase the time
382 * between PHY probe retries from 50ms to 1s so that we will wait for
383 * the PHY for a sufficient amount of time.
385 sfp
->phy_t_retry
= msecs_to_jiffies(1000);
388 static void sfp_fixup_fs_2_5gt(struct sfp
*sfp
)
390 sfp_fixup_rollball(sfp
);
392 /* The RollBall fixup is not enough for FS modules, the PHY chip inside
393 * them does not return 0xffff for PHY ID registers in all MMDs for the
394 * while initializing. They need a 4 second wait before accessing PHY.
396 sfp
->module_t_wait
= msecs_to_jiffies(4000);
399 static void sfp_fixup_fs_10gt(struct sfp
*sfp
)
401 sfp_fixup_10gbaset_30m(sfp
);
402 sfp_fixup_fs_2_5gt(sfp
);
405 static void sfp_fixup_halny_gsfp(struct sfp
*sfp
)
407 /* Ignore the TX_FAULT and LOS signals on this module.
408 * these are possibly used for other purposes on this
409 * module, e.g. a serial port.
411 sfp
->state_hw_mask
&= ~(SFP_F_TX_FAULT
| SFP_F_LOS
);
414 static void sfp_fixup_rollball_cc(struct sfp
*sfp
)
416 sfp_fixup_rollball(sfp
);
418 /* Some RollBall SFPs may have wrong (zero) extended compliance code
419 * burned in EEPROM. For PHY probing we need the correct one.
421 sfp
->id
.base
.extended_cc
= SFF8024_ECC_10GBASE_T_SFI
;
424 static void sfp_quirk_2500basex(const struct sfp_eeprom_id
*id
,
425 unsigned long *modes
,
426 unsigned long *interfaces
)
428 linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT
, modes
);
429 __set_bit(PHY_INTERFACE_MODE_2500BASEX
, interfaces
);
432 static void sfp_quirk_disable_autoneg(const struct sfp_eeprom_id
*id
,
433 unsigned long *modes
,
434 unsigned long *interfaces
)
436 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT
, modes
);
439 static void sfp_quirk_oem_2_5g(const struct sfp_eeprom_id
*id
,
440 unsigned long *modes
,
441 unsigned long *interfaces
)
443 /* Copper 2.5G SFP */
444 linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT
, modes
);
445 __set_bit(PHY_INTERFACE_MODE_2500BASEX
, interfaces
);
446 sfp_quirk_disable_autoneg(id
, modes
, interfaces
);
449 static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id
*id
,
450 unsigned long *modes
,
451 unsigned long *interfaces
)
453 /* Ubiquiti U-Fiber Instant module claims that support all transceiver
454 * types including 10G Ethernet which is not truth. So clear all claimed
455 * modes and set only one mode which module supports: 1000baseX_Full.
457 linkmode_zero(modes
);
458 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT
, modes
);
461 #define SFP_QUIRK(_v, _p, _m, _f) \
462 { .vendor = _v, .part = _p, .modes = _m, .fixup = _f, }
463 #define SFP_QUIRK_M(_v, _p, _m) SFP_QUIRK(_v, _p, _m, NULL)
464 #define SFP_QUIRK_F(_v, _p, _f) SFP_QUIRK(_v, _p, NULL, _f)
466 static const struct sfp_quirk sfp_quirks
[] = {
467 // Alcatel Lucent G-010S-P can operate at 2500base-X, but incorrectly
468 // report 2500MBd NRZ in their EEPROM
469 SFP_QUIRK_M("ALCATELLUCENT", "G010SP", sfp_quirk_2500basex
),
471 // Alcatel Lucent G-010S-A can operate at 2500base-X, but report 3.2GBd
472 // NRZ in their EEPROM
473 SFP_QUIRK("ALCATELLUCENT", "3FE46541AA", sfp_quirk_2500basex
,
476 // Fiberstore SFP-10G-T doesn't identify as copper, uses the Rollball
477 // protocol to talk to the PHY and needs 4 sec wait before probing the
479 SFP_QUIRK_F("FS", "SFP-10G-T", sfp_fixup_fs_10gt
),
481 // Fiberstore SFP-2.5G-T uses Rollball protocol to talk to the PHY and
482 // needs 4 sec wait before probing the PHY.
483 SFP_QUIRK_F("FS", "SFP-2.5G-T", sfp_fixup_fs_2_5gt
),
485 // Fiberstore GPON-ONU-34-20BI can operate at 2500base-X, but report 1.2GBd
486 // NRZ in their EEPROM
487 SFP_QUIRK("FS", "GPON-ONU-34-20BI", sfp_quirk_2500basex
,
488 sfp_fixup_ignore_tx_fault
),
490 SFP_QUIRK_F("HALNy", "HL-GSFP", sfp_fixup_halny_gsfp
),
492 // HG MXPD-483II-F 2.5G supports 2500Base-X, but incorrectly reports
493 // 2600MBd in their EERPOM
494 SFP_QUIRK_M("HG GENUINE", "MXPD-483II", sfp_quirk_2500basex
),
496 // Huawei MA5671A can operate at 2500base-X, but report 1.2GBd NRZ in
498 SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex
,
499 sfp_fixup_ignore_tx_fault
),
501 // Lantech 8330-262D-E can operate at 2500base-X, but incorrectly report
502 // 2500MBd NRZ in their EEPROM
503 SFP_QUIRK_M("Lantech", "8330-262D-E", sfp_quirk_2500basex
),
505 SFP_QUIRK_M("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant
),
507 // Walsun HXSX-ATR[CI]-1 don't identify as copper, and use the
508 // Rollball protocol to talk to the PHY.
509 SFP_QUIRK_F("Walsun", "HXSX-ATRC-1", sfp_fixup_fs_10gt
),
510 SFP_QUIRK_F("Walsun", "HXSX-ATRI-1", sfp_fixup_fs_10gt
),
512 // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
513 SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault
),
515 SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc
),
516 SFP_QUIRK_M("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g
),
517 SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc
),
518 SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc
),
519 SFP_QUIRK_F("Turris", "RTSFP-2.5G", sfp_fixup_rollball
),
520 SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball
),
521 SFP_QUIRK_F("Turris", "RTSFP-10G", sfp_fixup_rollball
),
524 static size_t sfp_strlen(const char *str
, size_t maxlen
)
528 /* Trailing characters should be filled with space chars, but
529 * some manufacturers can't read SFF-8472 and use NUL.
531 for (i
= 0, size
= 0; i
< maxlen
; i
++)
532 if (str
[i
] != ' ' && str
[i
] != '\0')
538 static bool sfp_match(const char *qs
, const char *str
, size_t len
)
542 if (strlen(qs
) != len
)
544 return !strncmp(qs
, str
, len
);
547 static const struct sfp_quirk
*sfp_lookup_quirk(const struct sfp_eeprom_id
*id
)
549 const struct sfp_quirk
*q
;
553 vs
= sfp_strlen(id
->base
.vendor_name
, ARRAY_SIZE(id
->base
.vendor_name
));
554 ps
= sfp_strlen(id
->base
.vendor_pn
, ARRAY_SIZE(id
->base
.vendor_pn
));
556 for (i
= 0, q
= sfp_quirks
; i
< ARRAY_SIZE(sfp_quirks
); i
++, q
++)
557 if (sfp_match(q
->vendor
, id
->base
.vendor_name
, vs
) &&
558 sfp_match(q
->part
, id
->base
.vendor_pn
, ps
))
564 static unsigned long poll_jiffies
;
566 static unsigned int sfp_gpio_get_state(struct sfp
*sfp
)
568 unsigned int i
, state
, v
;
570 for (i
= state
= 0; i
< GPIO_MAX
; i
++) {
571 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
574 v
= gpiod_get_value_cansleep(sfp
->gpio
[i
]);
582 static unsigned int sff_gpio_get_state(struct sfp
*sfp
)
584 return sfp_gpio_get_state(sfp
) | SFP_F_PRESENT
;
587 static void sfp_gpio_set_state(struct sfp
*sfp
, unsigned int state
)
591 if (state
& SFP_F_PRESENT
)
592 /* If the module is present, drive the requested signals */
593 drive
= sfp
->state_hw_drive
;
595 /* Otherwise, let them float to the pull-ups */
598 if (sfp
->gpio
[GPIO_TX_DISABLE
]) {
599 if (drive
& SFP_F_TX_DISABLE
)
600 gpiod_direction_output(sfp
->gpio
[GPIO_TX_DISABLE
],
601 state
& SFP_F_TX_DISABLE
);
603 gpiod_direction_input(sfp
->gpio
[GPIO_TX_DISABLE
]);
606 if (sfp
->gpio
[GPIO_RS0
]) {
607 if (drive
& SFP_F_RS0
)
608 gpiod_direction_output(sfp
->gpio
[GPIO_RS0
],
611 gpiod_direction_input(sfp
->gpio
[GPIO_RS0
]);
614 if (sfp
->gpio
[GPIO_RS1
]) {
615 if (drive
& SFP_F_RS1
)
616 gpiod_direction_output(sfp
->gpio
[GPIO_RS1
],
619 gpiod_direction_input(sfp
->gpio
[GPIO_RS1
]);
623 static int sfp_i2c_read(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
626 struct i2c_msg msgs
[2];
627 u8 bus_addr
= a2
? 0x51 : 0x50;
628 size_t block_size
= sfp
->i2c_block_size
;
632 msgs
[0].addr
= bus_addr
;
635 msgs
[0].buf
= &dev_addr
;
636 msgs
[1].addr
= bus_addr
;
637 msgs
[1].flags
= I2C_M_RD
;
643 if (this_len
> block_size
)
644 this_len
= block_size
;
646 msgs
[1].len
= this_len
;
648 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
652 if (ret
!= ARRAY_SIZE(msgs
))
655 msgs
[1].buf
+= this_len
;
656 dev_addr
+= this_len
;
660 return msgs
[1].buf
- (u8
*)buf
;
663 static int sfp_i2c_write(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
666 struct i2c_msg msgs
[1];
667 u8 bus_addr
= a2
? 0x51 : 0x50;
670 msgs
[0].addr
= bus_addr
;
672 msgs
[0].len
= 1 + len
;
673 msgs
[0].buf
= kmalloc(1 + len
, GFP_KERNEL
);
677 msgs
[0].buf
[0] = dev_addr
;
678 memcpy(&msgs
[0].buf
[1], buf
, len
);
680 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
687 return ret
== ARRAY_SIZE(msgs
) ? len
: 0;
690 static int sfp_i2c_configure(struct sfp
*sfp
, struct i2c_adapter
*i2c
)
692 if (!i2c_check_functionality(i2c
, I2C_FUNC_I2C
))
696 sfp
->read
= sfp_i2c_read
;
697 sfp
->write
= sfp_i2c_write
;
702 static int sfp_i2c_mdiobus_create(struct sfp
*sfp
)
704 struct mii_bus
*i2c_mii
;
707 i2c_mii
= mdio_i2c_alloc(sfp
->dev
, sfp
->i2c
, sfp
->mdio_protocol
);
709 return PTR_ERR(i2c_mii
);
711 i2c_mii
->name
= "SFP I2C Bus";
712 i2c_mii
->phy_mask
= ~0;
714 ret
= mdiobus_register(i2c_mii
);
716 mdiobus_free(i2c_mii
);
720 sfp
->i2c_mii
= i2c_mii
;
725 static void sfp_i2c_mdiobus_destroy(struct sfp
*sfp
)
727 mdiobus_unregister(sfp
->i2c_mii
);
732 static int sfp_read(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
734 return sfp
->read(sfp
, a2
, addr
, buf
, len
);
737 static int sfp_write(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
739 return sfp
->write(sfp
, a2
, addr
, buf
, len
);
742 static int sfp_modify_u8(struct sfp
*sfp
, bool a2
, u8 addr
, u8 mask
, u8 val
)
747 ret
= sfp_read(sfp
, a2
, addr
, &old
, sizeof(old
));
748 if (ret
!= sizeof(old
))
751 v
= (old
& ~mask
) | (val
& mask
);
755 return sfp_write(sfp
, a2
, addr
, &v
, sizeof(v
));
758 static unsigned int sfp_soft_get_state(struct sfp
*sfp
)
760 unsigned int state
= 0;
764 ret
= sfp_read(sfp
, true, SFP_STATUS
, &status
, sizeof(status
));
765 if (ret
== sizeof(status
)) {
766 if (status
& SFP_STATUS_RX_LOS
)
768 if (status
& SFP_STATUS_TX_FAULT
)
769 state
|= SFP_F_TX_FAULT
;
771 dev_err_ratelimited(sfp
->dev
,
772 "failed to read SFP soft status: %pe\n",
774 /* Preserve the current state */
778 return state
& sfp
->state_soft_mask
;
781 static void sfp_soft_set_state(struct sfp
*sfp
, unsigned int state
,
787 if (soft
& SFP_F_TX_DISABLE
)
788 mask
|= SFP_STATUS_TX_DISABLE_FORCE
;
789 if (state
& SFP_F_TX_DISABLE
)
790 val
|= SFP_STATUS_TX_DISABLE_FORCE
;
792 if (soft
& SFP_F_RS0
)
793 mask
|= SFP_STATUS_RS0_SELECT
;
794 if (state
& SFP_F_RS0
)
795 val
|= SFP_STATUS_RS0_SELECT
;
798 sfp_modify_u8(sfp
, true, SFP_STATUS
, mask
, val
);
801 if (soft
& SFP_F_RS1
)
802 mask
|= SFP_EXT_STATUS_RS1_SELECT
;
803 if (state
& SFP_F_RS1
)
804 val
|= SFP_EXT_STATUS_RS1_SELECT
;
807 sfp_modify_u8(sfp
, true, SFP_EXT_STATUS
, mask
, val
);
810 static void sfp_soft_start_poll(struct sfp
*sfp
)
812 const struct sfp_eeprom_id
*id
= &sfp
->id
;
813 unsigned int mask
= 0;
815 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_DISABLE
)
816 mask
|= SFP_F_TX_DISABLE
;
817 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_FAULT
)
818 mask
|= SFP_F_TX_FAULT
;
819 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_RX_LOS
)
821 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_RATE_SELECT
)
822 mask
|= sfp
->rs_state_mask
;
824 mutex_lock(&sfp
->st_mutex
);
825 // Poll the soft state for hardware pins we want to ignore
826 sfp
->state_soft_mask
= ~sfp
->state_hw_mask
& ~sfp
->state_ignore_mask
&
829 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) &&
831 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
832 mutex_unlock(&sfp
->st_mutex
);
835 static void sfp_soft_stop_poll(struct sfp
*sfp
)
837 mutex_lock(&sfp
->st_mutex
);
838 sfp
->state_soft_mask
= 0;
839 mutex_unlock(&sfp
->st_mutex
);
842 /* sfp_get_state() - must be called with st_mutex held, or in the
843 * initialisation path.
845 static unsigned int sfp_get_state(struct sfp
*sfp
)
847 unsigned int soft
= sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
);
850 state
= sfp
->get_state(sfp
) & sfp
->state_hw_mask
;
851 if (state
& SFP_F_PRESENT
&& soft
)
852 state
|= sfp_soft_get_state(sfp
);
857 /* sfp_set_state() - must be called with st_mutex held, or in the
858 * initialisation path.
860 static void sfp_set_state(struct sfp
*sfp
, unsigned int state
)
864 sfp
->set_state(sfp
, state
);
866 soft
= sfp
->state_soft_mask
& SFP_F_OUTPUTS
;
867 if (state
& SFP_F_PRESENT
&& soft
)
868 sfp_soft_set_state(sfp
, state
, soft
);
871 static void sfp_mod_state(struct sfp
*sfp
, unsigned int mask
, unsigned int set
)
873 mutex_lock(&sfp
->st_mutex
);
874 sfp
->state
= (sfp
->state
& ~mask
) | set
;
875 sfp_set_state(sfp
, sfp
->state
);
876 mutex_unlock(&sfp
->st_mutex
);
879 static unsigned int sfp_check(void *buf
, size_t len
)
883 for (p
= buf
, check
= 0; len
; p
++, len
--)
890 #if IS_ENABLED(CONFIG_HWMON)
891 static umode_t
sfp_hwmon_is_visible(const void *data
,
892 enum hwmon_sensor_types type
,
893 u32 attr
, int channel
)
895 const struct sfp
*sfp
= data
;
900 case hwmon_temp_min_alarm
:
901 case hwmon_temp_max_alarm
:
902 case hwmon_temp_lcrit_alarm
:
903 case hwmon_temp_crit_alarm
:
906 case hwmon_temp_lcrit
:
907 case hwmon_temp_crit
:
908 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
911 case hwmon_temp_input
:
912 case hwmon_temp_label
:
919 case hwmon_in_min_alarm
:
920 case hwmon_in_max_alarm
:
921 case hwmon_in_lcrit_alarm
:
922 case hwmon_in_crit_alarm
:
927 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
938 case hwmon_curr_min_alarm
:
939 case hwmon_curr_max_alarm
:
940 case hwmon_curr_lcrit_alarm
:
941 case hwmon_curr_crit_alarm
:
944 case hwmon_curr_lcrit
:
945 case hwmon_curr_crit
:
946 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
949 case hwmon_curr_input
:
950 case hwmon_curr_label
:
956 /* External calibration of receive power requires
957 * floating point arithmetic. Doing that in the kernel
958 * is not easy, so just skip it. If the module does
959 * not require external calibration, we can however
960 * show receiver power, since FP is then not needed.
962 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
&&
966 case hwmon_power_min_alarm
:
967 case hwmon_power_max_alarm
:
968 case hwmon_power_lcrit_alarm
:
969 case hwmon_power_crit_alarm
:
970 case hwmon_power_min
:
971 case hwmon_power_max
:
972 case hwmon_power_lcrit
:
973 case hwmon_power_crit
:
974 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
977 case hwmon_power_input
:
978 case hwmon_power_label
:
988 static int sfp_hwmon_read_sensor(struct sfp
*sfp
, int reg
, long *value
)
993 err
= sfp_read(sfp
, true, reg
, &val
, sizeof(val
));
997 *value
= be16_to_cpu(val
);
1002 static void sfp_hwmon_to_rx_power(long *value
)
1004 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1007 static void sfp_hwmon_calibrate(struct sfp
*sfp
, unsigned int slope
, int offset
,
1010 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
)
1011 *value
= DIV_ROUND_CLOSEST(*value
* slope
, 256) + offset
;
1014 static void sfp_hwmon_calibrate_temp(struct sfp
*sfp
, long *value
)
1016 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_t_slope
),
1017 be16_to_cpu(sfp
->diag
.cal_t_offset
), value
);
1019 if (*value
>= 0x8000)
1022 *value
= DIV_ROUND_CLOSEST(*value
* 1000, 256);
1025 static void sfp_hwmon_calibrate_vcc(struct sfp
*sfp
, long *value
)
1027 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_v_slope
),
1028 be16_to_cpu(sfp
->diag
.cal_v_offset
), value
);
1030 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1033 static void sfp_hwmon_calibrate_bias(struct sfp
*sfp
, long *value
)
1035 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txi_slope
),
1036 be16_to_cpu(sfp
->diag
.cal_txi_offset
), value
);
1038 *value
= DIV_ROUND_CLOSEST(*value
, 500);
1041 static void sfp_hwmon_calibrate_tx_power(struct sfp
*sfp
, long *value
)
1043 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txpwr_slope
),
1044 be16_to_cpu(sfp
->diag
.cal_txpwr_offset
), value
);
1046 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1049 static int sfp_hwmon_read_temp(struct sfp
*sfp
, int reg
, long *value
)
1053 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1057 sfp_hwmon_calibrate_temp(sfp
, value
);
1062 static int sfp_hwmon_read_vcc(struct sfp
*sfp
, int reg
, long *value
)
1066 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1070 sfp_hwmon_calibrate_vcc(sfp
, value
);
1075 static int sfp_hwmon_read_bias(struct sfp
*sfp
, int reg
, long *value
)
1079 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1083 sfp_hwmon_calibrate_bias(sfp
, value
);
1088 static int sfp_hwmon_read_tx_power(struct sfp
*sfp
, int reg
, long *value
)
1092 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1096 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1101 static int sfp_hwmon_read_rx_power(struct sfp
*sfp
, int reg
, long *value
)
1105 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1109 sfp_hwmon_to_rx_power(value
);
1114 static int sfp_hwmon_temp(struct sfp
*sfp
, u32 attr
, long *value
)
1120 case hwmon_temp_input
:
1121 return sfp_hwmon_read_temp(sfp
, SFP_TEMP
, value
);
1123 case hwmon_temp_lcrit
:
1124 *value
= be16_to_cpu(sfp
->diag
.temp_low_alarm
);
1125 sfp_hwmon_calibrate_temp(sfp
, value
);
1128 case hwmon_temp_min
:
1129 *value
= be16_to_cpu(sfp
->diag
.temp_low_warn
);
1130 sfp_hwmon_calibrate_temp(sfp
, value
);
1132 case hwmon_temp_max
:
1133 *value
= be16_to_cpu(sfp
->diag
.temp_high_warn
);
1134 sfp_hwmon_calibrate_temp(sfp
, value
);
1137 case hwmon_temp_crit
:
1138 *value
= be16_to_cpu(sfp
->diag
.temp_high_alarm
);
1139 sfp_hwmon_calibrate_temp(sfp
, value
);
1142 case hwmon_temp_lcrit_alarm
:
1143 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1147 *value
= !!(status
& SFP_ALARM0_TEMP_LOW
);
1150 case hwmon_temp_min_alarm
:
1151 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1155 *value
= !!(status
& SFP_WARN0_TEMP_LOW
);
1158 case hwmon_temp_max_alarm
:
1159 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1163 *value
= !!(status
& SFP_WARN0_TEMP_HIGH
);
1166 case hwmon_temp_crit_alarm
:
1167 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1171 *value
= !!(status
& SFP_ALARM0_TEMP_HIGH
);
1180 static int sfp_hwmon_vcc(struct sfp
*sfp
, u32 attr
, long *value
)
1186 case hwmon_in_input
:
1187 return sfp_hwmon_read_vcc(sfp
, SFP_VCC
, value
);
1189 case hwmon_in_lcrit
:
1190 *value
= be16_to_cpu(sfp
->diag
.volt_low_alarm
);
1191 sfp_hwmon_calibrate_vcc(sfp
, value
);
1195 *value
= be16_to_cpu(sfp
->diag
.volt_low_warn
);
1196 sfp_hwmon_calibrate_vcc(sfp
, value
);
1200 *value
= be16_to_cpu(sfp
->diag
.volt_high_warn
);
1201 sfp_hwmon_calibrate_vcc(sfp
, value
);
1205 *value
= be16_to_cpu(sfp
->diag
.volt_high_alarm
);
1206 sfp_hwmon_calibrate_vcc(sfp
, value
);
1209 case hwmon_in_lcrit_alarm
:
1210 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1214 *value
= !!(status
& SFP_ALARM0_VCC_LOW
);
1217 case hwmon_in_min_alarm
:
1218 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1222 *value
= !!(status
& SFP_WARN0_VCC_LOW
);
1225 case hwmon_in_max_alarm
:
1226 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1230 *value
= !!(status
& SFP_WARN0_VCC_HIGH
);
1233 case hwmon_in_crit_alarm
:
1234 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1238 *value
= !!(status
& SFP_ALARM0_VCC_HIGH
);
1247 static int sfp_hwmon_bias(struct sfp
*sfp
, u32 attr
, long *value
)
1253 case hwmon_curr_input
:
1254 return sfp_hwmon_read_bias(sfp
, SFP_TX_BIAS
, value
);
1256 case hwmon_curr_lcrit
:
1257 *value
= be16_to_cpu(sfp
->diag
.bias_low_alarm
);
1258 sfp_hwmon_calibrate_bias(sfp
, value
);
1261 case hwmon_curr_min
:
1262 *value
= be16_to_cpu(sfp
->diag
.bias_low_warn
);
1263 sfp_hwmon_calibrate_bias(sfp
, value
);
1266 case hwmon_curr_max
:
1267 *value
= be16_to_cpu(sfp
->diag
.bias_high_warn
);
1268 sfp_hwmon_calibrate_bias(sfp
, value
);
1271 case hwmon_curr_crit
:
1272 *value
= be16_to_cpu(sfp
->diag
.bias_high_alarm
);
1273 sfp_hwmon_calibrate_bias(sfp
, value
);
1276 case hwmon_curr_lcrit_alarm
:
1277 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1281 *value
= !!(status
& SFP_ALARM0_TX_BIAS_LOW
);
1284 case hwmon_curr_min_alarm
:
1285 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1289 *value
= !!(status
& SFP_WARN0_TX_BIAS_LOW
);
1292 case hwmon_curr_max_alarm
:
1293 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1297 *value
= !!(status
& SFP_WARN0_TX_BIAS_HIGH
);
1300 case hwmon_curr_crit_alarm
:
1301 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1305 *value
= !!(status
& SFP_ALARM0_TX_BIAS_HIGH
);
1314 static int sfp_hwmon_tx_power(struct sfp
*sfp
, u32 attr
, long *value
)
1320 case hwmon_power_input
:
1321 return sfp_hwmon_read_tx_power(sfp
, SFP_TX_POWER
, value
);
1323 case hwmon_power_lcrit
:
1324 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_alarm
);
1325 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1328 case hwmon_power_min
:
1329 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_warn
);
1330 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1333 case hwmon_power_max
:
1334 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_warn
);
1335 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1338 case hwmon_power_crit
:
1339 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_alarm
);
1340 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1343 case hwmon_power_lcrit_alarm
:
1344 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1348 *value
= !!(status
& SFP_ALARM0_TXPWR_LOW
);
1351 case hwmon_power_min_alarm
:
1352 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1356 *value
= !!(status
& SFP_WARN0_TXPWR_LOW
);
1359 case hwmon_power_max_alarm
:
1360 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1364 *value
= !!(status
& SFP_WARN0_TXPWR_HIGH
);
1367 case hwmon_power_crit_alarm
:
1368 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1372 *value
= !!(status
& SFP_ALARM0_TXPWR_HIGH
);
1381 static int sfp_hwmon_rx_power(struct sfp
*sfp
, u32 attr
, long *value
)
1387 case hwmon_power_input
:
1388 return sfp_hwmon_read_rx_power(sfp
, SFP_RX_POWER
, value
);
1390 case hwmon_power_lcrit
:
1391 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_alarm
);
1392 sfp_hwmon_to_rx_power(value
);
1395 case hwmon_power_min
:
1396 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_warn
);
1397 sfp_hwmon_to_rx_power(value
);
1400 case hwmon_power_max
:
1401 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_warn
);
1402 sfp_hwmon_to_rx_power(value
);
1405 case hwmon_power_crit
:
1406 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_alarm
);
1407 sfp_hwmon_to_rx_power(value
);
1410 case hwmon_power_lcrit_alarm
:
1411 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1415 *value
= !!(status
& SFP_ALARM1_RXPWR_LOW
);
1418 case hwmon_power_min_alarm
:
1419 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1423 *value
= !!(status
& SFP_WARN1_RXPWR_LOW
);
1426 case hwmon_power_max_alarm
:
1427 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1431 *value
= !!(status
& SFP_WARN1_RXPWR_HIGH
);
1434 case hwmon_power_crit_alarm
:
1435 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1439 *value
= !!(status
& SFP_ALARM1_RXPWR_HIGH
);
1448 static int sfp_hwmon_read(struct device
*dev
, enum hwmon_sensor_types type
,
1449 u32 attr
, int channel
, long *value
)
1451 struct sfp
*sfp
= dev_get_drvdata(dev
);
1455 return sfp_hwmon_temp(sfp
, attr
, value
);
1457 return sfp_hwmon_vcc(sfp
, attr
, value
);
1459 return sfp_hwmon_bias(sfp
, attr
, value
);
1463 return sfp_hwmon_tx_power(sfp
, attr
, value
);
1465 return sfp_hwmon_rx_power(sfp
, attr
, value
);
1474 static const char *const sfp_hwmon_power_labels
[] = {
1479 static int sfp_hwmon_read_string(struct device
*dev
,
1480 enum hwmon_sensor_types type
,
1481 u32 attr
, int channel
, const char **str
)
1486 case hwmon_curr_label
:
1495 case hwmon_temp_label
:
1496 *str
= "temperature";
1504 case hwmon_in_label
:
1513 case hwmon_power_label
:
1514 *str
= sfp_hwmon_power_labels
[channel
];
1527 static const struct hwmon_ops sfp_hwmon_ops
= {
1528 .is_visible
= sfp_hwmon_is_visible
,
1529 .read
= sfp_hwmon_read
,
1530 .read_string
= sfp_hwmon_read_string
,
1533 static const struct hwmon_channel_info
* const sfp_hwmon_info
[] = {
1534 HWMON_CHANNEL_INFO(chip
,
1535 HWMON_C_REGISTER_TZ
),
1536 HWMON_CHANNEL_INFO(in
,
1538 HWMON_I_MAX
| HWMON_I_MIN
|
1539 HWMON_I_MAX_ALARM
| HWMON_I_MIN_ALARM
|
1540 HWMON_I_CRIT
| HWMON_I_LCRIT
|
1541 HWMON_I_CRIT_ALARM
| HWMON_I_LCRIT_ALARM
|
1543 HWMON_CHANNEL_INFO(temp
,
1545 HWMON_T_MAX
| HWMON_T_MIN
|
1546 HWMON_T_MAX_ALARM
| HWMON_T_MIN_ALARM
|
1547 HWMON_T_CRIT
| HWMON_T_LCRIT
|
1548 HWMON_T_CRIT_ALARM
| HWMON_T_LCRIT_ALARM
|
1550 HWMON_CHANNEL_INFO(curr
,
1552 HWMON_C_MAX
| HWMON_C_MIN
|
1553 HWMON_C_MAX_ALARM
| HWMON_C_MIN_ALARM
|
1554 HWMON_C_CRIT
| HWMON_C_LCRIT
|
1555 HWMON_C_CRIT_ALARM
| HWMON_C_LCRIT_ALARM
|
1557 HWMON_CHANNEL_INFO(power
,
1558 /* Transmit power */
1560 HWMON_P_MAX
| HWMON_P_MIN
|
1561 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1562 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1563 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1567 HWMON_P_MAX
| HWMON_P_MIN
|
1568 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1569 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1570 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1575 static const struct hwmon_chip_info sfp_hwmon_chip_info
= {
1576 .ops
= &sfp_hwmon_ops
,
1577 .info
= sfp_hwmon_info
,
1580 static void sfp_hwmon_probe(struct work_struct
*work
)
1582 struct sfp
*sfp
= container_of(work
, struct sfp
, hwmon_probe
.work
);
1585 /* hwmon interface needs to access 16bit registers in atomic way to
1586 * guarantee coherency of the diagnostic monitoring data. If it is not
1587 * possible to guarantee coherency because EEPROM is broken in such way
1588 * that does not support atomic 16bit read operation then we have to
1589 * skip registration of hwmon device.
1591 if (sfp
->i2c_block_size
< 2) {
1593 "skipping hwmon device registration due to broken EEPROM\n");
1595 "diagnostic EEPROM area cannot be read atomically to guarantee data coherency\n");
1599 err
= sfp_read(sfp
, true, 0, &sfp
->diag
, sizeof(sfp
->diag
));
1601 if (sfp
->hwmon_tries
--) {
1602 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
,
1603 T_PROBE_RETRY_SLOW
);
1605 dev_warn(sfp
->dev
, "hwmon probe failed: %pe\n",
1611 sfp
->hwmon_name
= hwmon_sanitize_name(dev_name(sfp
->dev
));
1612 if (IS_ERR(sfp
->hwmon_name
)) {
1613 dev_err(sfp
->dev
, "out of memory for hwmon name\n");
1617 sfp
->hwmon_dev
= hwmon_device_register_with_info(sfp
->dev
,
1618 sfp
->hwmon_name
, sfp
,
1619 &sfp_hwmon_chip_info
,
1621 if (IS_ERR(sfp
->hwmon_dev
))
1622 dev_err(sfp
->dev
, "failed to register hwmon device: %ld\n",
1623 PTR_ERR(sfp
->hwmon_dev
));
1626 static int sfp_hwmon_insert(struct sfp
*sfp
)
1628 if (sfp
->have_a2
&& sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
) {
1629 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
, 1);
1630 sfp
->hwmon_tries
= R_PROBE_RETRY_SLOW
;
1636 static void sfp_hwmon_remove(struct sfp
*sfp
)
1638 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1639 if (!IS_ERR_OR_NULL(sfp
->hwmon_dev
)) {
1640 hwmon_device_unregister(sfp
->hwmon_dev
);
1641 sfp
->hwmon_dev
= NULL
;
1642 kfree(sfp
->hwmon_name
);
1646 static int sfp_hwmon_init(struct sfp
*sfp
)
1648 INIT_DELAYED_WORK(&sfp
->hwmon_probe
, sfp_hwmon_probe
);
1653 static void sfp_hwmon_exit(struct sfp
*sfp
)
1655 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1658 static int sfp_hwmon_insert(struct sfp
*sfp
)
1663 static void sfp_hwmon_remove(struct sfp
*sfp
)
1667 static int sfp_hwmon_init(struct sfp
*sfp
)
1672 static void sfp_hwmon_exit(struct sfp
*sfp
)
1678 static void sfp_module_tx_disable(struct sfp
*sfp
)
1680 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1681 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 1);
1682 sfp_mod_state(sfp
, SFP_F_TX_DISABLE
, SFP_F_TX_DISABLE
);
1685 static void sfp_module_tx_enable(struct sfp
*sfp
)
1687 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1688 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 0);
1689 sfp_mod_state(sfp
, SFP_F_TX_DISABLE
, 0);
1692 #if IS_ENABLED(CONFIG_DEBUG_FS)
1693 static int sfp_debug_state_show(struct seq_file
*s
, void *data
)
1695 struct sfp
*sfp
= s
->private;
1697 seq_printf(s
, "Module state: %s\n",
1698 mod_state_to_str(sfp
->sm_mod_state
));
1699 seq_printf(s
, "Module probe attempts: %d %d\n",
1700 R_PROBE_RETRY_INIT
- sfp
->sm_mod_tries_init
,
1701 R_PROBE_RETRY_SLOW
- sfp
->sm_mod_tries
);
1702 seq_printf(s
, "Device state: %s\n",
1703 dev_state_to_str(sfp
->sm_dev_state
));
1704 seq_printf(s
, "Main state: %s\n",
1705 sm_state_to_str(sfp
->sm_state
));
1706 seq_printf(s
, "Fault recovery remaining retries: %d\n",
1707 sfp
->sm_fault_retries
);
1708 seq_printf(s
, "PHY probe remaining retries: %d\n",
1709 sfp
->sm_phy_retries
);
1710 seq_printf(s
, "Signalling rate: %u kBd\n", sfp
->rate_kbd
);
1711 seq_printf(s
, "Rate select threshold: %u kBd\n",
1712 sfp
->rs_threshold_kbd
);
1713 seq_printf(s
, "moddef0: %d\n", !!(sfp
->state
& SFP_F_PRESENT
));
1714 seq_printf(s
, "rx_los: %d\n", !!(sfp
->state
& SFP_F_LOS
));
1715 seq_printf(s
, "tx_fault: %d\n", !!(sfp
->state
& SFP_F_TX_FAULT
));
1716 seq_printf(s
, "tx_disable: %d\n", !!(sfp
->state
& SFP_F_TX_DISABLE
));
1717 seq_printf(s
, "rs0: %d\n", !!(sfp
->state
& SFP_F_RS0
));
1718 seq_printf(s
, "rs1: %d\n", !!(sfp
->state
& SFP_F_RS1
));
1721 DEFINE_SHOW_ATTRIBUTE(sfp_debug_state
);
1723 static void sfp_debugfs_init(struct sfp
*sfp
)
1725 sfp
->debugfs_dir
= debugfs_create_dir(dev_name(sfp
->dev
), NULL
);
1727 debugfs_create_file("state", 0600, sfp
->debugfs_dir
, sfp
,
1728 &sfp_debug_state_fops
);
1731 static void sfp_debugfs_exit(struct sfp
*sfp
)
1733 debugfs_remove_recursive(sfp
->debugfs_dir
);
1736 static void sfp_debugfs_init(struct sfp
*sfp
)
1740 static void sfp_debugfs_exit(struct sfp
*sfp
)
1745 static void sfp_module_tx_fault_reset(struct sfp
*sfp
)
1749 mutex_lock(&sfp
->st_mutex
);
1751 if (!(state
& SFP_F_TX_DISABLE
)) {
1752 sfp_set_state(sfp
, state
| SFP_F_TX_DISABLE
);
1756 sfp_set_state(sfp
, state
);
1758 mutex_unlock(&sfp
->st_mutex
);
1761 /* SFP state machine */
1762 static void sfp_sm_set_timer(struct sfp
*sfp
, unsigned int timeout
)
1765 mod_delayed_work(system_power_efficient_wq
, &sfp
->timeout
,
1768 cancel_delayed_work(&sfp
->timeout
);
1771 static void sfp_sm_next(struct sfp
*sfp
, unsigned int state
,
1772 unsigned int timeout
)
1774 sfp
->sm_state
= state
;
1775 sfp_sm_set_timer(sfp
, timeout
);
1778 static void sfp_sm_mod_next(struct sfp
*sfp
, unsigned int state
,
1779 unsigned int timeout
)
1781 sfp
->sm_mod_state
= state
;
1782 sfp_sm_set_timer(sfp
, timeout
);
1785 static void sfp_sm_phy_detach(struct sfp
*sfp
)
1787 sfp_remove_phy(sfp
->sfp_bus
);
1788 phy_device_remove(sfp
->mod_phy
);
1789 phy_device_free(sfp
->mod_phy
);
1790 sfp
->mod_phy
= NULL
;
1793 static int sfp_sm_probe_phy(struct sfp
*sfp
, int addr
, bool is_c45
)
1795 struct phy_device
*phy
;
1798 phy
= get_phy_device(sfp
->i2c_mii
, addr
, is_c45
);
1799 if (phy
== ERR_PTR(-ENODEV
))
1800 return PTR_ERR(phy
);
1802 dev_err(sfp
->dev
, "mdiobus scan returned %pe\n", phy
);
1803 return PTR_ERR(phy
);
1806 /* Mark this PHY as being on a SFP module */
1807 phy
->is_on_sfp_module
= true;
1809 err
= phy_device_register(phy
);
1811 phy_device_free(phy
);
1812 dev_err(sfp
->dev
, "phy_device_register failed: %pe\n",
1817 err
= sfp_add_phy(sfp
->sfp_bus
, phy
);
1819 phy_device_remove(phy
);
1820 phy_device_free(phy
);
1821 dev_err(sfp
->dev
, "sfp_add_phy failed: %pe\n", ERR_PTR(err
));
1830 static void sfp_sm_link_up(struct sfp
*sfp
)
1832 sfp_link_up(sfp
->sfp_bus
);
1833 sfp_sm_next(sfp
, SFP_S_LINK_UP
, 0);
1836 static void sfp_sm_link_down(struct sfp
*sfp
)
1838 sfp_link_down(sfp
->sfp_bus
);
1841 static void sfp_sm_link_check_los(struct sfp
*sfp
)
1843 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1844 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1845 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1848 /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1849 * are set, we assume that no LOS signal is available. If both are
1850 * set, we assume LOS is not implemented (and is meaningless.)
1852 if (los_options
== los_inverted
)
1853 los
= !(sfp
->state
& SFP_F_LOS
);
1854 else if (los_options
== los_normal
)
1855 los
= !!(sfp
->state
& SFP_F_LOS
);
1858 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
1860 sfp_sm_link_up(sfp
);
1863 static bool sfp_los_event_active(struct sfp
*sfp
, unsigned int event
)
1865 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1866 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1867 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1869 return (los_options
== los_inverted
&& event
== SFP_E_LOS_LOW
) ||
1870 (los_options
== los_normal
&& event
== SFP_E_LOS_HIGH
);
1873 static bool sfp_los_event_inactive(struct sfp
*sfp
, unsigned int event
)
1875 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1876 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1877 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1879 return (los_options
== los_inverted
&& event
== SFP_E_LOS_HIGH
) ||
1880 (los_options
== los_normal
&& event
== SFP_E_LOS_LOW
);
1883 static void sfp_sm_fault(struct sfp
*sfp
, unsigned int next_state
, bool warn
)
1885 if (sfp
->sm_fault_retries
&& !--sfp
->sm_fault_retries
) {
1887 "module persistently indicates fault, disabling\n");
1888 sfp_sm_next(sfp
, SFP_S_TX_DISABLE
, 0);
1891 dev_err(sfp
->dev
, "module transmit fault indicated\n");
1893 sfp_sm_next(sfp
, next_state
, T_FAULT_RECOVER
);
1897 static int sfp_sm_add_mdio_bus(struct sfp
*sfp
)
1899 if (sfp
->mdio_protocol
!= MDIO_I2C_NONE
)
1900 return sfp_i2c_mdiobus_create(sfp
);
1905 /* Probe a SFP for a PHY device if the module supports copper - the PHY
1906 * normally sits at I2C bus address 0x56, and may either be a clause 22
1909 * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1910 * negotiation enabled, but some may be in 1000base-X - which is for the
1911 * PHY driver to determine.
1913 * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1914 * mode according to the negotiated line speed.
1916 static int sfp_sm_probe_for_phy(struct sfp
*sfp
)
1920 switch (sfp
->mdio_protocol
) {
1924 case MDIO_I2C_MARVELL_C22
:
1925 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR
, false);
1929 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR
, true);
1932 case MDIO_I2C_ROLLBALL
:
1933 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR_ROLLBALL
, true);
1940 static int sfp_module_parse_power(struct sfp
*sfp
)
1942 u32 power_mW
= 1000;
1945 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV10_2
&&
1946 sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_POWER_DECL
))
1948 /* Added in Rev 11.9, but there is no compliance code for this */
1949 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV11_4
&&
1950 sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL
))
1953 /* Power level 1 modules (max. 1W) are always supported. */
1954 if (power_mW
<= 1000) {
1955 sfp
->module_power_mW
= power_mW
;
1959 supports_a2
= sfp
->id
.ext
.sff8472_compliance
!=
1960 SFP_SFF8472_COMPLIANCE_NONE
||
1961 sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
;
1963 if (power_mW
> sfp
->max_power_mW
) {
1964 /* Module power specification exceeds the allowed maximum. */
1966 /* The module appears not to implement bus address
1967 * 0xa2, so assume that the module powers up in the
1971 "Host does not support %u.%uW modules\n",
1972 power_mW
/ 1000, (power_mW
/ 100) % 10);
1976 "Host does not support %u.%uW modules, module left in power mode 1\n",
1977 power_mW
/ 1000, (power_mW
/ 100) % 10);
1983 /* The module power level is below the host maximum and the
1984 * module appears not to implement bus address 0xa2, so assume
1985 * that the module powers up in the indicated mode.
1990 /* If the module requires a higher power mode, but also requires
1991 * an address change sequence, warn the user that the module may
1992 * not be functional.
1994 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
) {
1996 "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1997 power_mW
/ 1000, (power_mW
/ 100) % 10);
2001 sfp
->module_power_mW
= power_mW
;
2006 static int sfp_sm_mod_hpower(struct sfp
*sfp
, bool enable
)
2010 err
= sfp_modify_u8(sfp
, true, SFP_EXT_STATUS
,
2011 SFP_EXT_STATUS_PWRLVL_SELECT
,
2012 enable
? SFP_EXT_STATUS_PWRLVL_SELECT
: 0);
2013 if (err
!= sizeof(u8
)) {
2014 dev_err(sfp
->dev
, "failed to %sable high power: %pe\n",
2015 enable
? "en" : "dis", ERR_PTR(err
));
2020 dev_info(sfp
->dev
, "Module switched to %u.%uW power level\n",
2021 sfp
->module_power_mW
/ 1000,
2022 (sfp
->module_power_mW
/ 100) % 10);
2027 static void sfp_module_parse_rate_select(struct sfp
*sfp
)
2031 sfp
->rs_threshold_kbd
= 0;
2032 sfp
->rs_state_mask
= 0;
2034 if (!(sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_RATE_SELECT
)))
2035 /* No support for RateSelect */
2038 /* Default to INF-8074 RateSelect operation. The signalling threshold
2039 * rate is not well specified, so always select "Full Bandwidth", but
2040 * SFF-8079 reveals that it is understood that RS0 will be low for
2041 * 1.0625Gb/s and high for 2.125Gb/s. Choose a value half-way between.
2042 * This method exists prior to SFF-8472.
2044 sfp
->rs_state_mask
= SFP_F_RS0
;
2045 sfp
->rs_threshold_kbd
= 1594;
2047 /* Parse the rate identifier, which is complicated due to history:
2048 * SFF-8472 rev 9.5 marks this field as reserved.
2049 * SFF-8079 references SFF-8472 rev 9.5 and defines bit 0. SFF-8472
2050 * compliance is not required.
2051 * SFF-8472 rev 10.2 defines this field using values 0..4
2052 * SFF-8472 rev 11.0 redefines this field with bit 0 for SFF-8079
2055 rate_id
= sfp
->id
.base
.rate_id
;
2060 /* SFF-8472 rev 10.0..10.4 did not account for SFF-8079 using bit 0,
2061 * and allocated value 3 to SFF-8431 independent tx/rx rate select.
2062 * Convert this to a SFF-8472 rev 11.0 rate identifier.
2064 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV10_2
&&
2065 sfp
->id
.ext
.sff8472_compliance
< SFP_SFF8472_COMPLIANCE_REV11_0
&&
2067 rate_id
= SFF_RID_8431
;
2069 if (rate_id
& SFF_RID_8079
) {
2070 /* SFF-8079 RateSelect / Application Select in conjunction with
2071 * SFF-8472 rev 9.5. SFF-8079 defines rate_id as a bitfield
2072 * with only bit 0 used, which takes precedence over SFF-8472.
2074 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_APP_SELECT_SFF8079
)) {
2075 /* SFF-8079 Part 1 - rate selection between Fibre
2076 * Channel 1.0625/2.125/4.25 Gbd modes. Note that RS0
2077 * is high for 2125, so we have to subtract 1 to
2080 sfp
->rs_threshold_kbd
= 2125 - 1;
2081 sfp
->rs_state_mask
= SFP_F_RS0
;
2086 /* SFF-8472 rev 9.5 does not define the rate identifier */
2087 if (sfp
->id
.ext
.sff8472_compliance
<= SFP_SFF8472_COMPLIANCE_REV9_5
)
2090 /* SFF-8472 rev 11.0 defines rate_id as a numerical value which will
2091 * always have bit 0 clear due to SFF-8079's bitfield usage of rate_id.
2094 case SFF_RID_8431_RX_ONLY
:
2095 sfp
->rs_threshold_kbd
= 4250;
2096 sfp
->rs_state_mask
= SFP_F_RS0
;
2099 case SFF_RID_8431_TX_ONLY
:
2100 sfp
->rs_threshold_kbd
= 4250;
2101 sfp
->rs_state_mask
= SFP_F_RS1
;
2105 sfp
->rs_threshold_kbd
= 4250;
2106 sfp
->rs_state_mask
= SFP_F_RS0
| SFP_F_RS1
;
2110 sfp
->rs_threshold_kbd
= 9000;
2111 sfp
->rs_state_mask
= SFP_F_RS0
| SFP_F_RS1
;
2116 /* GPON modules based on Realtek RTL8672 and RTL9601C chips (e.g. V-SOL
2117 * V2801F, CarlitoxxPro CPGOS03-0490, Ubiquiti U-Fiber Instant, ...) do
2118 * not support multibyte reads from the EEPROM. Each multi-byte read
2119 * operation returns just one byte of EEPROM followed by zeros. There is
2120 * no way to identify which modules are using Realtek RTL8672 and RTL9601C
2121 * chips. Moreover every OEM of V-SOL V2801F module puts its own vendor
2122 * name and vendor id into EEPROM, so there is even no way to detect if
2123 * module is V-SOL V2801F. Therefore check for those zeros in the read
2124 * data and then based on check switch to reading EEPROM to one byte
2127 static bool sfp_id_needs_byte_io(struct sfp
*sfp
, void *buf
, size_t len
)
2129 size_t i
, block_size
= sfp
->i2c_block_size
;
2131 /* Already using byte IO */
2132 if (block_size
== 1)
2135 for (i
= 1; i
< len
; i
+= block_size
) {
2136 if (memchr_inv(buf
+ i
, '\0', min(block_size
- 1, len
- i
)))
2142 static int sfp_cotsworks_fixup_check(struct sfp
*sfp
, struct sfp_eeprom_id
*id
)
2147 if (id
->base
.phys_id
!= SFF8024_ID_SFF_8472
||
2148 id
->base
.phys_ext_id
!= SFP_PHYS_EXT_ID_SFP
||
2149 id
->base
.connector
!= SFF8024_CONNECTOR_LC
) {
2150 dev_warn(sfp
->dev
, "Rewriting fiber module EEPROM with corrected values\n");
2151 id
->base
.phys_id
= SFF8024_ID_SFF_8472
;
2152 id
->base
.phys_ext_id
= SFP_PHYS_EXT_ID_SFP
;
2153 id
->base
.connector
= SFF8024_CONNECTOR_LC
;
2154 err
= sfp_write(sfp
, false, SFP_PHYS_ID
, &id
->base
, 3);
2157 "Failed to rewrite module EEPROM: %pe\n",
2162 /* Cotsworks modules have been found to require a delay between write operations. */
2165 /* Update base structure checksum */
2166 check
= sfp_check(&id
->base
, sizeof(id
->base
) - 1);
2167 err
= sfp_write(sfp
, false, SFP_CC_BASE
, &check
, 1);
2170 "Failed to update base structure checksum in fiber module EEPROM: %pe\n",
2178 static int sfp_module_parse_sff8472(struct sfp
*sfp
)
2180 /* If the module requires address swap mode, warn about it */
2181 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)
2183 "module address swap to access page 0xA2 is not supported.\n");
2185 sfp
->have_a2
= true;
2190 static int sfp_sm_mod_probe(struct sfp
*sfp
, bool report
)
2192 /* SFP module inserted - read I2C data */
2193 struct sfp_eeprom_id id
;
2194 bool cotsworks_sfbg
;
2200 sfp
->i2c_block_size
= SFP_EEPROM_BLOCK_SIZE
;
2202 ret
= sfp_read(sfp
, false, 0, &id
.base
, sizeof(id
.base
));
2205 dev_err(sfp
->dev
, "failed to read EEPROM: %pe\n",
2210 if (ret
!= sizeof(id
.base
)) {
2211 dev_err(sfp
->dev
, "EEPROM short read: %pe\n", ERR_PTR(ret
));
2215 /* Some SFP modules (e.g. Nokia 3FE46541AA) lock up if read from
2216 * address 0x51 is just one byte at a time. Also SFF-8472 requires
2217 * that EEPROM supports atomic 16bit read operation for diagnostic
2218 * fields, so do not switch to one byte reading at a time unless it
2219 * is really required and we have no other option.
2221 if (sfp_id_needs_byte_io(sfp
, &id
.base
, sizeof(id
.base
))) {
2223 "Detected broken RTL8672/RTL9601C emulated EEPROM\n");
2225 "Switching to reading EEPROM to one byte at a time\n");
2226 sfp
->i2c_block_size
= 1;
2228 ret
= sfp_read(sfp
, false, 0, &id
.base
, sizeof(id
.base
));
2232 "failed to read EEPROM: %pe\n",
2237 if (ret
!= sizeof(id
.base
)) {
2238 dev_err(sfp
->dev
, "EEPROM short read: %pe\n",
2244 /* Cotsworks do not seem to update the checksums when they
2245 * do the final programming with the final module part number,
2246 * serial number and date code.
2248 cotsworks
= !memcmp(id
.base
.vendor_name
, "COTSWORKS ", 16);
2249 cotsworks_sfbg
= !memcmp(id
.base
.vendor_pn
, "SFBG", 4);
2251 /* Cotsworks SFF module EEPROM do not always have valid phys_id,
2252 * phys_ext_id, and connector bytes. Rewrite SFF EEPROM bytes if
2253 * Cotsworks PN matches and bytes are not correct.
2255 if (cotsworks
&& cotsworks_sfbg
) {
2256 ret
= sfp_cotsworks_fixup_check(sfp
, &id
);
2261 /* Validate the checksum over the base structure */
2262 check
= sfp_check(&id
.base
, sizeof(id
.base
) - 1);
2263 if (check
!= id
.base
.cc_base
) {
2266 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
2267 check
, id
.base
.cc_base
);
2270 "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
2271 check
, id
.base
.cc_base
);
2272 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
2273 16, 1, &id
, sizeof(id
), true);
2278 ret
= sfp_read(sfp
, false, SFP_CC_BASE
+ 1, &id
.ext
, sizeof(id
.ext
));
2281 dev_err(sfp
->dev
, "failed to read EEPROM: %pe\n",
2286 if (ret
!= sizeof(id
.ext
)) {
2287 dev_err(sfp
->dev
, "EEPROM short read: %pe\n", ERR_PTR(ret
));
2291 check
= sfp_check(&id
.ext
, sizeof(id
.ext
) - 1);
2292 if (check
!= id
.ext
.cc_ext
) {
2295 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
2296 check
, id
.ext
.cc_ext
);
2299 "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
2300 check
, id
.ext
.cc_ext
);
2301 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
2302 16, 1, &id
, sizeof(id
), true);
2303 memset(&id
.ext
, 0, sizeof(id
.ext
));
2309 dev_info(sfp
->dev
, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
2310 (int)sizeof(id
.base
.vendor_name
), id
.base
.vendor_name
,
2311 (int)sizeof(id
.base
.vendor_pn
), id
.base
.vendor_pn
,
2312 (int)sizeof(id
.base
.vendor_rev
), id
.base
.vendor_rev
,
2313 (int)sizeof(id
.ext
.vendor_sn
), id
.ext
.vendor_sn
,
2314 (int)sizeof(id
.ext
.datecode
), id
.ext
.datecode
);
2316 /* Check whether we support this module */
2317 if (!sfp
->type
->module_supported(&id
)) {
2319 "module is not supported - phys id 0x%02x 0x%02x\n",
2320 sfp
->id
.base
.phys_id
, sfp
->id
.base
.phys_ext_id
);
2324 if (sfp
->id
.ext
.sff8472_compliance
!= SFP_SFF8472_COMPLIANCE_NONE
) {
2325 ret
= sfp_module_parse_sff8472(sfp
);
2330 /* Parse the module power requirement */
2331 ret
= sfp_module_parse_power(sfp
);
2335 sfp_module_parse_rate_select(sfp
);
2337 mask
= SFP_F_PRESENT
;
2338 if (sfp
->gpio
[GPIO_TX_DISABLE
])
2339 mask
|= SFP_F_TX_DISABLE
;
2340 if (sfp
->gpio
[GPIO_TX_FAULT
])
2341 mask
|= SFP_F_TX_FAULT
;
2342 if (sfp
->gpio
[GPIO_LOS
])
2344 if (sfp
->gpio
[GPIO_RS0
])
2346 if (sfp
->gpio
[GPIO_RS1
])
2349 sfp
->module_t_start_up
= T_START_UP
;
2350 sfp
->module_t_wait
= T_WAIT
;
2351 sfp
->phy_t_retry
= T_PHY_RETRY
;
2353 sfp
->state_ignore_mask
= 0;
2355 if (sfp
->id
.base
.extended_cc
== SFF8024_ECC_10GBASE_T_SFI
||
2356 sfp
->id
.base
.extended_cc
== SFF8024_ECC_10GBASE_T_SR
||
2357 sfp
->id
.base
.extended_cc
== SFF8024_ECC_5GBASE_T
||
2358 sfp
->id
.base
.extended_cc
== SFF8024_ECC_2_5GBASE_T
)
2359 sfp
->mdio_protocol
= MDIO_I2C_C45
;
2360 else if (sfp
->id
.base
.e1000_base_t
)
2361 sfp
->mdio_protocol
= MDIO_I2C_MARVELL_C22
;
2363 sfp
->mdio_protocol
= MDIO_I2C_NONE
;
2365 sfp
->quirk
= sfp_lookup_quirk(&id
);
2367 mutex_lock(&sfp
->st_mutex
);
2368 /* Initialise state bits to use from hardware */
2369 sfp
->state_hw_mask
= mask
;
2371 /* We want to drive the rate select pins that the module is using */
2372 sfp
->state_hw_drive
|= sfp
->rs_state_mask
;
2374 if (sfp
->quirk
&& sfp
->quirk
->fixup
)
2375 sfp
->quirk
->fixup(sfp
);
2377 sfp
->state_hw_mask
&= ~sfp
->state_ignore_mask
;
2378 mutex_unlock(&sfp
->st_mutex
);
2383 static void sfp_sm_mod_remove(struct sfp
*sfp
)
2385 if (sfp
->sm_mod_state
> SFP_MOD_WAITDEV
)
2386 sfp_module_remove(sfp
->sfp_bus
);
2388 sfp_hwmon_remove(sfp
);
2390 memset(&sfp
->id
, 0, sizeof(sfp
->id
));
2391 sfp
->module_power_mW
= 0;
2392 sfp
->state_hw_drive
= SFP_F_TX_DISABLE
;
2393 sfp
->have_a2
= false;
2395 dev_info(sfp
->dev
, "module removed\n");
2398 /* This state machine tracks the upstream's state */
2399 static void sfp_sm_device(struct sfp
*sfp
, unsigned int event
)
2401 switch (sfp
->sm_dev_state
) {
2403 if (event
== SFP_E_DEV_ATTACH
)
2404 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
2408 if (event
== SFP_E_DEV_DETACH
)
2409 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
2410 else if (event
== SFP_E_DEV_UP
)
2411 sfp
->sm_dev_state
= SFP_DEV_UP
;
2415 if (event
== SFP_E_DEV_DETACH
)
2416 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
2417 else if (event
== SFP_E_DEV_DOWN
)
2418 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
2423 /* This state machine tracks the insert/remove state of the module, probes
2424 * the on-board EEPROM, and sets up the power level.
2426 static void sfp_sm_module(struct sfp
*sfp
, unsigned int event
)
2430 /* Handle remove event globally, it resets this state machine */
2431 if (event
== SFP_E_REMOVE
) {
2432 sfp_sm_mod_remove(sfp
);
2433 sfp_sm_mod_next(sfp
, SFP_MOD_EMPTY
, 0);
2437 /* Handle device detach globally */
2438 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
&&
2439 sfp
->sm_mod_state
> SFP_MOD_WAITDEV
) {
2440 if (sfp
->module_power_mW
> 1000 &&
2441 sfp
->sm_mod_state
> SFP_MOD_HPOWER
)
2442 sfp_sm_mod_hpower(sfp
, false);
2443 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
2447 switch (sfp
->sm_mod_state
) {
2449 if (event
== SFP_E_INSERT
) {
2450 sfp_sm_mod_next(sfp
, SFP_MOD_PROBE
, T_SERIAL
);
2451 sfp
->sm_mod_tries_init
= R_PROBE_RETRY_INIT
;
2452 sfp
->sm_mod_tries
= R_PROBE_RETRY_SLOW
;
2457 /* Wait for T_PROBE_INIT to time out */
2458 if (event
!= SFP_E_TIMEOUT
)
2461 err
= sfp_sm_mod_probe(sfp
, sfp
->sm_mod_tries
== 1);
2462 if (err
== -EAGAIN
) {
2463 if (sfp
->sm_mod_tries_init
&&
2464 --sfp
->sm_mod_tries_init
) {
2465 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
2467 } else if (sfp
->sm_mod_tries
&& --sfp
->sm_mod_tries
) {
2468 if (sfp
->sm_mod_tries
== R_PROBE_RETRY_SLOW
- 1)
2470 "please wait, module slow to respond\n");
2471 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_SLOW
);
2476 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2480 /* Force a poll to re-read the hardware signal state after
2481 * sfp_sm_mod_probe() changed state_hw_mask.
2483 mod_delayed_work(system_wq
, &sfp
->poll
, 1);
2485 err
= sfp_hwmon_insert(sfp
);
2487 dev_warn(sfp
->dev
, "hwmon probe failed: %pe\n",
2490 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
2492 case SFP_MOD_WAITDEV
:
2493 /* Ensure that the device is attached before proceeding */
2494 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
)
2497 /* Report the module insertion to the upstream device */
2498 err
= sfp_module_insert(sfp
->sfp_bus
, &sfp
->id
,
2501 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2505 /* If this is a power level 1 module, we are done */
2506 if (sfp
->module_power_mW
<= 1000)
2509 sfp_sm_mod_next(sfp
, SFP_MOD_HPOWER
, 0);
2511 case SFP_MOD_HPOWER
:
2512 /* Enable high power mode */
2513 err
= sfp_sm_mod_hpower(sfp
, true);
2515 if (err
!= -EAGAIN
) {
2516 sfp_module_remove(sfp
->sfp_bus
);
2517 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2519 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
2524 sfp_sm_mod_next(sfp
, SFP_MOD_WAITPWR
, T_HPOWER_LEVEL
);
2527 case SFP_MOD_WAITPWR
:
2528 /* Wait for T_HPOWER_LEVEL to time out */
2529 if (event
!= SFP_E_TIMEOUT
)
2533 sfp_sm_mod_next(sfp
, SFP_MOD_PRESENT
, 0);
2536 case SFP_MOD_PRESENT
:
2542 static void sfp_sm_main(struct sfp
*sfp
, unsigned int event
)
2544 unsigned long timeout
;
2547 /* Some events are global */
2548 if (sfp
->sm_state
!= SFP_S_DOWN
&&
2549 (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
2550 sfp
->sm_dev_state
!= SFP_DEV_UP
)) {
2551 if (sfp
->sm_state
== SFP_S_LINK_UP
&&
2552 sfp
->sm_dev_state
== SFP_DEV_UP
)
2553 sfp_sm_link_down(sfp
);
2554 if (sfp
->sm_state
> SFP_S_INIT
)
2555 sfp_module_stop(sfp
->sfp_bus
);
2557 sfp_sm_phy_detach(sfp
);
2559 sfp_i2c_mdiobus_destroy(sfp
);
2560 sfp_module_tx_disable(sfp
);
2561 sfp_soft_stop_poll(sfp
);
2562 sfp_sm_next(sfp
, SFP_S_DOWN
, 0);
2566 /* The main state machine */
2567 switch (sfp
->sm_state
) {
2569 if (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
2570 sfp
->sm_dev_state
!= SFP_DEV_UP
)
2573 /* Only use the soft state bits if we have access to the A2h
2574 * memory, which implies that we have some level of SFF-8472
2578 sfp_soft_start_poll(sfp
);
2580 sfp_module_tx_enable(sfp
);
2582 /* Initialise the fault clearance retries */
2583 sfp
->sm_fault_retries
= N_FAULT_INIT
;
2585 /* We need to check the TX_FAULT state, which is not defined
2586 * while TX_DISABLE is asserted. The earliest we want to do
2587 * anything (such as probe for a PHY) is 50ms (or more on
2588 * specific modules).
2590 sfp_sm_next(sfp
, SFP_S_WAIT
, sfp
->module_t_wait
);
2594 if (event
!= SFP_E_TIMEOUT
)
2597 if (sfp
->state
& SFP_F_TX_FAULT
) {
2598 /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
2599 * from the TX_DISABLE deassertion for the module to
2600 * initialise, which is indicated by TX_FAULT
2603 timeout
= sfp
->module_t_start_up
;
2604 if (timeout
> sfp
->module_t_wait
)
2605 timeout
-= sfp
->module_t_wait
;
2609 sfp_sm_next(sfp
, SFP_S_INIT
, timeout
);
2611 /* TX_FAULT is not asserted, assume the module has
2612 * finished initialising.
2619 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
2620 /* TX_FAULT is still asserted after t_init
2621 * or t_start_up, so assume there is a fault.
2623 sfp_sm_fault(sfp
, SFP_S_INIT_TX_FAULT
,
2624 sfp
->sm_fault_retries
== N_FAULT_INIT
);
2625 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
2627 /* Create mdiobus and start trying for PHY */
2628 ret
= sfp_sm_add_mdio_bus(sfp
);
2630 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2633 sfp
->sm_phy_retries
= R_PHY_RETRY
;
2638 case SFP_S_INIT_PHY
:
2639 if (event
!= SFP_E_TIMEOUT
)
2642 /* TX_FAULT deasserted or we timed out with TX_FAULT
2643 * clear. Probe for the PHY and check the LOS state.
2645 ret
= sfp_sm_probe_for_phy(sfp
);
2646 if (ret
== -ENODEV
) {
2647 if (--sfp
->sm_phy_retries
) {
2648 sfp_sm_next(sfp
, SFP_S_INIT_PHY
,
2651 "no PHY detected, %u tries left\n",
2652 sfp
->sm_phy_retries
);
2655 dev_info(sfp
->dev
, "no PHY detected\n");
2658 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2661 if (sfp_module_start(sfp
->sfp_bus
)) {
2662 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2665 sfp_sm_link_check_los(sfp
);
2667 /* Reset the fault retry count */
2668 sfp
->sm_fault_retries
= N_FAULT
;
2671 case SFP_S_INIT_TX_FAULT
:
2672 if (event
== SFP_E_TIMEOUT
) {
2673 sfp_module_tx_fault_reset(sfp
);
2674 sfp_sm_next(sfp
, SFP_S_INIT
, sfp
->module_t_start_up
);
2678 case SFP_S_WAIT_LOS
:
2679 if (event
== SFP_E_TX_FAULT
)
2680 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2681 else if (sfp_los_event_inactive(sfp
, event
))
2682 sfp_sm_link_up(sfp
);
2686 if (event
== SFP_E_TX_FAULT
) {
2687 sfp_sm_link_down(sfp
);
2688 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2689 } else if (sfp_los_event_active(sfp
, event
)) {
2690 sfp_sm_link_down(sfp
);
2691 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
2695 case SFP_S_TX_FAULT
:
2696 if (event
== SFP_E_TIMEOUT
) {
2697 sfp_module_tx_fault_reset(sfp
);
2698 sfp_sm_next(sfp
, SFP_S_REINIT
, sfp
->module_t_start_up
);
2703 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
2704 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, false);
2705 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
2706 dev_info(sfp
->dev
, "module transmit fault recovered\n");
2707 sfp_sm_link_check_los(sfp
);
2711 case SFP_S_TX_DISABLE
:
2716 static void __sfp_sm_event(struct sfp
*sfp
, unsigned int event
)
2718 dev_dbg(sfp
->dev
, "SM: enter %s:%s:%s event %s\n",
2719 mod_state_to_str(sfp
->sm_mod_state
),
2720 dev_state_to_str(sfp
->sm_dev_state
),
2721 sm_state_to_str(sfp
->sm_state
),
2722 event_to_str(event
));
2724 sfp_sm_device(sfp
, event
);
2725 sfp_sm_module(sfp
, event
);
2726 sfp_sm_main(sfp
, event
);
2728 dev_dbg(sfp
->dev
, "SM: exit %s:%s:%s\n",
2729 mod_state_to_str(sfp
->sm_mod_state
),
2730 dev_state_to_str(sfp
->sm_dev_state
),
2731 sm_state_to_str(sfp
->sm_state
));
2734 static void sfp_sm_event(struct sfp
*sfp
, unsigned int event
)
2736 mutex_lock(&sfp
->sm_mutex
);
2737 __sfp_sm_event(sfp
, event
);
2738 mutex_unlock(&sfp
->sm_mutex
);
2741 static void sfp_attach(struct sfp
*sfp
)
2743 sfp_sm_event(sfp
, SFP_E_DEV_ATTACH
);
2746 static void sfp_detach(struct sfp
*sfp
)
2748 sfp_sm_event(sfp
, SFP_E_DEV_DETACH
);
2751 static void sfp_start(struct sfp
*sfp
)
2753 sfp_sm_event(sfp
, SFP_E_DEV_UP
);
2756 static void sfp_stop(struct sfp
*sfp
)
2758 sfp_sm_event(sfp
, SFP_E_DEV_DOWN
);
2761 static void sfp_set_signal_rate(struct sfp
*sfp
, unsigned int rate_kbd
)
2765 sfp
->rate_kbd
= rate_kbd
;
2767 if (rate_kbd
> sfp
->rs_threshold_kbd
)
2768 set
= sfp
->rs_state_mask
;
2772 sfp_mod_state(sfp
, SFP_F_RS0
| SFP_F_RS1
, set
);
2775 static int sfp_module_info(struct sfp
*sfp
, struct ethtool_modinfo
*modinfo
)
2777 /* locking... and check module is present */
2779 if (sfp
->id
.ext
.sff8472_compliance
&&
2780 !(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)) {
2781 modinfo
->type
= ETH_MODULE_SFF_8472
;
2782 modinfo
->eeprom_len
= ETH_MODULE_SFF_8472_LEN
;
2784 modinfo
->type
= ETH_MODULE_SFF_8079
;
2785 modinfo
->eeprom_len
= ETH_MODULE_SFF_8079_LEN
;
2790 static int sfp_module_eeprom(struct sfp
*sfp
, struct ethtool_eeprom
*ee
,
2793 unsigned int first
, last
, len
;
2796 if (!(sfp
->state
& SFP_F_PRESENT
))
2803 last
= ee
->offset
+ ee
->len
;
2804 if (first
< ETH_MODULE_SFF_8079_LEN
) {
2805 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8079_LEN
);
2808 ret
= sfp_read(sfp
, false, first
, data
, len
);
2815 if (first
< ETH_MODULE_SFF_8472_LEN
&& last
> ETH_MODULE_SFF_8079_LEN
) {
2816 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8472_LEN
);
2818 first
-= ETH_MODULE_SFF_8079_LEN
;
2820 ret
= sfp_read(sfp
, true, first
, data
, len
);
2827 static int sfp_module_eeprom_by_page(struct sfp
*sfp
,
2828 const struct ethtool_module_eeprom
*page
,
2829 struct netlink_ext_ack
*extack
)
2831 if (!(sfp
->state
& SFP_F_PRESENT
))
2835 NL_SET_ERR_MSG(extack
, "Banks not supported");
2840 NL_SET_ERR_MSG(extack
, "Only page 0 supported");
2844 if (page
->i2c_address
!= 0x50 &&
2845 page
->i2c_address
!= 0x51) {
2846 NL_SET_ERR_MSG(extack
, "Only address 0x50 and 0x51 supported");
2850 return sfp_read(sfp
, page
->i2c_address
== 0x51, page
->offset
,
2851 page
->data
, page
->length
);
2854 static const struct sfp_socket_ops sfp_module_ops
= {
2855 .attach
= sfp_attach
,
2856 .detach
= sfp_detach
,
2859 .set_signal_rate
= sfp_set_signal_rate
,
2860 .module_info
= sfp_module_info
,
2861 .module_eeprom
= sfp_module_eeprom
,
2862 .module_eeprom_by_page
= sfp_module_eeprom_by_page
,
2865 static void sfp_timeout(struct work_struct
*work
)
2867 struct sfp
*sfp
= container_of(work
, struct sfp
, timeout
.work
);
2870 sfp_sm_event(sfp
, SFP_E_TIMEOUT
);
2874 static void sfp_check_state(struct sfp
*sfp
)
2876 unsigned int state
, i
, changed
;
2879 mutex_lock(&sfp
->st_mutex
);
2880 state
= sfp_get_state(sfp
);
2881 changed
= state
^ sfp
->state
;
2882 changed
&= SFP_F_PRESENT
| SFP_F_LOS
| SFP_F_TX_FAULT
;
2884 for (i
= 0; i
< GPIO_MAX
; i
++)
2885 if (changed
& BIT(i
))
2886 dev_dbg(sfp
->dev
, "%s %u -> %u\n", gpio_names
[i
],
2887 !!(sfp
->state
& BIT(i
)), !!(state
& BIT(i
)));
2889 state
|= sfp
->state
& SFP_F_OUTPUTS
;
2891 mutex_unlock(&sfp
->st_mutex
);
2893 mutex_lock(&sfp
->sm_mutex
);
2894 if (changed
& SFP_F_PRESENT
)
2895 __sfp_sm_event(sfp
, state
& SFP_F_PRESENT
?
2896 SFP_E_INSERT
: SFP_E_REMOVE
);
2898 if (changed
& SFP_F_TX_FAULT
)
2899 __sfp_sm_event(sfp
, state
& SFP_F_TX_FAULT
?
2900 SFP_E_TX_FAULT
: SFP_E_TX_CLEAR
);
2902 if (changed
& SFP_F_LOS
)
2903 __sfp_sm_event(sfp
, state
& SFP_F_LOS
?
2904 SFP_E_LOS_HIGH
: SFP_E_LOS_LOW
);
2905 mutex_unlock(&sfp
->sm_mutex
);
2909 static irqreturn_t
sfp_irq(int irq
, void *data
)
2911 struct sfp
*sfp
= data
;
2913 sfp_check_state(sfp
);
2918 static void sfp_poll(struct work_struct
*work
)
2920 struct sfp
*sfp
= container_of(work
, struct sfp
, poll
.work
);
2922 sfp_check_state(sfp
);
2924 // st_mutex doesn't need to be held here for state_soft_mask,
2925 // it's unimportant if we race while reading this.
2926 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) ||
2928 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
2931 static struct sfp
*sfp_alloc(struct device
*dev
)
2935 sfp
= kzalloc(sizeof(*sfp
), GFP_KERNEL
);
2937 return ERR_PTR(-ENOMEM
);
2940 sfp
->i2c_block_size
= SFP_EEPROM_BLOCK_SIZE
;
2942 mutex_init(&sfp
->sm_mutex
);
2943 mutex_init(&sfp
->st_mutex
);
2944 INIT_DELAYED_WORK(&sfp
->poll
, sfp_poll
);
2945 INIT_DELAYED_WORK(&sfp
->timeout
, sfp_timeout
);
2947 sfp_hwmon_init(sfp
);
2952 static void sfp_cleanup(void *data
)
2954 struct sfp
*sfp
= data
;
2956 sfp_hwmon_exit(sfp
);
2958 cancel_delayed_work_sync(&sfp
->poll
);
2959 cancel_delayed_work_sync(&sfp
->timeout
);
2961 mdiobus_unregister(sfp
->i2c_mii
);
2962 mdiobus_free(sfp
->i2c_mii
);
2965 i2c_put_adapter(sfp
->i2c
);
2969 static int sfp_i2c_get(struct sfp
*sfp
)
2971 struct fwnode_handle
*h
;
2972 struct i2c_adapter
*i2c
;
2975 h
= fwnode_find_reference(dev_fwnode(sfp
->dev
), "i2c-bus", 0);
2977 dev_err(sfp
->dev
, "missing 'i2c-bus' property\n");
2981 i2c
= i2c_get_adapter_by_fwnode(h
);
2983 err
= -EPROBE_DEFER
;
2987 err
= sfp_i2c_configure(sfp
, i2c
);
2989 i2c_put_adapter(i2c
);
2991 fwnode_handle_put(h
);
2995 static int sfp_probe(struct platform_device
*pdev
)
2997 const struct sff_data
*sff
;
3002 sfp
= sfp_alloc(&pdev
->dev
);
3004 return PTR_ERR(sfp
);
3006 platform_set_drvdata(pdev
, sfp
);
3008 err
= devm_add_action_or_reset(sfp
->dev
, sfp_cleanup
, sfp
);
3012 sff
= device_get_match_data(sfp
->dev
);
3018 err
= sfp_i2c_get(sfp
);
3022 for (i
= 0; i
< GPIO_MAX
; i
++)
3023 if (sff
->gpios
& BIT(i
)) {
3024 sfp
->gpio
[i
] = devm_gpiod_get_optional(sfp
->dev
,
3025 gpio_names
[i
], gpio_flags
[i
]);
3026 if (IS_ERR(sfp
->gpio
[i
]))
3027 return PTR_ERR(sfp
->gpio
[i
]);
3030 sfp
->state_hw_mask
= SFP_F_PRESENT
;
3031 sfp
->state_hw_drive
= SFP_F_TX_DISABLE
;
3033 sfp
->get_state
= sfp_gpio_get_state
;
3034 sfp
->set_state
= sfp_gpio_set_state
;
3036 /* Modules that have no detect signal are always present */
3037 if (!(sfp
->gpio
[GPIO_MODDEF0
]))
3038 sfp
->get_state
= sff_gpio_get_state
;
3040 device_property_read_u32(&pdev
->dev
, "maximum-power-milliwatt",
3041 &sfp
->max_power_mW
);
3042 if (sfp
->max_power_mW
< 1000) {
3043 if (sfp
->max_power_mW
)
3045 "Firmware bug: host maximum power should be at least 1W\n");
3046 sfp
->max_power_mW
= 1000;
3049 dev_info(sfp
->dev
, "Host maximum power %u.%uW\n",
3050 sfp
->max_power_mW
/ 1000, (sfp
->max_power_mW
/ 100) % 10);
3052 /* Get the initial state, and always signal TX disable,
3053 * since the network interface will not be up.
3055 sfp
->state
= sfp_get_state(sfp
) | SFP_F_TX_DISABLE
;
3057 if (sfp
->gpio
[GPIO_RS0
] &&
3058 gpiod_get_value_cansleep(sfp
->gpio
[GPIO_RS0
]))
3059 sfp
->state
|= SFP_F_RS0
;
3060 sfp_set_state(sfp
, sfp
->state
);
3061 sfp_module_tx_disable(sfp
);
3062 if (sfp
->state
& SFP_F_PRESENT
) {
3064 sfp_sm_event(sfp
, SFP_E_INSERT
);
3068 for (i
= 0; i
< GPIO_MAX
; i
++) {
3069 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
3072 sfp
->gpio_irq
[i
] = gpiod_to_irq(sfp
->gpio
[i
]);
3073 if (sfp
->gpio_irq
[i
] < 0) {
3074 sfp
->gpio_irq
[i
] = 0;
3075 sfp
->need_poll
= true;
3079 sfp_irq_name
= devm_kasprintf(sfp
->dev
, GFP_KERNEL
,
3080 "%s-%s", dev_name(sfp
->dev
),
3086 err
= devm_request_threaded_irq(sfp
->dev
, sfp
->gpio_irq
[i
],
3089 IRQF_TRIGGER_RISING
|
3090 IRQF_TRIGGER_FALLING
,
3093 sfp
->gpio_irq
[i
] = 0;
3094 sfp
->need_poll
= true;
3099 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
3101 /* We could have an issue in cases no Tx disable pin is available or
3102 * wired as modules using a laser as their light source will continue to
3103 * be active when the fiber is removed. This could be a safety issue and
3104 * we should at least warn the user about that.
3106 if (!sfp
->gpio
[GPIO_TX_DISABLE
])
3108 "No tx_disable pin: SFP modules will always be emitting.\n");
3110 sfp
->sfp_bus
= sfp_register_socket(sfp
->dev
, sfp
, &sfp_module_ops
);
3114 sfp_debugfs_init(sfp
);
3119 static void sfp_remove(struct platform_device
*pdev
)
3121 struct sfp
*sfp
= platform_get_drvdata(pdev
);
3123 sfp_debugfs_exit(sfp
);
3124 sfp_unregister_socket(sfp
->sfp_bus
);
3127 sfp_sm_event(sfp
, SFP_E_REMOVE
);
3131 static void sfp_shutdown(struct platform_device
*pdev
)
3133 struct sfp
*sfp
= platform_get_drvdata(pdev
);
3136 for (i
= 0; i
< GPIO_MAX
; i
++) {
3137 if (!sfp
->gpio_irq
[i
])
3140 devm_free_irq(sfp
->dev
, sfp
->gpio_irq
[i
], sfp
);
3143 cancel_delayed_work_sync(&sfp
->poll
);
3144 cancel_delayed_work_sync(&sfp
->timeout
);
3147 static struct platform_driver sfp_driver
= {
3149 .remove_new
= sfp_remove
,
3150 .shutdown
= sfp_shutdown
,
3153 .of_match_table
= sfp_of_match
,
3157 static int sfp_init(void)
3159 poll_jiffies
= msecs_to_jiffies(100);
3161 return platform_driver_register(&sfp_driver
);
3163 module_init(sfp_init
);
3165 static void sfp_exit(void)
3167 platform_driver_unregister(&sfp_driver
);
3169 module_exit(sfp_exit
);
3171 MODULE_ALIAS("platform:sfp");
3172 MODULE_AUTHOR("Russell King");
3173 MODULE_LICENSE("GPL v2");
3174 MODULE_DESCRIPTION("SFP cage support");