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