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