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("ALCATELLUCENT", "G010SP", sfp_quirk_2500basex
,
470 sfp_fixup_ignore_tx_fault
),
472 // Alcatel Lucent G-010S-A can operate at 2500base-X, but report 3.2GBd
473 // NRZ in their EEPROM
474 SFP_QUIRK("ALCATELLUCENT", "3FE46541AA", sfp_quirk_2500basex
,
477 // Fiberstore SFP-10G-T doesn't identify as copper, uses the Rollball
478 // protocol to talk to the PHY and needs 4 sec wait before probing the
480 SFP_QUIRK_F("FS", "SFP-10G-T", sfp_fixup_fs_10gt
),
482 // Fiberstore SFP-2.5G-T uses Rollball protocol to talk to the PHY and
483 // needs 4 sec wait before probing the PHY.
484 SFP_QUIRK_F("FS", "SFP-2.5G-T", sfp_fixup_fs_2_5gt
),
486 // Fiberstore GPON-ONU-34-20BI can operate at 2500base-X, but report 1.2GBd
487 // NRZ in their EEPROM
488 SFP_QUIRK("FS", "GPON-ONU-34-20BI", sfp_quirk_2500basex
,
489 sfp_fixup_ignore_tx_fault
),
491 SFP_QUIRK_F("HALNy", "HL-GSFP", sfp_fixup_halny_gsfp
),
493 // HG MXPD-483II-F 2.5G supports 2500Base-X, but incorrectly reports
494 // 2600MBd in their EERPOM
495 SFP_QUIRK_M("HG GENUINE", "MXPD-483II", sfp_quirk_2500basex
),
497 // Huawei MA5671A can operate at 2500base-X, but report 1.2GBd NRZ in
499 SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex
,
500 sfp_fixup_ignore_tx_fault
),
502 // Lantech 8330-262D-E can operate at 2500base-X, but incorrectly report
503 // 2500MBd NRZ in their EEPROM
504 SFP_QUIRK_M("Lantech", "8330-262D-E", sfp_quirk_2500basex
),
506 SFP_QUIRK_M("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant
),
508 // Walsun HXSX-ATR[CI]-1 don't identify as copper, and use the
509 // Rollball protocol to talk to the PHY.
510 SFP_QUIRK_F("Walsun", "HXSX-ATRC-1", sfp_fixup_fs_10gt
),
511 SFP_QUIRK_F("Walsun", "HXSX-ATRI-1", sfp_fixup_fs_10gt
),
513 // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
514 SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault
),
516 SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc
),
517 SFP_QUIRK_M("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g
),
518 SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc
),
519 SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc
),
520 SFP_QUIRK_F("Turris", "RTSFP-2.5G", sfp_fixup_rollball
),
521 SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball
),
522 SFP_QUIRK_F("Turris", "RTSFP-10G", sfp_fixup_rollball
),
525 static size_t sfp_strlen(const char *str
, size_t maxlen
)
529 /* Trailing characters should be filled with space chars, but
530 * some manufacturers can't read SFF-8472 and use NUL.
532 for (i
= 0, size
= 0; i
< maxlen
; i
++)
533 if (str
[i
] != ' ' && str
[i
] != '\0')
539 static bool sfp_match(const char *qs
, const char *str
, size_t len
)
543 if (strlen(qs
) != len
)
545 return !strncmp(qs
, str
, len
);
548 static const struct sfp_quirk
*sfp_lookup_quirk(const struct sfp_eeprom_id
*id
)
550 const struct sfp_quirk
*q
;
554 vs
= sfp_strlen(id
->base
.vendor_name
, ARRAY_SIZE(id
->base
.vendor_name
));
555 ps
= sfp_strlen(id
->base
.vendor_pn
, ARRAY_SIZE(id
->base
.vendor_pn
));
557 for (i
= 0, q
= sfp_quirks
; i
< ARRAY_SIZE(sfp_quirks
); i
++, q
++)
558 if (sfp_match(q
->vendor
, id
->base
.vendor_name
, vs
) &&
559 sfp_match(q
->part
, id
->base
.vendor_pn
, ps
))
565 static unsigned long poll_jiffies
;
567 static unsigned int sfp_gpio_get_state(struct sfp
*sfp
)
569 unsigned int i
, state
, v
;
571 for (i
= state
= 0; i
< GPIO_MAX
; i
++) {
572 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
575 v
= gpiod_get_value_cansleep(sfp
->gpio
[i
]);
583 static unsigned int sff_gpio_get_state(struct sfp
*sfp
)
585 return sfp_gpio_get_state(sfp
) | SFP_F_PRESENT
;
588 static void sfp_gpio_set_state(struct sfp
*sfp
, unsigned int state
)
592 if (state
& SFP_F_PRESENT
)
593 /* If the module is present, drive the requested signals */
594 drive
= sfp
->state_hw_drive
;
596 /* Otherwise, let them float to the pull-ups */
599 if (sfp
->gpio
[GPIO_TX_DISABLE
]) {
600 if (drive
& SFP_F_TX_DISABLE
)
601 gpiod_direction_output(sfp
->gpio
[GPIO_TX_DISABLE
],
602 state
& SFP_F_TX_DISABLE
);
604 gpiod_direction_input(sfp
->gpio
[GPIO_TX_DISABLE
]);
607 if (sfp
->gpio
[GPIO_RS0
]) {
608 if (drive
& SFP_F_RS0
)
609 gpiod_direction_output(sfp
->gpio
[GPIO_RS0
],
612 gpiod_direction_input(sfp
->gpio
[GPIO_RS0
]);
615 if (sfp
->gpio
[GPIO_RS1
]) {
616 if (drive
& SFP_F_RS1
)
617 gpiod_direction_output(sfp
->gpio
[GPIO_RS1
],
620 gpiod_direction_input(sfp
->gpio
[GPIO_RS1
]);
624 static int sfp_i2c_read(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
627 struct i2c_msg msgs
[2];
628 u8 bus_addr
= a2
? 0x51 : 0x50;
629 size_t block_size
= sfp
->i2c_block_size
;
633 msgs
[0].addr
= bus_addr
;
636 msgs
[0].buf
= &dev_addr
;
637 msgs
[1].addr
= bus_addr
;
638 msgs
[1].flags
= I2C_M_RD
;
644 if (this_len
> block_size
)
645 this_len
= block_size
;
647 msgs
[1].len
= this_len
;
649 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
653 if (ret
!= ARRAY_SIZE(msgs
))
656 msgs
[1].buf
+= this_len
;
657 dev_addr
+= this_len
;
661 return msgs
[1].buf
- (u8
*)buf
;
664 static int sfp_i2c_write(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
667 struct i2c_msg msgs
[1];
668 u8 bus_addr
= a2
? 0x51 : 0x50;
671 msgs
[0].addr
= bus_addr
;
673 msgs
[0].len
= 1 + len
;
674 msgs
[0].buf
= kmalloc(1 + len
, GFP_KERNEL
);
678 msgs
[0].buf
[0] = dev_addr
;
679 memcpy(&msgs
[0].buf
[1], buf
, len
);
681 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
688 return ret
== ARRAY_SIZE(msgs
) ? len
: 0;
691 static int sfp_i2c_configure(struct sfp
*sfp
, struct i2c_adapter
*i2c
)
693 if (!i2c_check_functionality(i2c
, I2C_FUNC_I2C
))
697 sfp
->read
= sfp_i2c_read
;
698 sfp
->write
= sfp_i2c_write
;
703 static int sfp_i2c_mdiobus_create(struct sfp
*sfp
)
705 struct mii_bus
*i2c_mii
;
708 i2c_mii
= mdio_i2c_alloc(sfp
->dev
, sfp
->i2c
, sfp
->mdio_protocol
);
710 return PTR_ERR(i2c_mii
);
712 i2c_mii
->name
= "SFP I2C Bus";
713 i2c_mii
->phy_mask
= ~0;
715 ret
= mdiobus_register(i2c_mii
);
717 mdiobus_free(i2c_mii
);
721 sfp
->i2c_mii
= i2c_mii
;
726 static void sfp_i2c_mdiobus_destroy(struct sfp
*sfp
)
728 mdiobus_unregister(sfp
->i2c_mii
);
733 static int sfp_read(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
735 return sfp
->read(sfp
, a2
, addr
, buf
, len
);
738 static int sfp_write(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
740 return sfp
->write(sfp
, a2
, addr
, buf
, len
);
743 static int sfp_modify_u8(struct sfp
*sfp
, bool a2
, u8 addr
, u8 mask
, u8 val
)
748 ret
= sfp_read(sfp
, a2
, addr
, &old
, sizeof(old
));
749 if (ret
!= sizeof(old
))
752 v
= (old
& ~mask
) | (val
& mask
);
756 return sfp_write(sfp
, a2
, addr
, &v
, sizeof(v
));
759 static unsigned int sfp_soft_get_state(struct sfp
*sfp
)
761 unsigned int state
= 0;
765 ret
= sfp_read(sfp
, true, SFP_STATUS
, &status
, sizeof(status
));
766 if (ret
== sizeof(status
)) {
767 if (status
& SFP_STATUS_RX_LOS
)
769 if (status
& SFP_STATUS_TX_FAULT
)
770 state
|= SFP_F_TX_FAULT
;
772 dev_err_ratelimited(sfp
->dev
,
773 "failed to read SFP soft status: %pe\n",
775 /* Preserve the current state */
779 return state
& sfp
->state_soft_mask
;
782 static void sfp_soft_set_state(struct sfp
*sfp
, unsigned int state
,
788 if (soft
& SFP_F_TX_DISABLE
)
789 mask
|= SFP_STATUS_TX_DISABLE_FORCE
;
790 if (state
& SFP_F_TX_DISABLE
)
791 val
|= SFP_STATUS_TX_DISABLE_FORCE
;
793 if (soft
& SFP_F_RS0
)
794 mask
|= SFP_STATUS_RS0_SELECT
;
795 if (state
& SFP_F_RS0
)
796 val
|= SFP_STATUS_RS0_SELECT
;
799 sfp_modify_u8(sfp
, true, SFP_STATUS
, mask
, val
);
802 if (soft
& SFP_F_RS1
)
803 mask
|= SFP_EXT_STATUS_RS1_SELECT
;
804 if (state
& SFP_F_RS1
)
805 val
|= SFP_EXT_STATUS_RS1_SELECT
;
808 sfp_modify_u8(sfp
, true, SFP_EXT_STATUS
, mask
, val
);
811 static void sfp_soft_start_poll(struct sfp
*sfp
)
813 const struct sfp_eeprom_id
*id
= &sfp
->id
;
814 unsigned int mask
= 0;
816 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_DISABLE
)
817 mask
|= SFP_F_TX_DISABLE
;
818 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_FAULT
)
819 mask
|= SFP_F_TX_FAULT
;
820 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_RX_LOS
)
822 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_RATE_SELECT
)
823 mask
|= sfp
->rs_state_mask
;
825 mutex_lock(&sfp
->st_mutex
);
826 // Poll the soft state for hardware pins we want to ignore
827 sfp
->state_soft_mask
= ~sfp
->state_hw_mask
& ~sfp
->state_ignore_mask
&
830 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) &&
832 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
833 mutex_unlock(&sfp
->st_mutex
);
836 static void sfp_soft_stop_poll(struct sfp
*sfp
)
838 mutex_lock(&sfp
->st_mutex
);
839 sfp
->state_soft_mask
= 0;
840 mutex_unlock(&sfp
->st_mutex
);
843 /* sfp_get_state() - must be called with st_mutex held, or in the
844 * initialisation path.
846 static unsigned int sfp_get_state(struct sfp
*sfp
)
848 unsigned int soft
= sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
);
851 state
= sfp
->get_state(sfp
) & sfp
->state_hw_mask
;
852 if (state
& SFP_F_PRESENT
&& soft
)
853 state
|= sfp_soft_get_state(sfp
);
858 /* sfp_set_state() - must be called with st_mutex held, or in the
859 * initialisation path.
861 static void sfp_set_state(struct sfp
*sfp
, unsigned int state
)
865 sfp
->set_state(sfp
, state
);
867 soft
= sfp
->state_soft_mask
& SFP_F_OUTPUTS
;
868 if (state
& SFP_F_PRESENT
&& soft
)
869 sfp_soft_set_state(sfp
, state
, soft
);
872 static void sfp_mod_state(struct sfp
*sfp
, unsigned int mask
, unsigned int set
)
874 mutex_lock(&sfp
->st_mutex
);
875 sfp
->state
= (sfp
->state
& ~mask
) | set
;
876 sfp_set_state(sfp
, sfp
->state
);
877 mutex_unlock(&sfp
->st_mutex
);
880 static unsigned int sfp_check(void *buf
, size_t len
)
884 for (p
= buf
, check
= 0; len
; p
++, len
--)
891 #if IS_ENABLED(CONFIG_HWMON)
892 static umode_t
sfp_hwmon_is_visible(const void *data
,
893 enum hwmon_sensor_types type
,
894 u32 attr
, int channel
)
896 const struct sfp
*sfp
= data
;
901 case hwmon_temp_min_alarm
:
902 case hwmon_temp_max_alarm
:
903 case hwmon_temp_lcrit_alarm
:
904 case hwmon_temp_crit_alarm
:
907 case hwmon_temp_lcrit
:
908 case hwmon_temp_crit
:
909 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
912 case hwmon_temp_input
:
913 case hwmon_temp_label
:
920 case hwmon_in_min_alarm
:
921 case hwmon_in_max_alarm
:
922 case hwmon_in_lcrit_alarm
:
923 case hwmon_in_crit_alarm
:
928 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
939 case hwmon_curr_min_alarm
:
940 case hwmon_curr_max_alarm
:
941 case hwmon_curr_lcrit_alarm
:
942 case hwmon_curr_crit_alarm
:
945 case hwmon_curr_lcrit
:
946 case hwmon_curr_crit
:
947 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
950 case hwmon_curr_input
:
951 case hwmon_curr_label
:
957 /* External calibration of receive power requires
958 * floating point arithmetic. Doing that in the kernel
959 * is not easy, so just skip it. If the module does
960 * not require external calibration, we can however
961 * show receiver power, since FP is then not needed.
963 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
&&
967 case hwmon_power_min_alarm
:
968 case hwmon_power_max_alarm
:
969 case hwmon_power_lcrit_alarm
:
970 case hwmon_power_crit_alarm
:
971 case hwmon_power_min
:
972 case hwmon_power_max
:
973 case hwmon_power_lcrit
:
974 case hwmon_power_crit
:
975 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
978 case hwmon_power_input
:
979 case hwmon_power_label
:
989 static int sfp_hwmon_read_sensor(struct sfp
*sfp
, int reg
, long *value
)
994 err
= sfp_read(sfp
, true, reg
, &val
, sizeof(val
));
998 *value
= be16_to_cpu(val
);
1003 static void sfp_hwmon_to_rx_power(long *value
)
1005 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1008 static void sfp_hwmon_calibrate(struct sfp
*sfp
, unsigned int slope
, int offset
,
1011 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
)
1012 *value
= DIV_ROUND_CLOSEST(*value
* slope
, 256) + offset
;
1015 static void sfp_hwmon_calibrate_temp(struct sfp
*sfp
, long *value
)
1017 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_t_slope
),
1018 be16_to_cpu(sfp
->diag
.cal_t_offset
), value
);
1020 if (*value
>= 0x8000)
1023 *value
= DIV_ROUND_CLOSEST(*value
* 1000, 256);
1026 static void sfp_hwmon_calibrate_vcc(struct sfp
*sfp
, long *value
)
1028 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_v_slope
),
1029 be16_to_cpu(sfp
->diag
.cal_v_offset
), value
);
1031 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1034 static void sfp_hwmon_calibrate_bias(struct sfp
*sfp
, long *value
)
1036 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txi_slope
),
1037 be16_to_cpu(sfp
->diag
.cal_txi_offset
), value
);
1039 *value
= DIV_ROUND_CLOSEST(*value
, 500);
1042 static void sfp_hwmon_calibrate_tx_power(struct sfp
*sfp
, long *value
)
1044 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txpwr_slope
),
1045 be16_to_cpu(sfp
->diag
.cal_txpwr_offset
), value
);
1047 *value
= DIV_ROUND_CLOSEST(*value
, 10);
1050 static int sfp_hwmon_read_temp(struct sfp
*sfp
, int reg
, long *value
)
1054 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1058 sfp_hwmon_calibrate_temp(sfp
, value
);
1063 static int sfp_hwmon_read_vcc(struct sfp
*sfp
, int reg
, long *value
)
1067 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1071 sfp_hwmon_calibrate_vcc(sfp
, value
);
1076 static int sfp_hwmon_read_bias(struct sfp
*sfp
, int reg
, long *value
)
1080 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1084 sfp_hwmon_calibrate_bias(sfp
, value
);
1089 static int sfp_hwmon_read_tx_power(struct sfp
*sfp
, int reg
, long *value
)
1093 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1097 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1102 static int sfp_hwmon_read_rx_power(struct sfp
*sfp
, int reg
, long *value
)
1106 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
1110 sfp_hwmon_to_rx_power(value
);
1115 static int sfp_hwmon_temp(struct sfp
*sfp
, u32 attr
, long *value
)
1121 case hwmon_temp_input
:
1122 return sfp_hwmon_read_temp(sfp
, SFP_TEMP
, value
);
1124 case hwmon_temp_lcrit
:
1125 *value
= be16_to_cpu(sfp
->diag
.temp_low_alarm
);
1126 sfp_hwmon_calibrate_temp(sfp
, value
);
1129 case hwmon_temp_min
:
1130 *value
= be16_to_cpu(sfp
->diag
.temp_low_warn
);
1131 sfp_hwmon_calibrate_temp(sfp
, value
);
1133 case hwmon_temp_max
:
1134 *value
= be16_to_cpu(sfp
->diag
.temp_high_warn
);
1135 sfp_hwmon_calibrate_temp(sfp
, value
);
1138 case hwmon_temp_crit
:
1139 *value
= be16_to_cpu(sfp
->diag
.temp_high_alarm
);
1140 sfp_hwmon_calibrate_temp(sfp
, value
);
1143 case hwmon_temp_lcrit_alarm
:
1144 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1148 *value
= !!(status
& SFP_ALARM0_TEMP_LOW
);
1151 case hwmon_temp_min_alarm
:
1152 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1156 *value
= !!(status
& SFP_WARN0_TEMP_LOW
);
1159 case hwmon_temp_max_alarm
:
1160 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1164 *value
= !!(status
& SFP_WARN0_TEMP_HIGH
);
1167 case hwmon_temp_crit_alarm
:
1168 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1172 *value
= !!(status
& SFP_ALARM0_TEMP_HIGH
);
1181 static int sfp_hwmon_vcc(struct sfp
*sfp
, u32 attr
, long *value
)
1187 case hwmon_in_input
:
1188 return sfp_hwmon_read_vcc(sfp
, SFP_VCC
, value
);
1190 case hwmon_in_lcrit
:
1191 *value
= be16_to_cpu(sfp
->diag
.volt_low_alarm
);
1192 sfp_hwmon_calibrate_vcc(sfp
, value
);
1196 *value
= be16_to_cpu(sfp
->diag
.volt_low_warn
);
1197 sfp_hwmon_calibrate_vcc(sfp
, value
);
1201 *value
= be16_to_cpu(sfp
->diag
.volt_high_warn
);
1202 sfp_hwmon_calibrate_vcc(sfp
, value
);
1206 *value
= be16_to_cpu(sfp
->diag
.volt_high_alarm
);
1207 sfp_hwmon_calibrate_vcc(sfp
, value
);
1210 case hwmon_in_lcrit_alarm
:
1211 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1215 *value
= !!(status
& SFP_ALARM0_VCC_LOW
);
1218 case hwmon_in_min_alarm
:
1219 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1223 *value
= !!(status
& SFP_WARN0_VCC_LOW
);
1226 case hwmon_in_max_alarm
:
1227 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1231 *value
= !!(status
& SFP_WARN0_VCC_HIGH
);
1234 case hwmon_in_crit_alarm
:
1235 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1239 *value
= !!(status
& SFP_ALARM0_VCC_HIGH
);
1248 static int sfp_hwmon_bias(struct sfp
*sfp
, u32 attr
, long *value
)
1254 case hwmon_curr_input
:
1255 return sfp_hwmon_read_bias(sfp
, SFP_TX_BIAS
, value
);
1257 case hwmon_curr_lcrit
:
1258 *value
= be16_to_cpu(sfp
->diag
.bias_low_alarm
);
1259 sfp_hwmon_calibrate_bias(sfp
, value
);
1262 case hwmon_curr_min
:
1263 *value
= be16_to_cpu(sfp
->diag
.bias_low_warn
);
1264 sfp_hwmon_calibrate_bias(sfp
, value
);
1267 case hwmon_curr_max
:
1268 *value
= be16_to_cpu(sfp
->diag
.bias_high_warn
);
1269 sfp_hwmon_calibrate_bias(sfp
, value
);
1272 case hwmon_curr_crit
:
1273 *value
= be16_to_cpu(sfp
->diag
.bias_high_alarm
);
1274 sfp_hwmon_calibrate_bias(sfp
, value
);
1277 case hwmon_curr_lcrit_alarm
:
1278 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1282 *value
= !!(status
& SFP_ALARM0_TX_BIAS_LOW
);
1285 case hwmon_curr_min_alarm
:
1286 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1290 *value
= !!(status
& SFP_WARN0_TX_BIAS_LOW
);
1293 case hwmon_curr_max_alarm
:
1294 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1298 *value
= !!(status
& SFP_WARN0_TX_BIAS_HIGH
);
1301 case hwmon_curr_crit_alarm
:
1302 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1306 *value
= !!(status
& SFP_ALARM0_TX_BIAS_HIGH
);
1315 static int sfp_hwmon_tx_power(struct sfp
*sfp
, u32 attr
, long *value
)
1321 case hwmon_power_input
:
1322 return sfp_hwmon_read_tx_power(sfp
, SFP_TX_POWER
, value
);
1324 case hwmon_power_lcrit
:
1325 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_alarm
);
1326 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1329 case hwmon_power_min
:
1330 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_warn
);
1331 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1334 case hwmon_power_max
:
1335 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_warn
);
1336 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1339 case hwmon_power_crit
:
1340 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_alarm
);
1341 sfp_hwmon_calibrate_tx_power(sfp
, value
);
1344 case hwmon_power_lcrit_alarm
:
1345 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1349 *value
= !!(status
& SFP_ALARM0_TXPWR_LOW
);
1352 case hwmon_power_min_alarm
:
1353 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1357 *value
= !!(status
& SFP_WARN0_TXPWR_LOW
);
1360 case hwmon_power_max_alarm
:
1361 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1365 *value
= !!(status
& SFP_WARN0_TXPWR_HIGH
);
1368 case hwmon_power_crit_alarm
:
1369 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1373 *value
= !!(status
& SFP_ALARM0_TXPWR_HIGH
);
1382 static int sfp_hwmon_rx_power(struct sfp
*sfp
, u32 attr
, long *value
)
1388 case hwmon_power_input
:
1389 return sfp_hwmon_read_rx_power(sfp
, SFP_RX_POWER
, value
);
1391 case hwmon_power_lcrit
:
1392 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_alarm
);
1393 sfp_hwmon_to_rx_power(value
);
1396 case hwmon_power_min
:
1397 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_warn
);
1398 sfp_hwmon_to_rx_power(value
);
1401 case hwmon_power_max
:
1402 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_warn
);
1403 sfp_hwmon_to_rx_power(value
);
1406 case hwmon_power_crit
:
1407 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_alarm
);
1408 sfp_hwmon_to_rx_power(value
);
1411 case hwmon_power_lcrit_alarm
:
1412 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1416 *value
= !!(status
& SFP_ALARM1_RXPWR_LOW
);
1419 case hwmon_power_min_alarm
:
1420 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1424 *value
= !!(status
& SFP_WARN1_RXPWR_LOW
);
1427 case hwmon_power_max_alarm
:
1428 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1432 *value
= !!(status
& SFP_WARN1_RXPWR_HIGH
);
1435 case hwmon_power_crit_alarm
:
1436 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1440 *value
= !!(status
& SFP_ALARM1_RXPWR_HIGH
);
1449 static int sfp_hwmon_read(struct device
*dev
, enum hwmon_sensor_types type
,
1450 u32 attr
, int channel
, long *value
)
1452 struct sfp
*sfp
= dev_get_drvdata(dev
);
1456 return sfp_hwmon_temp(sfp
, attr
, value
);
1458 return sfp_hwmon_vcc(sfp
, attr
, value
);
1460 return sfp_hwmon_bias(sfp
, attr
, value
);
1464 return sfp_hwmon_tx_power(sfp
, attr
, value
);
1466 return sfp_hwmon_rx_power(sfp
, attr
, value
);
1475 static const char *const sfp_hwmon_power_labels
[] = {
1480 static int sfp_hwmon_read_string(struct device
*dev
,
1481 enum hwmon_sensor_types type
,
1482 u32 attr
, int channel
, const char **str
)
1487 case hwmon_curr_label
:
1496 case hwmon_temp_label
:
1497 *str
= "temperature";
1505 case hwmon_in_label
:
1514 case hwmon_power_label
:
1515 *str
= sfp_hwmon_power_labels
[channel
];
1528 static const struct hwmon_ops sfp_hwmon_ops
= {
1529 .is_visible
= sfp_hwmon_is_visible
,
1530 .read
= sfp_hwmon_read
,
1531 .read_string
= sfp_hwmon_read_string
,
1534 static const struct hwmon_channel_info
* const sfp_hwmon_info
[] = {
1535 HWMON_CHANNEL_INFO(chip
,
1536 HWMON_C_REGISTER_TZ
),
1537 HWMON_CHANNEL_INFO(in
,
1539 HWMON_I_MAX
| HWMON_I_MIN
|
1540 HWMON_I_MAX_ALARM
| HWMON_I_MIN_ALARM
|
1541 HWMON_I_CRIT
| HWMON_I_LCRIT
|
1542 HWMON_I_CRIT_ALARM
| HWMON_I_LCRIT_ALARM
|
1544 HWMON_CHANNEL_INFO(temp
,
1546 HWMON_T_MAX
| HWMON_T_MIN
|
1547 HWMON_T_MAX_ALARM
| HWMON_T_MIN_ALARM
|
1548 HWMON_T_CRIT
| HWMON_T_LCRIT
|
1549 HWMON_T_CRIT_ALARM
| HWMON_T_LCRIT_ALARM
|
1551 HWMON_CHANNEL_INFO(curr
,
1553 HWMON_C_MAX
| HWMON_C_MIN
|
1554 HWMON_C_MAX_ALARM
| HWMON_C_MIN_ALARM
|
1555 HWMON_C_CRIT
| HWMON_C_LCRIT
|
1556 HWMON_C_CRIT_ALARM
| HWMON_C_LCRIT_ALARM
|
1558 HWMON_CHANNEL_INFO(power
,
1559 /* Transmit power */
1561 HWMON_P_MAX
| HWMON_P_MIN
|
1562 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1563 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1564 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1568 HWMON_P_MAX
| HWMON_P_MIN
|
1569 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1570 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1571 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1576 static const struct hwmon_chip_info sfp_hwmon_chip_info
= {
1577 .ops
= &sfp_hwmon_ops
,
1578 .info
= sfp_hwmon_info
,
1581 static void sfp_hwmon_probe(struct work_struct
*work
)
1583 struct sfp
*sfp
= container_of(work
, struct sfp
, hwmon_probe
.work
);
1586 /* hwmon interface needs to access 16bit registers in atomic way to
1587 * guarantee coherency of the diagnostic monitoring data. If it is not
1588 * possible to guarantee coherency because EEPROM is broken in such way
1589 * that does not support atomic 16bit read operation then we have to
1590 * skip registration of hwmon device.
1592 if (sfp
->i2c_block_size
< 2) {
1594 "skipping hwmon device registration due to broken EEPROM\n");
1596 "diagnostic EEPROM area cannot be read atomically to guarantee data coherency\n");
1600 err
= sfp_read(sfp
, true, 0, &sfp
->diag
, sizeof(sfp
->diag
));
1602 if (sfp
->hwmon_tries
--) {
1603 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
,
1604 T_PROBE_RETRY_SLOW
);
1606 dev_warn(sfp
->dev
, "hwmon probe failed: %pe\n",
1612 sfp
->hwmon_name
= hwmon_sanitize_name(dev_name(sfp
->dev
));
1613 if (IS_ERR(sfp
->hwmon_name
)) {
1614 dev_err(sfp
->dev
, "out of memory for hwmon name\n");
1618 sfp
->hwmon_dev
= hwmon_device_register_with_info(sfp
->dev
,
1619 sfp
->hwmon_name
, sfp
,
1620 &sfp_hwmon_chip_info
,
1622 if (IS_ERR(sfp
->hwmon_dev
))
1623 dev_err(sfp
->dev
, "failed to register hwmon device: %ld\n",
1624 PTR_ERR(sfp
->hwmon_dev
));
1627 static int sfp_hwmon_insert(struct sfp
*sfp
)
1629 if (sfp
->have_a2
&& sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
) {
1630 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
, 1);
1631 sfp
->hwmon_tries
= R_PROBE_RETRY_SLOW
;
1637 static void sfp_hwmon_remove(struct sfp
*sfp
)
1639 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1640 if (!IS_ERR_OR_NULL(sfp
->hwmon_dev
)) {
1641 hwmon_device_unregister(sfp
->hwmon_dev
);
1642 sfp
->hwmon_dev
= NULL
;
1643 kfree(sfp
->hwmon_name
);
1647 static int sfp_hwmon_init(struct sfp
*sfp
)
1649 INIT_DELAYED_WORK(&sfp
->hwmon_probe
, sfp_hwmon_probe
);
1654 static void sfp_hwmon_exit(struct sfp
*sfp
)
1656 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1659 static int sfp_hwmon_insert(struct sfp
*sfp
)
1664 static void sfp_hwmon_remove(struct sfp
*sfp
)
1668 static int sfp_hwmon_init(struct sfp
*sfp
)
1673 static void sfp_hwmon_exit(struct sfp
*sfp
)
1679 static void sfp_module_tx_disable(struct sfp
*sfp
)
1681 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1682 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 1);
1683 sfp_mod_state(sfp
, SFP_F_TX_DISABLE
, SFP_F_TX_DISABLE
);
1686 static void sfp_module_tx_enable(struct sfp
*sfp
)
1688 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1689 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 0);
1690 sfp_mod_state(sfp
, SFP_F_TX_DISABLE
, 0);
1693 #if IS_ENABLED(CONFIG_DEBUG_FS)
1694 static int sfp_debug_state_show(struct seq_file
*s
, void *data
)
1696 struct sfp
*sfp
= s
->private;
1698 seq_printf(s
, "Module state: %s\n",
1699 mod_state_to_str(sfp
->sm_mod_state
));
1700 seq_printf(s
, "Module probe attempts: %d %d\n",
1701 R_PROBE_RETRY_INIT
- sfp
->sm_mod_tries_init
,
1702 R_PROBE_RETRY_SLOW
- sfp
->sm_mod_tries
);
1703 seq_printf(s
, "Device state: %s\n",
1704 dev_state_to_str(sfp
->sm_dev_state
));
1705 seq_printf(s
, "Main state: %s\n",
1706 sm_state_to_str(sfp
->sm_state
));
1707 seq_printf(s
, "Fault recovery remaining retries: %d\n",
1708 sfp
->sm_fault_retries
);
1709 seq_printf(s
, "PHY probe remaining retries: %d\n",
1710 sfp
->sm_phy_retries
);
1711 seq_printf(s
, "Signalling rate: %u kBd\n", sfp
->rate_kbd
);
1712 seq_printf(s
, "Rate select threshold: %u kBd\n",
1713 sfp
->rs_threshold_kbd
);
1714 seq_printf(s
, "moddef0: %d\n", !!(sfp
->state
& SFP_F_PRESENT
));
1715 seq_printf(s
, "rx_los: %d\n", !!(sfp
->state
& SFP_F_LOS
));
1716 seq_printf(s
, "tx_fault: %d\n", !!(sfp
->state
& SFP_F_TX_FAULT
));
1717 seq_printf(s
, "tx_disable: %d\n", !!(sfp
->state
& SFP_F_TX_DISABLE
));
1718 seq_printf(s
, "rs0: %d\n", !!(sfp
->state
& SFP_F_RS0
));
1719 seq_printf(s
, "rs1: %d\n", !!(sfp
->state
& SFP_F_RS1
));
1722 DEFINE_SHOW_ATTRIBUTE(sfp_debug_state
);
1724 static void sfp_debugfs_init(struct sfp
*sfp
)
1726 sfp
->debugfs_dir
= debugfs_create_dir(dev_name(sfp
->dev
), NULL
);
1728 debugfs_create_file("state", 0600, sfp
->debugfs_dir
, sfp
,
1729 &sfp_debug_state_fops
);
1732 static void sfp_debugfs_exit(struct sfp
*sfp
)
1734 debugfs_remove_recursive(sfp
->debugfs_dir
);
1737 static void sfp_debugfs_init(struct sfp
*sfp
)
1741 static void sfp_debugfs_exit(struct sfp
*sfp
)
1746 static void sfp_module_tx_fault_reset(struct sfp
*sfp
)
1750 mutex_lock(&sfp
->st_mutex
);
1752 if (!(state
& SFP_F_TX_DISABLE
)) {
1753 sfp_set_state(sfp
, state
| SFP_F_TX_DISABLE
);
1757 sfp_set_state(sfp
, state
);
1759 mutex_unlock(&sfp
->st_mutex
);
1762 /* SFP state machine */
1763 static void sfp_sm_set_timer(struct sfp
*sfp
, unsigned int timeout
)
1766 mod_delayed_work(system_power_efficient_wq
, &sfp
->timeout
,
1769 cancel_delayed_work(&sfp
->timeout
);
1772 static void sfp_sm_next(struct sfp
*sfp
, unsigned int state
,
1773 unsigned int timeout
)
1775 sfp
->sm_state
= state
;
1776 sfp_sm_set_timer(sfp
, timeout
);
1779 static void sfp_sm_mod_next(struct sfp
*sfp
, unsigned int state
,
1780 unsigned int timeout
)
1782 sfp
->sm_mod_state
= state
;
1783 sfp_sm_set_timer(sfp
, timeout
);
1786 static void sfp_sm_phy_detach(struct sfp
*sfp
)
1788 sfp_remove_phy(sfp
->sfp_bus
);
1789 phy_device_remove(sfp
->mod_phy
);
1790 phy_device_free(sfp
->mod_phy
);
1791 sfp
->mod_phy
= NULL
;
1794 static int sfp_sm_probe_phy(struct sfp
*sfp
, int addr
, bool is_c45
)
1796 struct phy_device
*phy
;
1799 phy
= get_phy_device(sfp
->i2c_mii
, addr
, is_c45
);
1800 if (phy
== ERR_PTR(-ENODEV
))
1801 return PTR_ERR(phy
);
1803 dev_err(sfp
->dev
, "mdiobus scan returned %pe\n", phy
);
1804 return PTR_ERR(phy
);
1807 /* Mark this PHY as being on a SFP module */
1808 phy
->is_on_sfp_module
= true;
1810 err
= phy_device_register(phy
);
1812 phy_device_free(phy
);
1813 dev_err(sfp
->dev
, "phy_device_register failed: %pe\n",
1818 err
= sfp_add_phy(sfp
->sfp_bus
, phy
);
1820 phy_device_remove(phy
);
1821 phy_device_free(phy
);
1822 dev_err(sfp
->dev
, "sfp_add_phy failed: %pe\n", ERR_PTR(err
));
1831 static void sfp_sm_link_up(struct sfp
*sfp
)
1833 sfp_link_up(sfp
->sfp_bus
);
1834 sfp_sm_next(sfp
, SFP_S_LINK_UP
, 0);
1837 static void sfp_sm_link_down(struct sfp
*sfp
)
1839 sfp_link_down(sfp
->sfp_bus
);
1842 static void sfp_sm_link_check_los(struct sfp
*sfp
)
1844 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1845 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1846 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1849 /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1850 * are set, we assume that no LOS signal is available. If both are
1851 * set, we assume LOS is not implemented (and is meaningless.)
1853 if (los_options
== los_inverted
)
1854 los
= !(sfp
->state
& SFP_F_LOS
);
1855 else if (los_options
== los_normal
)
1856 los
= !!(sfp
->state
& SFP_F_LOS
);
1859 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
1861 sfp_sm_link_up(sfp
);
1864 static bool sfp_los_event_active(struct sfp
*sfp
, unsigned int event
)
1866 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1867 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1868 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1870 return (los_options
== los_inverted
&& event
== SFP_E_LOS_LOW
) ||
1871 (los_options
== los_normal
&& event
== SFP_E_LOS_HIGH
);
1874 static bool sfp_los_event_inactive(struct sfp
*sfp
, unsigned int event
)
1876 const __be16 los_inverted
= cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
);
1877 const __be16 los_normal
= cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
);
1878 __be16 los_options
= sfp
->id
.ext
.options
& (los_inverted
| los_normal
);
1880 return (los_options
== los_inverted
&& event
== SFP_E_LOS_HIGH
) ||
1881 (los_options
== los_normal
&& event
== SFP_E_LOS_LOW
);
1884 static void sfp_sm_fault(struct sfp
*sfp
, unsigned int next_state
, bool warn
)
1886 if (sfp
->sm_fault_retries
&& !--sfp
->sm_fault_retries
) {
1888 "module persistently indicates fault, disabling\n");
1889 sfp_sm_next(sfp
, SFP_S_TX_DISABLE
, 0);
1892 dev_err(sfp
->dev
, "module transmit fault indicated\n");
1894 sfp_sm_next(sfp
, next_state
, T_FAULT_RECOVER
);
1898 static int sfp_sm_add_mdio_bus(struct sfp
*sfp
)
1900 if (sfp
->mdio_protocol
!= MDIO_I2C_NONE
)
1901 return sfp_i2c_mdiobus_create(sfp
);
1906 /* Probe a SFP for a PHY device if the module supports copper - the PHY
1907 * normally sits at I2C bus address 0x56, and may either be a clause 22
1910 * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1911 * negotiation enabled, but some may be in 1000base-X - which is for the
1912 * PHY driver to determine.
1914 * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1915 * mode according to the negotiated line speed.
1917 static int sfp_sm_probe_for_phy(struct sfp
*sfp
)
1921 switch (sfp
->mdio_protocol
) {
1925 case MDIO_I2C_MARVELL_C22
:
1926 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR
, false);
1930 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR
, true);
1933 case MDIO_I2C_ROLLBALL
:
1934 err
= sfp_sm_probe_phy(sfp
, SFP_PHY_ADDR_ROLLBALL
, true);
1941 static int sfp_module_parse_power(struct sfp
*sfp
)
1943 u32 power_mW
= 1000;
1946 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV10_2
&&
1947 sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_POWER_DECL
))
1949 /* Added in Rev 11.9, but there is no compliance code for this */
1950 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV11_4
&&
1951 sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL
))
1954 /* Power level 1 modules (max. 1W) are always supported. */
1955 if (power_mW
<= 1000) {
1956 sfp
->module_power_mW
= power_mW
;
1960 supports_a2
= sfp
->id
.ext
.sff8472_compliance
!=
1961 SFP_SFF8472_COMPLIANCE_NONE
||
1962 sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
;
1964 if (power_mW
> sfp
->max_power_mW
) {
1965 /* Module power specification exceeds the allowed maximum. */
1967 /* The module appears not to implement bus address
1968 * 0xa2, so assume that the module powers up in the
1972 "Host does not support %u.%uW modules\n",
1973 power_mW
/ 1000, (power_mW
/ 100) % 10);
1977 "Host does not support %u.%uW modules, module left in power mode 1\n",
1978 power_mW
/ 1000, (power_mW
/ 100) % 10);
1984 /* The module power level is below the host maximum and the
1985 * module appears not to implement bus address 0xa2, so assume
1986 * that the module powers up in the indicated mode.
1991 /* If the module requires a higher power mode, but also requires
1992 * an address change sequence, warn the user that the module may
1993 * not be functional.
1995 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
) {
1997 "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1998 power_mW
/ 1000, (power_mW
/ 100) % 10);
2002 sfp
->module_power_mW
= power_mW
;
2007 static int sfp_sm_mod_hpower(struct sfp
*sfp
, bool enable
)
2011 err
= sfp_modify_u8(sfp
, true, SFP_EXT_STATUS
,
2012 SFP_EXT_STATUS_PWRLVL_SELECT
,
2013 enable
? SFP_EXT_STATUS_PWRLVL_SELECT
: 0);
2014 if (err
!= sizeof(u8
)) {
2015 dev_err(sfp
->dev
, "failed to %sable high power: %pe\n",
2016 enable
? "en" : "dis", ERR_PTR(err
));
2021 dev_info(sfp
->dev
, "Module switched to %u.%uW power level\n",
2022 sfp
->module_power_mW
/ 1000,
2023 (sfp
->module_power_mW
/ 100) % 10);
2028 static void sfp_module_parse_rate_select(struct sfp
*sfp
)
2032 sfp
->rs_threshold_kbd
= 0;
2033 sfp
->rs_state_mask
= 0;
2035 if (!(sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_RATE_SELECT
)))
2036 /* No support for RateSelect */
2039 /* Default to INF-8074 RateSelect operation. The signalling threshold
2040 * rate is not well specified, so always select "Full Bandwidth", but
2041 * SFF-8079 reveals that it is understood that RS0 will be low for
2042 * 1.0625Gb/s and high for 2.125Gb/s. Choose a value half-way between.
2043 * This method exists prior to SFF-8472.
2045 sfp
->rs_state_mask
= SFP_F_RS0
;
2046 sfp
->rs_threshold_kbd
= 1594;
2048 /* Parse the rate identifier, which is complicated due to history:
2049 * SFF-8472 rev 9.5 marks this field as reserved.
2050 * SFF-8079 references SFF-8472 rev 9.5 and defines bit 0. SFF-8472
2051 * compliance is not required.
2052 * SFF-8472 rev 10.2 defines this field using values 0..4
2053 * SFF-8472 rev 11.0 redefines this field with bit 0 for SFF-8079
2056 rate_id
= sfp
->id
.base
.rate_id
;
2061 /* SFF-8472 rev 10.0..10.4 did not account for SFF-8079 using bit 0,
2062 * and allocated value 3 to SFF-8431 independent tx/rx rate select.
2063 * Convert this to a SFF-8472 rev 11.0 rate identifier.
2065 if (sfp
->id
.ext
.sff8472_compliance
>= SFP_SFF8472_COMPLIANCE_REV10_2
&&
2066 sfp
->id
.ext
.sff8472_compliance
< SFP_SFF8472_COMPLIANCE_REV11_0
&&
2068 rate_id
= SFF_RID_8431
;
2070 if (rate_id
& SFF_RID_8079
) {
2071 /* SFF-8079 RateSelect / Application Select in conjunction with
2072 * SFF-8472 rev 9.5. SFF-8079 defines rate_id as a bitfield
2073 * with only bit 0 used, which takes precedence over SFF-8472.
2075 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_APP_SELECT_SFF8079
)) {
2076 /* SFF-8079 Part 1 - rate selection between Fibre
2077 * Channel 1.0625/2.125/4.25 Gbd modes. Note that RS0
2078 * is high for 2125, so we have to subtract 1 to
2081 sfp
->rs_threshold_kbd
= 2125 - 1;
2082 sfp
->rs_state_mask
= SFP_F_RS0
;
2087 /* SFF-8472 rev 9.5 does not define the rate identifier */
2088 if (sfp
->id
.ext
.sff8472_compliance
<= SFP_SFF8472_COMPLIANCE_REV9_5
)
2091 /* SFF-8472 rev 11.0 defines rate_id as a numerical value which will
2092 * always have bit 0 clear due to SFF-8079's bitfield usage of rate_id.
2095 case SFF_RID_8431_RX_ONLY
:
2096 sfp
->rs_threshold_kbd
= 4250;
2097 sfp
->rs_state_mask
= SFP_F_RS0
;
2100 case SFF_RID_8431_TX_ONLY
:
2101 sfp
->rs_threshold_kbd
= 4250;
2102 sfp
->rs_state_mask
= SFP_F_RS1
;
2106 sfp
->rs_threshold_kbd
= 4250;
2107 sfp
->rs_state_mask
= SFP_F_RS0
| SFP_F_RS1
;
2111 sfp
->rs_threshold_kbd
= 9000;
2112 sfp
->rs_state_mask
= SFP_F_RS0
| SFP_F_RS1
;
2117 /* GPON modules based on Realtek RTL8672 and RTL9601C chips (e.g. V-SOL
2118 * V2801F, CarlitoxxPro CPGOS03-0490, Ubiquiti U-Fiber Instant, ...) do
2119 * not support multibyte reads from the EEPROM. Each multi-byte read
2120 * operation returns just one byte of EEPROM followed by zeros. There is
2121 * no way to identify which modules are using Realtek RTL8672 and RTL9601C
2122 * chips. Moreover every OEM of V-SOL V2801F module puts its own vendor
2123 * name and vendor id into EEPROM, so there is even no way to detect if
2124 * module is V-SOL V2801F. Therefore check for those zeros in the read
2125 * data and then based on check switch to reading EEPROM to one byte
2128 static bool sfp_id_needs_byte_io(struct sfp
*sfp
, void *buf
, size_t len
)
2130 size_t i
, block_size
= sfp
->i2c_block_size
;
2132 /* Already using byte IO */
2133 if (block_size
== 1)
2136 for (i
= 1; i
< len
; i
+= block_size
) {
2137 if (memchr_inv(buf
+ i
, '\0', min(block_size
- 1, len
- i
)))
2143 static int sfp_cotsworks_fixup_check(struct sfp
*sfp
, struct sfp_eeprom_id
*id
)
2148 if (id
->base
.phys_id
!= SFF8024_ID_SFF_8472
||
2149 id
->base
.phys_ext_id
!= SFP_PHYS_EXT_ID_SFP
||
2150 id
->base
.connector
!= SFF8024_CONNECTOR_LC
) {
2151 dev_warn(sfp
->dev
, "Rewriting fiber module EEPROM with corrected values\n");
2152 id
->base
.phys_id
= SFF8024_ID_SFF_8472
;
2153 id
->base
.phys_ext_id
= SFP_PHYS_EXT_ID_SFP
;
2154 id
->base
.connector
= SFF8024_CONNECTOR_LC
;
2155 err
= sfp_write(sfp
, false, SFP_PHYS_ID
, &id
->base
, 3);
2158 "Failed to rewrite module EEPROM: %pe\n",
2163 /* Cotsworks modules have been found to require a delay between write operations. */
2166 /* Update base structure checksum */
2167 check
= sfp_check(&id
->base
, sizeof(id
->base
) - 1);
2168 err
= sfp_write(sfp
, false, SFP_CC_BASE
, &check
, 1);
2171 "Failed to update base structure checksum in fiber module EEPROM: %pe\n",
2179 static int sfp_module_parse_sff8472(struct sfp
*sfp
)
2181 /* If the module requires address swap mode, warn about it */
2182 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)
2184 "module address swap to access page 0xA2 is not supported.\n");
2186 sfp
->have_a2
= true;
2191 static int sfp_sm_mod_probe(struct sfp
*sfp
, bool report
)
2193 /* SFP module inserted - read I2C data */
2194 struct sfp_eeprom_id id
;
2195 bool cotsworks_sfbg
;
2201 sfp
->i2c_block_size
= SFP_EEPROM_BLOCK_SIZE
;
2203 ret
= sfp_read(sfp
, false, 0, &id
.base
, sizeof(id
.base
));
2206 dev_err(sfp
->dev
, "failed to read EEPROM: %pe\n",
2211 if (ret
!= sizeof(id
.base
)) {
2212 dev_err(sfp
->dev
, "EEPROM short read: %pe\n", ERR_PTR(ret
));
2216 /* Some SFP modules (e.g. Nokia 3FE46541AA) lock up if read from
2217 * address 0x51 is just one byte at a time. Also SFF-8472 requires
2218 * that EEPROM supports atomic 16bit read operation for diagnostic
2219 * fields, so do not switch to one byte reading at a time unless it
2220 * is really required and we have no other option.
2222 if (sfp_id_needs_byte_io(sfp
, &id
.base
, sizeof(id
.base
))) {
2224 "Detected broken RTL8672/RTL9601C emulated EEPROM\n");
2226 "Switching to reading EEPROM to one byte at a time\n");
2227 sfp
->i2c_block_size
= 1;
2229 ret
= sfp_read(sfp
, false, 0, &id
.base
, sizeof(id
.base
));
2233 "failed to read EEPROM: %pe\n",
2238 if (ret
!= sizeof(id
.base
)) {
2239 dev_err(sfp
->dev
, "EEPROM short read: %pe\n",
2245 /* Cotsworks do not seem to update the checksums when they
2246 * do the final programming with the final module part number,
2247 * serial number and date code.
2249 cotsworks
= !memcmp(id
.base
.vendor_name
, "COTSWORKS ", 16);
2250 cotsworks_sfbg
= !memcmp(id
.base
.vendor_pn
, "SFBG", 4);
2252 /* Cotsworks SFF module EEPROM do not always have valid phys_id,
2253 * phys_ext_id, and connector bytes. Rewrite SFF EEPROM bytes if
2254 * Cotsworks PN matches and bytes are not correct.
2256 if (cotsworks
&& cotsworks_sfbg
) {
2257 ret
= sfp_cotsworks_fixup_check(sfp
, &id
);
2262 /* Validate the checksum over the base structure */
2263 check
= sfp_check(&id
.base
, sizeof(id
.base
) - 1);
2264 if (check
!= id
.base
.cc_base
) {
2267 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
2268 check
, id
.base
.cc_base
);
2271 "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
2272 check
, id
.base
.cc_base
);
2273 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
2274 16, 1, &id
, sizeof(id
), true);
2279 ret
= sfp_read(sfp
, false, SFP_CC_BASE
+ 1, &id
.ext
, sizeof(id
.ext
));
2282 dev_err(sfp
->dev
, "failed to read EEPROM: %pe\n",
2287 if (ret
!= sizeof(id
.ext
)) {
2288 dev_err(sfp
->dev
, "EEPROM short read: %pe\n", ERR_PTR(ret
));
2292 check
= sfp_check(&id
.ext
, sizeof(id
.ext
) - 1);
2293 if (check
!= id
.ext
.cc_ext
) {
2296 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
2297 check
, id
.ext
.cc_ext
);
2300 "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
2301 check
, id
.ext
.cc_ext
);
2302 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
2303 16, 1, &id
, sizeof(id
), true);
2304 memset(&id
.ext
, 0, sizeof(id
.ext
));
2310 dev_info(sfp
->dev
, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
2311 (int)sizeof(id
.base
.vendor_name
), id
.base
.vendor_name
,
2312 (int)sizeof(id
.base
.vendor_pn
), id
.base
.vendor_pn
,
2313 (int)sizeof(id
.base
.vendor_rev
), id
.base
.vendor_rev
,
2314 (int)sizeof(id
.ext
.vendor_sn
), id
.ext
.vendor_sn
,
2315 (int)sizeof(id
.ext
.datecode
), id
.ext
.datecode
);
2317 /* Check whether we support this module */
2318 if (!sfp
->type
->module_supported(&id
)) {
2320 "module is not supported - phys id 0x%02x 0x%02x\n",
2321 sfp
->id
.base
.phys_id
, sfp
->id
.base
.phys_ext_id
);
2325 if (sfp
->id
.ext
.sff8472_compliance
!= SFP_SFF8472_COMPLIANCE_NONE
) {
2326 ret
= sfp_module_parse_sff8472(sfp
);
2331 /* Parse the module power requirement */
2332 ret
= sfp_module_parse_power(sfp
);
2336 sfp_module_parse_rate_select(sfp
);
2338 mask
= SFP_F_PRESENT
;
2339 if (sfp
->gpio
[GPIO_TX_DISABLE
])
2340 mask
|= SFP_F_TX_DISABLE
;
2341 if (sfp
->gpio
[GPIO_TX_FAULT
])
2342 mask
|= SFP_F_TX_FAULT
;
2343 if (sfp
->gpio
[GPIO_LOS
])
2345 if (sfp
->gpio
[GPIO_RS0
])
2347 if (sfp
->gpio
[GPIO_RS1
])
2350 sfp
->module_t_start_up
= T_START_UP
;
2351 sfp
->module_t_wait
= T_WAIT
;
2352 sfp
->phy_t_retry
= T_PHY_RETRY
;
2354 sfp
->state_ignore_mask
= 0;
2356 if (sfp
->id
.base
.extended_cc
== SFF8024_ECC_10GBASE_T_SFI
||
2357 sfp
->id
.base
.extended_cc
== SFF8024_ECC_10GBASE_T_SR
||
2358 sfp
->id
.base
.extended_cc
== SFF8024_ECC_5GBASE_T
||
2359 sfp
->id
.base
.extended_cc
== SFF8024_ECC_2_5GBASE_T
)
2360 sfp
->mdio_protocol
= MDIO_I2C_C45
;
2361 else if (sfp
->id
.base
.e1000_base_t
)
2362 sfp
->mdio_protocol
= MDIO_I2C_MARVELL_C22
;
2364 sfp
->mdio_protocol
= MDIO_I2C_NONE
;
2366 sfp
->quirk
= sfp_lookup_quirk(&id
);
2368 mutex_lock(&sfp
->st_mutex
);
2369 /* Initialise state bits to use from hardware */
2370 sfp
->state_hw_mask
= mask
;
2372 /* We want to drive the rate select pins that the module is using */
2373 sfp
->state_hw_drive
|= sfp
->rs_state_mask
;
2375 if (sfp
->quirk
&& sfp
->quirk
->fixup
)
2376 sfp
->quirk
->fixup(sfp
);
2378 sfp
->state_hw_mask
&= ~sfp
->state_ignore_mask
;
2379 mutex_unlock(&sfp
->st_mutex
);
2384 static void sfp_sm_mod_remove(struct sfp
*sfp
)
2386 if (sfp
->sm_mod_state
> SFP_MOD_WAITDEV
)
2387 sfp_module_remove(sfp
->sfp_bus
);
2389 sfp_hwmon_remove(sfp
);
2391 memset(&sfp
->id
, 0, sizeof(sfp
->id
));
2392 sfp
->module_power_mW
= 0;
2393 sfp
->state_hw_drive
= SFP_F_TX_DISABLE
;
2394 sfp
->have_a2
= false;
2396 dev_info(sfp
->dev
, "module removed\n");
2399 /* This state machine tracks the upstream's state */
2400 static void sfp_sm_device(struct sfp
*sfp
, unsigned int event
)
2402 switch (sfp
->sm_dev_state
) {
2404 if (event
== SFP_E_DEV_ATTACH
)
2405 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
2409 if (event
== SFP_E_DEV_DETACH
)
2410 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
2411 else if (event
== SFP_E_DEV_UP
)
2412 sfp
->sm_dev_state
= SFP_DEV_UP
;
2416 if (event
== SFP_E_DEV_DETACH
)
2417 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
2418 else if (event
== SFP_E_DEV_DOWN
)
2419 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
2424 /* This state machine tracks the insert/remove state of the module, probes
2425 * the on-board EEPROM, and sets up the power level.
2427 static void sfp_sm_module(struct sfp
*sfp
, unsigned int event
)
2431 /* Handle remove event globally, it resets this state machine */
2432 if (event
== SFP_E_REMOVE
) {
2433 sfp_sm_mod_remove(sfp
);
2434 sfp_sm_mod_next(sfp
, SFP_MOD_EMPTY
, 0);
2438 /* Handle device detach globally */
2439 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
&&
2440 sfp
->sm_mod_state
> SFP_MOD_WAITDEV
) {
2441 if (sfp
->module_power_mW
> 1000 &&
2442 sfp
->sm_mod_state
> SFP_MOD_HPOWER
)
2443 sfp_sm_mod_hpower(sfp
, false);
2444 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
2448 switch (sfp
->sm_mod_state
) {
2450 if (event
== SFP_E_INSERT
) {
2451 sfp_sm_mod_next(sfp
, SFP_MOD_PROBE
, T_SERIAL
);
2452 sfp
->sm_mod_tries_init
= R_PROBE_RETRY_INIT
;
2453 sfp
->sm_mod_tries
= R_PROBE_RETRY_SLOW
;
2458 /* Wait for T_PROBE_INIT to time out */
2459 if (event
!= SFP_E_TIMEOUT
)
2462 err
= sfp_sm_mod_probe(sfp
, sfp
->sm_mod_tries
== 1);
2463 if (err
== -EAGAIN
) {
2464 if (sfp
->sm_mod_tries_init
&&
2465 --sfp
->sm_mod_tries_init
) {
2466 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
2468 } else if (sfp
->sm_mod_tries
&& --sfp
->sm_mod_tries
) {
2469 if (sfp
->sm_mod_tries
== R_PROBE_RETRY_SLOW
- 1)
2471 "please wait, module slow to respond\n");
2472 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_SLOW
);
2477 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2481 /* Force a poll to re-read the hardware signal state after
2482 * sfp_sm_mod_probe() changed state_hw_mask.
2484 mod_delayed_work(system_wq
, &sfp
->poll
, 1);
2486 err
= sfp_hwmon_insert(sfp
);
2488 dev_warn(sfp
->dev
, "hwmon probe failed: %pe\n",
2491 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
2493 case SFP_MOD_WAITDEV
:
2494 /* Ensure that the device is attached before proceeding */
2495 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
)
2498 /* Report the module insertion to the upstream device */
2499 err
= sfp_module_insert(sfp
->sfp_bus
, &sfp
->id
,
2502 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2506 /* If this is a power level 1 module, we are done */
2507 if (sfp
->module_power_mW
<= 1000)
2510 sfp_sm_mod_next(sfp
, SFP_MOD_HPOWER
, 0);
2512 case SFP_MOD_HPOWER
:
2513 /* Enable high power mode */
2514 err
= sfp_sm_mod_hpower(sfp
, true);
2516 if (err
!= -EAGAIN
) {
2517 sfp_module_remove(sfp
->sfp_bus
);
2518 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
2520 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
2525 sfp_sm_mod_next(sfp
, SFP_MOD_WAITPWR
, T_HPOWER_LEVEL
);
2528 case SFP_MOD_WAITPWR
:
2529 /* Wait for T_HPOWER_LEVEL to time out */
2530 if (event
!= SFP_E_TIMEOUT
)
2534 sfp_sm_mod_next(sfp
, SFP_MOD_PRESENT
, 0);
2537 case SFP_MOD_PRESENT
:
2543 static void sfp_sm_main(struct sfp
*sfp
, unsigned int event
)
2545 unsigned long timeout
;
2548 /* Some events are global */
2549 if (sfp
->sm_state
!= SFP_S_DOWN
&&
2550 (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
2551 sfp
->sm_dev_state
!= SFP_DEV_UP
)) {
2552 if (sfp
->sm_state
== SFP_S_LINK_UP
&&
2553 sfp
->sm_dev_state
== SFP_DEV_UP
)
2554 sfp_sm_link_down(sfp
);
2555 if (sfp
->sm_state
> SFP_S_INIT
)
2556 sfp_module_stop(sfp
->sfp_bus
);
2558 sfp_sm_phy_detach(sfp
);
2560 sfp_i2c_mdiobus_destroy(sfp
);
2561 sfp_module_tx_disable(sfp
);
2562 sfp_soft_stop_poll(sfp
);
2563 sfp_sm_next(sfp
, SFP_S_DOWN
, 0);
2567 /* The main state machine */
2568 switch (sfp
->sm_state
) {
2570 if (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
2571 sfp
->sm_dev_state
!= SFP_DEV_UP
)
2574 /* Only use the soft state bits if we have access to the A2h
2575 * memory, which implies that we have some level of SFF-8472
2579 sfp_soft_start_poll(sfp
);
2581 sfp_module_tx_enable(sfp
);
2583 /* Initialise the fault clearance retries */
2584 sfp
->sm_fault_retries
= N_FAULT_INIT
;
2586 /* We need to check the TX_FAULT state, which is not defined
2587 * while TX_DISABLE is asserted. The earliest we want to do
2588 * anything (such as probe for a PHY) is 50ms (or more on
2589 * specific modules).
2591 sfp_sm_next(sfp
, SFP_S_WAIT
, sfp
->module_t_wait
);
2595 if (event
!= SFP_E_TIMEOUT
)
2598 if (sfp
->state
& SFP_F_TX_FAULT
) {
2599 /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
2600 * from the TX_DISABLE deassertion for the module to
2601 * initialise, which is indicated by TX_FAULT
2604 timeout
= sfp
->module_t_start_up
;
2605 if (timeout
> sfp
->module_t_wait
)
2606 timeout
-= sfp
->module_t_wait
;
2610 sfp_sm_next(sfp
, SFP_S_INIT
, timeout
);
2612 /* TX_FAULT is not asserted, assume the module has
2613 * finished initialising.
2620 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
2621 /* TX_FAULT is still asserted after t_init
2622 * or t_start_up, so assume there is a fault.
2624 sfp_sm_fault(sfp
, SFP_S_INIT_TX_FAULT
,
2625 sfp
->sm_fault_retries
== N_FAULT_INIT
);
2626 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
2628 /* Create mdiobus and start trying for PHY */
2629 ret
= sfp_sm_add_mdio_bus(sfp
);
2631 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2634 sfp
->sm_phy_retries
= R_PHY_RETRY
;
2639 case SFP_S_INIT_PHY
:
2640 if (event
!= SFP_E_TIMEOUT
)
2643 /* TX_FAULT deasserted or we timed out with TX_FAULT
2644 * clear. Probe for the PHY and check the LOS state.
2646 ret
= sfp_sm_probe_for_phy(sfp
);
2647 if (ret
== -ENODEV
) {
2648 if (--sfp
->sm_phy_retries
) {
2649 sfp_sm_next(sfp
, SFP_S_INIT_PHY
,
2652 "no PHY detected, %u tries left\n",
2653 sfp
->sm_phy_retries
);
2656 dev_info(sfp
->dev
, "no PHY detected\n");
2659 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2662 if (sfp_module_start(sfp
->sfp_bus
)) {
2663 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
2666 sfp_sm_link_check_los(sfp
);
2668 /* Reset the fault retry count */
2669 sfp
->sm_fault_retries
= N_FAULT
;
2672 case SFP_S_INIT_TX_FAULT
:
2673 if (event
== SFP_E_TIMEOUT
) {
2674 sfp_module_tx_fault_reset(sfp
);
2675 sfp_sm_next(sfp
, SFP_S_INIT
, sfp
->module_t_start_up
);
2679 case SFP_S_WAIT_LOS
:
2680 if (event
== SFP_E_TX_FAULT
)
2681 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2682 else if (sfp_los_event_inactive(sfp
, event
))
2683 sfp_sm_link_up(sfp
);
2687 if (event
== SFP_E_TX_FAULT
) {
2688 sfp_sm_link_down(sfp
);
2689 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2690 } else if (sfp_los_event_active(sfp
, event
)) {
2691 sfp_sm_link_down(sfp
);
2692 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
2696 case SFP_S_TX_FAULT
:
2697 if (event
== SFP_E_TIMEOUT
) {
2698 sfp_module_tx_fault_reset(sfp
);
2699 sfp_sm_next(sfp
, SFP_S_REINIT
, sfp
->module_t_start_up
);
2704 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
2705 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, false);
2706 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
2707 dev_info(sfp
->dev
, "module transmit fault recovered\n");
2708 sfp_sm_link_check_los(sfp
);
2712 case SFP_S_TX_DISABLE
:
2717 static void __sfp_sm_event(struct sfp
*sfp
, unsigned int event
)
2719 dev_dbg(sfp
->dev
, "SM: enter %s:%s:%s event %s\n",
2720 mod_state_to_str(sfp
->sm_mod_state
),
2721 dev_state_to_str(sfp
->sm_dev_state
),
2722 sm_state_to_str(sfp
->sm_state
),
2723 event_to_str(event
));
2725 sfp_sm_device(sfp
, event
);
2726 sfp_sm_module(sfp
, event
);
2727 sfp_sm_main(sfp
, event
);
2729 dev_dbg(sfp
->dev
, "SM: exit %s:%s:%s\n",
2730 mod_state_to_str(sfp
->sm_mod_state
),
2731 dev_state_to_str(sfp
->sm_dev_state
),
2732 sm_state_to_str(sfp
->sm_state
));
2735 static void sfp_sm_event(struct sfp
*sfp
, unsigned int event
)
2737 mutex_lock(&sfp
->sm_mutex
);
2738 __sfp_sm_event(sfp
, event
);
2739 mutex_unlock(&sfp
->sm_mutex
);
2742 static void sfp_attach(struct sfp
*sfp
)
2744 sfp_sm_event(sfp
, SFP_E_DEV_ATTACH
);
2747 static void sfp_detach(struct sfp
*sfp
)
2749 sfp_sm_event(sfp
, SFP_E_DEV_DETACH
);
2752 static void sfp_start(struct sfp
*sfp
)
2754 sfp_sm_event(sfp
, SFP_E_DEV_UP
);
2757 static void sfp_stop(struct sfp
*sfp
)
2759 sfp_sm_event(sfp
, SFP_E_DEV_DOWN
);
2762 static void sfp_set_signal_rate(struct sfp
*sfp
, unsigned int rate_kbd
)
2766 sfp
->rate_kbd
= rate_kbd
;
2768 if (rate_kbd
> sfp
->rs_threshold_kbd
)
2769 set
= sfp
->rs_state_mask
;
2773 sfp_mod_state(sfp
, SFP_F_RS0
| SFP_F_RS1
, set
);
2776 static int sfp_module_info(struct sfp
*sfp
, struct ethtool_modinfo
*modinfo
)
2778 /* locking... and check module is present */
2780 if (sfp
->id
.ext
.sff8472_compliance
&&
2781 !(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)) {
2782 modinfo
->type
= ETH_MODULE_SFF_8472
;
2783 modinfo
->eeprom_len
= ETH_MODULE_SFF_8472_LEN
;
2785 modinfo
->type
= ETH_MODULE_SFF_8079
;
2786 modinfo
->eeprom_len
= ETH_MODULE_SFF_8079_LEN
;
2791 static int sfp_module_eeprom(struct sfp
*sfp
, struct ethtool_eeprom
*ee
,
2794 unsigned int first
, last
, len
;
2797 if (!(sfp
->state
& SFP_F_PRESENT
))
2804 last
= ee
->offset
+ ee
->len
;
2805 if (first
< ETH_MODULE_SFF_8079_LEN
) {
2806 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8079_LEN
);
2809 ret
= sfp_read(sfp
, false, first
, data
, len
);
2816 if (first
< ETH_MODULE_SFF_8472_LEN
&& last
> ETH_MODULE_SFF_8079_LEN
) {
2817 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8472_LEN
);
2819 first
-= ETH_MODULE_SFF_8079_LEN
;
2821 ret
= sfp_read(sfp
, true, first
, data
, len
);
2828 static int sfp_module_eeprom_by_page(struct sfp
*sfp
,
2829 const struct ethtool_module_eeprom
*page
,
2830 struct netlink_ext_ack
*extack
)
2832 if (!(sfp
->state
& SFP_F_PRESENT
))
2836 NL_SET_ERR_MSG(extack
, "Banks not supported");
2841 NL_SET_ERR_MSG(extack
, "Only page 0 supported");
2845 if (page
->i2c_address
!= 0x50 &&
2846 page
->i2c_address
!= 0x51) {
2847 NL_SET_ERR_MSG(extack
, "Only address 0x50 and 0x51 supported");
2851 return sfp_read(sfp
, page
->i2c_address
== 0x51, page
->offset
,
2852 page
->data
, page
->length
);
2855 static const struct sfp_socket_ops sfp_module_ops
= {
2856 .attach
= sfp_attach
,
2857 .detach
= sfp_detach
,
2860 .set_signal_rate
= sfp_set_signal_rate
,
2861 .module_info
= sfp_module_info
,
2862 .module_eeprom
= sfp_module_eeprom
,
2863 .module_eeprom_by_page
= sfp_module_eeprom_by_page
,
2866 static void sfp_timeout(struct work_struct
*work
)
2868 struct sfp
*sfp
= container_of(work
, struct sfp
, timeout
.work
);
2871 sfp_sm_event(sfp
, SFP_E_TIMEOUT
);
2875 static void sfp_check_state(struct sfp
*sfp
)
2877 unsigned int state
, i
, changed
;
2880 mutex_lock(&sfp
->st_mutex
);
2881 state
= sfp_get_state(sfp
);
2882 changed
= state
^ sfp
->state
;
2883 changed
&= SFP_F_PRESENT
| SFP_F_LOS
| SFP_F_TX_FAULT
;
2885 for (i
= 0; i
< GPIO_MAX
; i
++)
2886 if (changed
& BIT(i
))
2887 dev_dbg(sfp
->dev
, "%s %u -> %u\n", gpio_names
[i
],
2888 !!(sfp
->state
& BIT(i
)), !!(state
& BIT(i
)));
2890 state
|= sfp
->state
& SFP_F_OUTPUTS
;
2892 mutex_unlock(&sfp
->st_mutex
);
2894 mutex_lock(&sfp
->sm_mutex
);
2895 if (changed
& SFP_F_PRESENT
)
2896 __sfp_sm_event(sfp
, state
& SFP_F_PRESENT
?
2897 SFP_E_INSERT
: SFP_E_REMOVE
);
2899 if (changed
& SFP_F_TX_FAULT
)
2900 __sfp_sm_event(sfp
, state
& SFP_F_TX_FAULT
?
2901 SFP_E_TX_FAULT
: SFP_E_TX_CLEAR
);
2903 if (changed
& SFP_F_LOS
)
2904 __sfp_sm_event(sfp
, state
& SFP_F_LOS
?
2905 SFP_E_LOS_HIGH
: SFP_E_LOS_LOW
);
2906 mutex_unlock(&sfp
->sm_mutex
);
2910 static irqreturn_t
sfp_irq(int irq
, void *data
)
2912 struct sfp
*sfp
= data
;
2914 sfp_check_state(sfp
);
2919 static void sfp_poll(struct work_struct
*work
)
2921 struct sfp
*sfp
= container_of(work
, struct sfp
, poll
.work
);
2923 sfp_check_state(sfp
);
2925 // st_mutex doesn't need to be held here for state_soft_mask,
2926 // it's unimportant if we race while reading this.
2927 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) ||
2929 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
2932 static struct sfp
*sfp_alloc(struct device
*dev
)
2936 sfp
= kzalloc(sizeof(*sfp
), GFP_KERNEL
);
2938 return ERR_PTR(-ENOMEM
);
2941 sfp
->i2c_block_size
= SFP_EEPROM_BLOCK_SIZE
;
2943 mutex_init(&sfp
->sm_mutex
);
2944 mutex_init(&sfp
->st_mutex
);
2945 INIT_DELAYED_WORK(&sfp
->poll
, sfp_poll
);
2946 INIT_DELAYED_WORK(&sfp
->timeout
, sfp_timeout
);
2948 sfp_hwmon_init(sfp
);
2953 static void sfp_cleanup(void *data
)
2955 struct sfp
*sfp
= data
;
2957 sfp_hwmon_exit(sfp
);
2959 cancel_delayed_work_sync(&sfp
->poll
);
2960 cancel_delayed_work_sync(&sfp
->timeout
);
2962 mdiobus_unregister(sfp
->i2c_mii
);
2963 mdiobus_free(sfp
->i2c_mii
);
2966 i2c_put_adapter(sfp
->i2c
);
2970 static int sfp_i2c_get(struct sfp
*sfp
)
2972 struct fwnode_handle
*h
;
2973 struct i2c_adapter
*i2c
;
2976 h
= fwnode_find_reference(dev_fwnode(sfp
->dev
), "i2c-bus", 0);
2978 dev_err(sfp
->dev
, "missing 'i2c-bus' property\n");
2982 i2c
= i2c_get_adapter_by_fwnode(h
);
2984 err
= -EPROBE_DEFER
;
2988 err
= sfp_i2c_configure(sfp
, i2c
);
2990 i2c_put_adapter(i2c
);
2992 fwnode_handle_put(h
);
2996 static int sfp_probe(struct platform_device
*pdev
)
2998 const struct sff_data
*sff
;
3003 sfp
= sfp_alloc(&pdev
->dev
);
3005 return PTR_ERR(sfp
);
3007 platform_set_drvdata(pdev
, sfp
);
3009 err
= devm_add_action_or_reset(sfp
->dev
, sfp_cleanup
, sfp
);
3013 sff
= device_get_match_data(sfp
->dev
);
3019 err
= sfp_i2c_get(sfp
);
3023 for (i
= 0; i
< GPIO_MAX
; i
++)
3024 if (sff
->gpios
& BIT(i
)) {
3025 sfp
->gpio
[i
] = devm_gpiod_get_optional(sfp
->dev
,
3026 gpio_names
[i
], gpio_flags
[i
]);
3027 if (IS_ERR(sfp
->gpio
[i
]))
3028 return PTR_ERR(sfp
->gpio
[i
]);
3031 sfp
->state_hw_mask
= SFP_F_PRESENT
;
3032 sfp
->state_hw_drive
= SFP_F_TX_DISABLE
;
3034 sfp
->get_state
= sfp_gpio_get_state
;
3035 sfp
->set_state
= sfp_gpio_set_state
;
3037 /* Modules that have no detect signal are always present */
3038 if (!(sfp
->gpio
[GPIO_MODDEF0
]))
3039 sfp
->get_state
= sff_gpio_get_state
;
3041 device_property_read_u32(&pdev
->dev
, "maximum-power-milliwatt",
3042 &sfp
->max_power_mW
);
3043 if (sfp
->max_power_mW
< 1000) {
3044 if (sfp
->max_power_mW
)
3046 "Firmware bug: host maximum power should be at least 1W\n");
3047 sfp
->max_power_mW
= 1000;
3050 dev_info(sfp
->dev
, "Host maximum power %u.%uW\n",
3051 sfp
->max_power_mW
/ 1000, (sfp
->max_power_mW
/ 100) % 10);
3053 /* Get the initial state, and always signal TX disable,
3054 * since the network interface will not be up.
3056 sfp
->state
= sfp_get_state(sfp
) | SFP_F_TX_DISABLE
;
3058 if (sfp
->gpio
[GPIO_RS0
] &&
3059 gpiod_get_value_cansleep(sfp
->gpio
[GPIO_RS0
]))
3060 sfp
->state
|= SFP_F_RS0
;
3061 sfp_set_state(sfp
, sfp
->state
);
3062 sfp_module_tx_disable(sfp
);
3063 if (sfp
->state
& SFP_F_PRESENT
) {
3065 sfp_sm_event(sfp
, SFP_E_INSERT
);
3069 for (i
= 0; i
< GPIO_MAX
; i
++) {
3070 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
3073 sfp
->gpio_irq
[i
] = gpiod_to_irq(sfp
->gpio
[i
]);
3074 if (sfp
->gpio_irq
[i
] < 0) {
3075 sfp
->gpio_irq
[i
] = 0;
3076 sfp
->need_poll
= true;
3080 sfp_irq_name
= devm_kasprintf(sfp
->dev
, GFP_KERNEL
,
3081 "%s-%s", dev_name(sfp
->dev
),
3087 err
= devm_request_threaded_irq(sfp
->dev
, sfp
->gpio_irq
[i
],
3090 IRQF_TRIGGER_RISING
|
3091 IRQF_TRIGGER_FALLING
,
3094 sfp
->gpio_irq
[i
] = 0;
3095 sfp
->need_poll
= true;
3100 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
3102 /* We could have an issue in cases no Tx disable pin is available or
3103 * wired as modules using a laser as their light source will continue to
3104 * be active when the fiber is removed. This could be a safety issue and
3105 * we should at least warn the user about that.
3107 if (!sfp
->gpio
[GPIO_TX_DISABLE
])
3109 "No tx_disable pin: SFP modules will always be emitting.\n");
3111 sfp
->sfp_bus
= sfp_register_socket(sfp
->dev
, sfp
, &sfp_module_ops
);
3115 sfp_debugfs_init(sfp
);
3120 static void sfp_remove(struct platform_device
*pdev
)
3122 struct sfp
*sfp
= platform_get_drvdata(pdev
);
3124 sfp_debugfs_exit(sfp
);
3125 sfp_unregister_socket(sfp
->sfp_bus
);
3128 sfp_sm_event(sfp
, SFP_E_REMOVE
);
3132 static void sfp_shutdown(struct platform_device
*pdev
)
3134 struct sfp
*sfp
= platform_get_drvdata(pdev
);
3137 for (i
= 0; i
< GPIO_MAX
; i
++) {
3138 if (!sfp
->gpio_irq
[i
])
3141 devm_free_irq(sfp
->dev
, sfp
->gpio_irq
[i
], sfp
);
3144 cancel_delayed_work_sync(&sfp
->poll
);
3145 cancel_delayed_work_sync(&sfp
->timeout
);
3148 static struct platform_driver sfp_driver
= {
3150 .remove
= sfp_remove
,
3151 .shutdown
= sfp_shutdown
,
3154 .of_match_table
= sfp_of_match
,
3158 static int sfp_init(void)
3160 poll_jiffies
= msecs_to_jiffies(100);
3162 return platform_driver_register(&sfp_driver
);
3164 module_init(sfp_init
);
3166 static void sfp_exit(void)
3168 platform_driver_unregister(&sfp_driver
);
3170 module_exit(sfp_exit
);
3172 MODULE_ALIAS("platform:sfp");
3173 MODULE_AUTHOR("Russell King");
3174 MODULE_LICENSE("GPL v2");
3175 MODULE_DESCRIPTION("SFP cage support");