1 // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause) 2 /* 3 * Copyright (c) 2014-2025, Advanced Micro Devices, Inc. 4 * Copyright (c) 2014, Synopsys, Inc. 5 * All rights reserved 6 */ 7 8 #include <linux/module.h> 9 #include <linux/device.h> 10 #include <linux/kmod.h> 11 #include <linux/mdio.h> 12 #include <linux/phy.h> 13 #include <linux/ethtool.h> 14 15 #include "xgbe.h" 16 #include "xgbe-common.h" 17 18 #define XGBE_PHY_PORT_SPEED_10 BIT(0) 19 #define XGBE_PHY_PORT_SPEED_100 BIT(1) 20 #define XGBE_PHY_PORT_SPEED_1000 BIT(2) 21 #define XGBE_PHY_PORT_SPEED_2500 BIT(3) 22 #define XGBE_PHY_PORT_SPEED_10000 BIT(4) 23 24 #define XGBE_MUTEX_RELEASE 0x80000000 25 26 #define XGBE_SFP_DIRECT 7 27 28 /* I2C target addresses */ 29 #define XGBE_SFP_SERIAL_ID_ADDRESS 0x50 30 #define XGBE_SFP_DIAG_INFO_ADDRESS 0x51 31 #define XGBE_SFP_PHY_ADDRESS 0x56 32 #define XGBE_GPIO_ADDRESS_PCA9555 0x20 33 34 /* SFP sideband signal indicators */ 35 #define XGBE_GPIO_NO_TX_FAULT BIT(0) 36 #define XGBE_GPIO_NO_RATE_SELECT BIT(1) 37 #define XGBE_GPIO_NO_MOD_ABSENT BIT(2) 38 #define XGBE_GPIO_NO_RX_LOS BIT(3) 39 40 /* Rate-change complete wait/retry count */ 41 #define XGBE_RATECHANGE_COUNT 500 42 43 /* CDR delay values for KR support (in usec) */ 44 #define XGBE_CDR_DELAY_INIT 10000 45 #define XGBE_CDR_DELAY_INC 10000 46 #define XGBE_CDR_DELAY_MAX 100000 47 48 /* RRC frequency during link status check */ 49 #define XGBE_RRC_FREQUENCY 10 50 51 enum xgbe_port_mode { 52 XGBE_PORT_MODE_RSVD = 0, 53 XGBE_PORT_MODE_BACKPLANE, 54 XGBE_PORT_MODE_BACKPLANE_2500, 55 XGBE_PORT_MODE_1000BASE_T, 56 XGBE_PORT_MODE_1000BASE_X, 57 XGBE_PORT_MODE_NBASE_T, 58 XGBE_PORT_MODE_10GBASE_T, 59 XGBE_PORT_MODE_10GBASE_R, 60 XGBE_PORT_MODE_SFP, 61 XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG, 62 XGBE_PORT_MODE_MAX, 63 }; 64 65 enum xgbe_conn_type { 66 XGBE_CONN_TYPE_NONE = 0, 67 XGBE_CONN_TYPE_SFP, 68 XGBE_CONN_TYPE_MDIO, 69 XGBE_CONN_TYPE_RSVD1, 70 XGBE_CONN_TYPE_BACKPLANE, 71 XGBE_CONN_TYPE_MAX, 72 }; 73 74 /* SFP/SFP+ related definitions */ 75 enum xgbe_sfp_comm { 76 XGBE_SFP_COMM_DIRECT = 0, 77 XGBE_SFP_COMM_PCA9545, 78 }; 79 80 enum xgbe_sfp_cable { 81 XGBE_SFP_CABLE_UNKNOWN = 0, 82 XGBE_SFP_CABLE_ACTIVE, 83 XGBE_SFP_CABLE_PASSIVE, 84 XGBE_SFP_CABLE_FIBER, 85 }; 86 87 enum xgbe_sfp_base { 88 XGBE_SFP_BASE_UNKNOWN = 0, 89 XGBE_SFP_BASE_1000_T, 90 XGBE_SFP_BASE_1000_SX, 91 XGBE_SFP_BASE_1000_LX, 92 XGBE_SFP_BASE_1000_CX, 93 XGBE_SFP_BASE_10000_SR, 94 XGBE_SFP_BASE_10000_LR, 95 XGBE_SFP_BASE_10000_LRM, 96 XGBE_SFP_BASE_10000_ER, 97 XGBE_SFP_BASE_10000_CR, 98 }; 99 100 enum xgbe_sfp_speed { 101 XGBE_SFP_SPEED_UNKNOWN = 0, 102 XGBE_SFP_SPEED_100_1000, 103 XGBE_SFP_SPEED_1000, 104 XGBE_SFP_SPEED_10000, 105 }; 106 107 /* SFP Serial ID Base ID values relative to an offset of 0 */ 108 #define XGBE_SFP_BASE_ID 0 109 #define XGBE_SFP_ID_SFP 0x03 110 111 #define XGBE_SFP_BASE_EXT_ID 1 112 #define XGBE_SFP_EXT_ID_SFP 0x04 113 114 #define XGBE_SFP_BASE_10GBE_CC 3 115 #define XGBE_SFP_BASE_10GBE_CC_SR BIT(4) 116 #define XGBE_SFP_BASE_10GBE_CC_LR BIT(5) 117 #define XGBE_SFP_BASE_10GBE_CC_LRM BIT(6) 118 #define XGBE_SFP_BASE_10GBE_CC_ER BIT(7) 119 120 #define XGBE_SFP_BASE_1GBE_CC 6 121 #define XGBE_SFP_BASE_1GBE_CC_SX BIT(0) 122 #define XGBE_SFP_BASE_1GBE_CC_LX BIT(1) 123 #define XGBE_SFP_BASE_1GBE_CC_CX BIT(2) 124 #define XGBE_SFP_BASE_1GBE_CC_T BIT(3) 125 126 #define XGBE_SFP_BASE_CABLE 8 127 #define XGBE_SFP_BASE_CABLE_PASSIVE BIT(2) 128 #define XGBE_SFP_BASE_CABLE_ACTIVE BIT(3) 129 130 #define XGBE_SFP_BASE_BR 12 131 #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a 132 #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64 133 134 #define XGBE_SFP_BASE_CU_CABLE_LEN 18 135 136 #define XGBE_SFP_BASE_VENDOR_NAME 20 137 #define XGBE_SFP_BASE_VENDOR_NAME_LEN 16 138 #define XGBE_SFP_BASE_VENDOR_PN 40 139 #define XGBE_SFP_BASE_VENDOR_PN_LEN 16 140 #define XGBE_SFP_BASE_VENDOR_REV 56 141 #define XGBE_SFP_BASE_VENDOR_REV_LEN 4 142 143 #define XGBE_SFP_BASE_CC 63 144 145 /* SFP Serial ID Extended ID values relative to an offset of 64 */ 146 #define XGBE_SFP_BASE_VENDOR_SN 4 147 #define XGBE_SFP_BASE_VENDOR_SN_LEN 16 148 149 #define XGBE_SFP_EXTD_OPT1 1 150 #define XGBE_SFP_EXTD_OPT1_RX_LOS BIT(1) 151 #define XGBE_SFP_EXTD_OPT1_TX_FAULT BIT(3) 152 153 #define XGBE_SFP_EXTD_DIAG 28 154 #define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE BIT(2) 155 156 #define XGBE_SFP_EXTD_SFF_8472 30 157 158 #define XGBE_SFP_EXTD_CC 31 159 160 struct xgbe_sfp_eeprom { 161 u8 base[64]; 162 u8 extd[32]; 163 u8 vendor[32]; 164 }; 165 166 #define XGBE_SFP_DIAGS_SUPPORTED(_x) \ 167 ((_x)->extd[XGBE_SFP_EXTD_SFF_8472] && \ 168 !((_x)->extd[XGBE_SFP_EXTD_DIAG] & XGBE_SFP_EXTD_DIAG_ADDR_CHANGE)) 169 170 #define XGBE_SFP_EEPROM_BASE_LEN 256 171 #define XGBE_SFP_EEPROM_DIAG_LEN 256 172 #define XGBE_SFP_EEPROM_MAX (XGBE_SFP_EEPROM_BASE_LEN + \ 173 XGBE_SFP_EEPROM_DIAG_LEN) 174 175 #define XGBE_BEL_FUSE_VENDOR "BEL-FUSE " 176 #define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 " 177 178 #define XGBE_MOLEX_VENDOR "Molex Inc. " 179 180 struct xgbe_sfp_ascii { 181 union { 182 char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN + 1]; 183 char partno[XGBE_SFP_BASE_VENDOR_PN_LEN + 1]; 184 char rev[XGBE_SFP_BASE_VENDOR_REV_LEN + 1]; 185 char serno[XGBE_SFP_BASE_VENDOR_SN_LEN + 1]; 186 } u; 187 }; 188 189 /* MDIO PHY reset types */ 190 enum xgbe_mdio_reset { 191 XGBE_MDIO_RESET_NONE = 0, 192 XGBE_MDIO_RESET_I2C_GPIO, 193 XGBE_MDIO_RESET_INT_GPIO, 194 XGBE_MDIO_RESET_MAX, 195 }; 196 197 /* Re-driver related definitions */ 198 enum xgbe_phy_redrv_if { 199 XGBE_PHY_REDRV_IF_MDIO = 0, 200 XGBE_PHY_REDRV_IF_I2C, 201 XGBE_PHY_REDRV_IF_MAX, 202 }; 203 204 enum xgbe_phy_redrv_model { 205 XGBE_PHY_REDRV_MODEL_4223 = 0, 206 XGBE_PHY_REDRV_MODEL_4227, 207 XGBE_PHY_REDRV_MODEL_MAX, 208 }; 209 210 enum xgbe_phy_redrv_mode { 211 XGBE_PHY_REDRV_MODE_CX = 5, 212 XGBE_PHY_REDRV_MODE_SR = 9, 213 }; 214 215 #define XGBE_PHY_REDRV_MODE_REG 0x12b0 216 217 /* PHY related configuration information */ 218 struct xgbe_phy_data { 219 enum xgbe_port_mode port_mode; 220 221 unsigned int port_id; 222 223 unsigned int port_speeds; 224 225 enum xgbe_conn_type conn_type; 226 227 enum xgbe_mode cur_mode; 228 enum xgbe_mode start_mode; 229 230 unsigned int rrc_count; 231 232 unsigned int mdio_addr; 233 234 /* SFP Support */ 235 enum xgbe_sfp_comm sfp_comm; 236 unsigned int sfp_mux_address; 237 unsigned int sfp_mux_channel; 238 239 unsigned int sfp_gpio_address; 240 unsigned int sfp_gpio_mask; 241 unsigned int sfp_gpio_inputs; 242 unsigned int sfp_gpio_rx_los; 243 unsigned int sfp_gpio_tx_fault; 244 unsigned int sfp_gpio_mod_absent; 245 unsigned int sfp_gpio_rate_select; 246 247 unsigned int sfp_rx_los; 248 unsigned int sfp_tx_fault; 249 unsigned int sfp_mod_absent; 250 unsigned int sfp_changed; 251 unsigned int sfp_phy_avail; 252 unsigned int sfp_cable_len; 253 enum xgbe_sfp_base sfp_base; 254 enum xgbe_sfp_cable sfp_cable; 255 enum xgbe_sfp_speed sfp_speed; 256 struct xgbe_sfp_eeprom sfp_eeprom; 257 258 /* External PHY support */ 259 enum xgbe_mdio_mode phydev_mode; 260 struct mii_bus *mii; 261 struct phy_device *phydev; 262 enum xgbe_mdio_reset mdio_reset; 263 unsigned int mdio_reset_addr; 264 unsigned int mdio_reset_gpio; 265 266 /* Re-driver support */ 267 unsigned int redrv; 268 unsigned int redrv_if; 269 unsigned int redrv_addr; 270 unsigned int redrv_lane; 271 unsigned int redrv_model; 272 273 /* KR AN support */ 274 unsigned int phy_cdr_notrack; 275 unsigned int phy_cdr_delay; 276 }; 277 278 /* I2C, MDIO and GPIO lines are muxed, so only one device at a time */ 279 static DEFINE_MUTEX(xgbe_phy_comm_lock); 280 281 static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata); 282 static void xgbe_phy_rrc(struct xgbe_prv_data *pdata); 283 static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata, 284 enum xgbe_mb_cmd cmd, 285 enum xgbe_mb_subcmd sub_cmd); 286 287 static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata, 288 struct xgbe_i2c_op *i2c_op) 289 { 290 return pdata->i2c_if.i2c_xfer(pdata, i2c_op); 291 } 292 293 static int xgbe_phy_redrv_write(struct xgbe_prv_data *pdata, unsigned int reg, 294 unsigned int val) 295 { 296 struct xgbe_phy_data *phy_data = pdata->phy_data; 297 struct xgbe_i2c_op i2c_op; 298 __be16 *redrv_val; 299 u8 redrv_data[5], csum; 300 unsigned int i, retry; 301 int ret; 302 303 /* High byte of register contains read/write indicator */ 304 redrv_data[0] = ((reg >> 8) & 0xff) << 1; 305 redrv_data[1] = reg & 0xff; 306 redrv_val = (__be16 *)&redrv_data[2]; 307 *redrv_val = cpu_to_be16(val); 308 309 /* Calculate 1 byte checksum */ 310 csum = 0; 311 for (i = 0; i < 4; i++) { 312 csum += redrv_data[i]; 313 if (redrv_data[i] > csum) 314 csum++; 315 } 316 redrv_data[4] = ~csum; 317 318 retry = 1; 319 again1: 320 i2c_op.cmd = XGBE_I2C_CMD_WRITE; 321 i2c_op.target = phy_data->redrv_addr; 322 i2c_op.len = sizeof(redrv_data); 323 i2c_op.buf = redrv_data; 324 ret = xgbe_phy_i2c_xfer(pdata, &i2c_op); 325 if (ret) { 326 if ((ret == -EAGAIN) && retry--) 327 goto again1; 328 329 return ret; 330 } 331 332 retry = 1; 333 again2: 334 i2c_op.cmd = XGBE_I2C_CMD_READ; 335 i2c_op.target = phy_data->redrv_addr; 336 i2c_op.len = 1; 337 i2c_op.buf = redrv_data; 338 ret = xgbe_phy_i2c_xfer(pdata, &i2c_op); 339 if (ret) { 340 if ((ret == -EAGAIN) && retry--) 341 goto again2; 342 343 return ret; 344 } 345 346 if (redrv_data[0] != 0xff) { 347 netif_dbg(pdata, drv, pdata->netdev, 348 "Redriver write checksum error\n"); 349 ret = -EIO; 350 } 351 352 return ret; 353 } 354 355 static int xgbe_phy_i2c_write(struct xgbe_prv_data *pdata, unsigned int target, 356 void *val, unsigned int val_len) 357 { 358 struct xgbe_i2c_op i2c_op; 359 int retry, ret; 360 361 retry = 1; 362 again: 363 /* Write the specfied register */ 364 i2c_op.cmd = XGBE_I2C_CMD_WRITE; 365 i2c_op.target = target; 366 i2c_op.len = val_len; 367 i2c_op.buf = val; 368 ret = xgbe_phy_i2c_xfer(pdata, &i2c_op); 369 if ((ret == -EAGAIN) && retry--) 370 goto again; 371 372 return ret; 373 } 374 375 static int xgbe_phy_i2c_read(struct xgbe_prv_data *pdata, unsigned int target, 376 void *reg, unsigned int reg_len, 377 void *val, unsigned int val_len) 378 { 379 struct xgbe_i2c_op i2c_op; 380 int retry, ret; 381 382 retry = 1; 383 again1: 384 /* Set the specified register to read */ 385 i2c_op.cmd = XGBE_I2C_CMD_WRITE; 386 i2c_op.target = target; 387 i2c_op.len = reg_len; 388 i2c_op.buf = reg; 389 ret = xgbe_phy_i2c_xfer(pdata, &i2c_op); 390 if (ret) { 391 if ((ret == -EAGAIN) && retry--) 392 goto again1; 393 394 return ret; 395 } 396 397 retry = 1; 398 again2: 399 /* Read the specfied register */ 400 i2c_op.cmd = XGBE_I2C_CMD_READ; 401 i2c_op.target = target; 402 i2c_op.len = val_len; 403 i2c_op.buf = val; 404 ret = xgbe_phy_i2c_xfer(pdata, &i2c_op); 405 if ((ret == -EAGAIN) && retry--) 406 goto again2; 407 408 return ret; 409 } 410 411 static int xgbe_phy_sfp_put_mux(struct xgbe_prv_data *pdata) 412 { 413 struct xgbe_phy_data *phy_data = pdata->phy_data; 414 struct xgbe_i2c_op i2c_op; 415 u8 mux_channel; 416 417 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) 418 return 0; 419 420 /* Select no mux channels */ 421 mux_channel = 0; 422 i2c_op.cmd = XGBE_I2C_CMD_WRITE; 423 i2c_op.target = phy_data->sfp_mux_address; 424 i2c_op.len = sizeof(mux_channel); 425 i2c_op.buf = &mux_channel; 426 427 return xgbe_phy_i2c_xfer(pdata, &i2c_op); 428 } 429 430 static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata) 431 { 432 struct xgbe_phy_data *phy_data = pdata->phy_data; 433 struct xgbe_i2c_op i2c_op; 434 u8 mux_channel; 435 436 if (phy_data->sfp_comm == XGBE_SFP_COMM_DIRECT) 437 return 0; 438 439 /* Select desired mux channel */ 440 mux_channel = 1 << phy_data->sfp_mux_channel; 441 i2c_op.cmd = XGBE_I2C_CMD_WRITE; 442 i2c_op.target = phy_data->sfp_mux_address; 443 i2c_op.len = sizeof(mux_channel); 444 i2c_op.buf = &mux_channel; 445 446 return xgbe_phy_i2c_xfer(pdata, &i2c_op); 447 } 448 449 static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata) 450 { 451 mutex_unlock(&xgbe_phy_comm_lock); 452 } 453 454 static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata) 455 { 456 struct xgbe_phy_data *phy_data = pdata->phy_data; 457 unsigned long timeout; 458 unsigned int mutex_id; 459 460 /* The I2C and MDIO/GPIO bus is multiplexed between multiple devices, 461 * the driver needs to take the software mutex and then the hardware 462 * mutexes before being able to use the busses. 463 */ 464 mutex_lock(&xgbe_phy_comm_lock); 465 466 /* Clear the mutexes */ 467 XP_IOWRITE(pdata, XP_I2C_MUTEX, XGBE_MUTEX_RELEASE); 468 XP_IOWRITE(pdata, XP_MDIO_MUTEX, XGBE_MUTEX_RELEASE); 469 470 /* Mutex formats are the same for I2C and MDIO/GPIO */ 471 mutex_id = 0; 472 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ID, phy_data->port_id); 473 XP_SET_BITS(mutex_id, XP_I2C_MUTEX, ACTIVE, 1); 474 475 timeout = jiffies + (5 * HZ); 476 while (time_before(jiffies, timeout)) { 477 /* Must be all zeroes in order to obtain the mutex */ 478 if (XP_IOREAD(pdata, XP_I2C_MUTEX) || 479 XP_IOREAD(pdata, XP_MDIO_MUTEX)) { 480 usleep_range(100, 200); 481 continue; 482 } 483 484 /* Obtain the mutex */ 485 XP_IOWRITE(pdata, XP_I2C_MUTEX, mutex_id); 486 XP_IOWRITE(pdata, XP_MDIO_MUTEX, mutex_id); 487 488 return 0; 489 } 490 491 mutex_unlock(&xgbe_phy_comm_lock); 492 493 netdev_err(pdata->netdev, "unable to obtain hardware mutexes\n"); 494 495 return -ETIMEDOUT; 496 } 497 498 static int xgbe_phy_mdio_mii_write_c22(struct xgbe_prv_data *pdata, int addr, 499 int reg, u16 val) 500 { 501 struct xgbe_phy_data *phy_data = pdata->phy_data; 502 503 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) 504 return -EOPNOTSUPP; 505 506 return pdata->hw_if.write_ext_mii_regs_c22(pdata, addr, reg, val); 507 } 508 509 static int xgbe_phy_mdio_mii_write_c45(struct xgbe_prv_data *pdata, int addr, 510 int devad, int reg, u16 val) 511 { 512 struct xgbe_phy_data *phy_data = pdata->phy_data; 513 514 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) 515 return -EOPNOTSUPP; 516 517 return pdata->hw_if.write_ext_mii_regs_c45(pdata, addr, devad, 518 reg, val); 519 } 520 521 static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data *pdata, int reg, u16 val) 522 { 523 __be16 *mii_val; 524 u8 mii_data[3]; 525 int ret; 526 527 ret = xgbe_phy_sfp_get_mux(pdata); 528 if (ret) 529 return ret; 530 531 mii_data[0] = reg & 0xff; 532 mii_val = (__be16 *)&mii_data[1]; 533 *mii_val = cpu_to_be16(val); 534 535 ret = xgbe_phy_i2c_write(pdata, XGBE_SFP_PHY_ADDRESS, 536 mii_data, sizeof(mii_data)); 537 538 xgbe_phy_sfp_put_mux(pdata); 539 540 return ret; 541 } 542 543 static int xgbe_phy_mii_write_c22(struct mii_bus *mii, int addr, int reg, 544 u16 val) 545 { 546 struct xgbe_prv_data *pdata = mii->priv; 547 struct xgbe_phy_data *phy_data = pdata->phy_data; 548 int ret; 549 550 ret = xgbe_phy_get_comm_ownership(pdata); 551 if (ret) 552 return ret; 553 554 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) 555 ret = xgbe_phy_i2c_mii_write(pdata, reg, val); 556 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) 557 ret = xgbe_phy_mdio_mii_write_c22(pdata, addr, reg, val); 558 else 559 ret = -EOPNOTSUPP; 560 561 xgbe_phy_put_comm_ownership(pdata); 562 563 return ret; 564 } 565 566 static int xgbe_phy_mii_write_c45(struct mii_bus *mii, int addr, int devad, 567 int reg, u16 val) 568 { 569 struct xgbe_prv_data *pdata = mii->priv; 570 struct xgbe_phy_data *phy_data = pdata->phy_data; 571 int ret; 572 573 ret = xgbe_phy_get_comm_ownership(pdata); 574 if (ret) 575 return ret; 576 577 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) 578 ret = -EOPNOTSUPP; 579 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) 580 ret = xgbe_phy_mdio_mii_write_c45(pdata, addr, devad, reg, val); 581 else 582 ret = -EOPNOTSUPP; 583 584 xgbe_phy_put_comm_ownership(pdata); 585 586 return ret; 587 } 588 589 static int xgbe_phy_mdio_mii_read_c22(struct xgbe_prv_data *pdata, int addr, 590 int reg) 591 { 592 struct xgbe_phy_data *phy_data = pdata->phy_data; 593 594 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL22) 595 return -EOPNOTSUPP; 596 597 return pdata->hw_if.read_ext_mii_regs_c22(pdata, addr, reg); 598 } 599 600 static int xgbe_phy_mdio_mii_read_c45(struct xgbe_prv_data *pdata, int addr, 601 int devad, int reg) 602 { 603 struct xgbe_phy_data *phy_data = pdata->phy_data; 604 605 if (phy_data->phydev_mode != XGBE_MDIO_MODE_CL45) 606 return -EOPNOTSUPP; 607 608 return pdata->hw_if.read_ext_mii_regs_c45(pdata, addr, devad, reg); 609 } 610 611 static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data *pdata, int reg) 612 { 613 __be16 mii_val; 614 u8 mii_reg; 615 int ret; 616 617 ret = xgbe_phy_sfp_get_mux(pdata); 618 if (ret) 619 return ret; 620 621 mii_reg = reg; 622 ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_PHY_ADDRESS, 623 &mii_reg, sizeof(mii_reg), 624 &mii_val, sizeof(mii_val)); 625 if (!ret) 626 ret = be16_to_cpu(mii_val); 627 628 xgbe_phy_sfp_put_mux(pdata); 629 630 return ret; 631 } 632 633 static int xgbe_phy_mii_read_c22(struct mii_bus *mii, int addr, int reg) 634 { 635 struct xgbe_prv_data *pdata = mii->priv; 636 struct xgbe_phy_data *phy_data = pdata->phy_data; 637 int ret; 638 639 ret = xgbe_phy_get_comm_ownership(pdata); 640 if (ret) 641 return ret; 642 643 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) 644 ret = xgbe_phy_i2c_mii_read(pdata, reg); 645 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) 646 ret = xgbe_phy_mdio_mii_read_c22(pdata, addr, reg); 647 else 648 ret = -EOPNOTSUPP; 649 650 xgbe_phy_put_comm_ownership(pdata); 651 652 return ret; 653 } 654 655 static int xgbe_phy_mii_read_c45(struct mii_bus *mii, int addr, int devad, 656 int reg) 657 { 658 struct xgbe_prv_data *pdata = mii->priv; 659 struct xgbe_phy_data *phy_data = pdata->phy_data; 660 int ret; 661 662 ret = xgbe_phy_get_comm_ownership(pdata); 663 if (ret) 664 return ret; 665 666 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) 667 ret = -EOPNOTSUPP; 668 else if (phy_data->conn_type & XGBE_CONN_TYPE_MDIO) 669 ret = xgbe_phy_mdio_mii_read_c45(pdata, addr, devad, reg); 670 else 671 ret = -EOPNOTSUPP; 672 673 xgbe_phy_put_comm_ownership(pdata); 674 675 return ret; 676 } 677 678 static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata) 679 { 680 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 681 struct xgbe_phy_data *phy_data = pdata->phy_data; 682 683 if (!phy_data->sfp_mod_absent && !phy_data->sfp_changed) 684 return; 685 686 XGBE_ZERO_SUP(lks); 687 688 if (phy_data->sfp_mod_absent) { 689 pdata->phy.speed = SPEED_UNKNOWN; 690 pdata->phy.duplex = DUPLEX_UNKNOWN; 691 pdata->phy.autoneg = AUTONEG_ENABLE; 692 pdata->phy.pause_autoneg = AUTONEG_ENABLE; 693 694 XGBE_SET_SUP(lks, Autoneg); 695 XGBE_SET_SUP(lks, Pause); 696 XGBE_SET_SUP(lks, Asym_Pause); 697 XGBE_SET_SUP(lks, TP); 698 XGBE_SET_SUP(lks, FIBRE); 699 700 XGBE_LM_COPY(lks, advertising, lks, supported); 701 702 return; 703 } 704 705 switch (phy_data->sfp_base) { 706 case XGBE_SFP_BASE_1000_T: 707 case XGBE_SFP_BASE_1000_SX: 708 case XGBE_SFP_BASE_1000_LX: 709 case XGBE_SFP_BASE_1000_CX: 710 pdata->phy.speed = SPEED_UNKNOWN; 711 pdata->phy.duplex = DUPLEX_UNKNOWN; 712 pdata->phy.autoneg = AUTONEG_ENABLE; 713 pdata->phy.pause_autoneg = AUTONEG_ENABLE; 714 XGBE_SET_SUP(lks, Autoneg); 715 XGBE_SET_SUP(lks, Pause); 716 XGBE_SET_SUP(lks, Asym_Pause); 717 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) { 718 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) 719 XGBE_SET_SUP(lks, 10baseT_Full); 720 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) 721 XGBE_SET_SUP(lks, 100baseT_Full); 722 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) 723 XGBE_SET_SUP(lks, 1000baseT_Full); 724 } else { 725 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) 726 XGBE_SET_SUP(lks, 1000baseX_Full); 727 } 728 break; 729 case XGBE_SFP_BASE_10000_SR: 730 case XGBE_SFP_BASE_10000_LR: 731 case XGBE_SFP_BASE_10000_LRM: 732 case XGBE_SFP_BASE_10000_ER: 733 case XGBE_SFP_BASE_10000_CR: 734 pdata->phy.speed = SPEED_10000; 735 pdata->phy.duplex = DUPLEX_FULL; 736 pdata->phy.autoneg = AUTONEG_DISABLE; 737 pdata->phy.pause_autoneg = AUTONEG_DISABLE; 738 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { 739 switch (phy_data->sfp_base) { 740 case XGBE_SFP_BASE_10000_SR: 741 XGBE_SET_SUP(lks, 10000baseSR_Full); 742 break; 743 case XGBE_SFP_BASE_10000_LR: 744 XGBE_SET_SUP(lks, 10000baseLR_Full); 745 break; 746 case XGBE_SFP_BASE_10000_LRM: 747 XGBE_SET_SUP(lks, 10000baseLRM_Full); 748 break; 749 case XGBE_SFP_BASE_10000_ER: 750 XGBE_SET_SUP(lks, 10000baseER_Full); 751 break; 752 case XGBE_SFP_BASE_10000_CR: 753 XGBE_SET_SUP(lks, 10000baseCR_Full); 754 break; 755 default: 756 break; 757 } 758 } 759 break; 760 default: 761 pdata->phy.speed = SPEED_UNKNOWN; 762 pdata->phy.duplex = DUPLEX_UNKNOWN; 763 pdata->phy.autoneg = AUTONEG_DISABLE; 764 pdata->phy.pause_autoneg = AUTONEG_DISABLE; 765 break; 766 } 767 768 switch (phy_data->sfp_base) { 769 case XGBE_SFP_BASE_1000_T: 770 case XGBE_SFP_BASE_1000_CX: 771 case XGBE_SFP_BASE_10000_CR: 772 XGBE_SET_SUP(lks, TP); 773 break; 774 default: 775 XGBE_SET_SUP(lks, FIBRE); 776 break; 777 } 778 779 XGBE_LM_COPY(lks, advertising, lks, supported); 780 } 781 782 static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom, 783 enum xgbe_sfp_speed sfp_speed) 784 { 785 u8 *sfp_base, min; 786 787 sfp_base = sfp_eeprom->base; 788 789 switch (sfp_speed) { 790 case XGBE_SFP_SPEED_1000: 791 min = XGBE_SFP_BASE_BR_1GBE_MIN; 792 break; 793 case XGBE_SFP_SPEED_10000: 794 min = XGBE_SFP_BASE_BR_10GBE_MIN; 795 break; 796 default: 797 return false; 798 } 799 800 return sfp_base[XGBE_SFP_BASE_BR] >= min; 801 } 802 803 static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata) 804 { 805 struct xgbe_phy_data *phy_data = pdata->phy_data; 806 807 if (phy_data->phydev) { 808 phy_detach(phy_data->phydev); 809 phy_device_remove(phy_data->phydev); 810 phy_device_free(phy_data->phydev); 811 phy_data->phydev = NULL; 812 } 813 } 814 815 static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata) 816 { 817 struct xgbe_phy_data *phy_data = pdata->phy_data; 818 unsigned int phy_id = phy_data->phydev->phy_id; 819 820 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) 821 return false; 822 823 if ((phy_id & 0xfffffff0) != 0x01ff0cc0) 824 return false; 825 826 /* Enable Base-T AN */ 827 phy_write(phy_data->phydev, 0x16, 0x0001); 828 phy_write(phy_data->phydev, 0x00, 0x9140); 829 phy_write(phy_data->phydev, 0x16, 0x0000); 830 831 /* Enable SGMII at 100Base-T/1000Base-T Full Duplex */ 832 phy_write(phy_data->phydev, 0x1b, 0x9084); 833 phy_write(phy_data->phydev, 0x09, 0x0e00); 834 phy_write(phy_data->phydev, 0x00, 0x8140); 835 phy_write(phy_data->phydev, 0x04, 0x0d01); 836 phy_write(phy_data->phydev, 0x00, 0x9140); 837 838 linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES); 839 840 phy_support_asym_pause(phy_data->phydev); 841 842 netif_dbg(pdata, drv, pdata->netdev, 843 "Finisar PHY quirk in place\n"); 844 845 return true; 846 } 847 848 static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata) 849 { 850 struct xgbe_phy_data *phy_data = pdata->phy_data; 851 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; 852 unsigned int phy_id = phy_data->phydev->phy_id; 853 int reg; 854 855 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) 856 return false; 857 858 if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME], 859 XGBE_BEL_FUSE_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN)) 860 return false; 861 862 /* For Bel-Fuse, use the extra AN flag */ 863 pdata->an_again = 1; 864 865 if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN], 866 XGBE_BEL_FUSE_PARTNO, XGBE_SFP_BASE_VENDOR_PN_LEN)) 867 return false; 868 869 if ((phy_id & 0xfffffff0) != 0x03625d10) 870 return false; 871 872 /* Reset PHY - wait for self-clearing reset bit to clear */ 873 genphy_soft_reset(phy_data->phydev); 874 875 /* Disable RGMII mode */ 876 phy_write(phy_data->phydev, 0x18, 0x7007); 877 reg = phy_read(phy_data->phydev, 0x18); 878 phy_write(phy_data->phydev, 0x18, reg & ~0x0080); 879 880 /* Enable fiber register bank */ 881 phy_write(phy_data->phydev, 0x1c, 0x7c00); 882 reg = phy_read(phy_data->phydev, 0x1c); 883 reg &= 0x03ff; 884 reg &= ~0x0001; 885 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0001); 886 887 /* Power down SerDes */ 888 reg = phy_read(phy_data->phydev, 0x00); 889 phy_write(phy_data->phydev, 0x00, reg | 0x00800); 890 891 /* Configure SGMII-to-Copper mode */ 892 phy_write(phy_data->phydev, 0x1c, 0x7c00); 893 reg = phy_read(phy_data->phydev, 0x1c); 894 reg &= 0x03ff; 895 reg &= ~0x0006; 896 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg | 0x0004); 897 898 /* Power up SerDes */ 899 reg = phy_read(phy_data->phydev, 0x00); 900 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); 901 902 /* Enable copper register bank */ 903 phy_write(phy_data->phydev, 0x1c, 0x7c00); 904 reg = phy_read(phy_data->phydev, 0x1c); 905 reg &= 0x03ff; 906 reg &= ~0x0001; 907 phy_write(phy_data->phydev, 0x1c, 0x8000 | 0x7c00 | reg); 908 909 /* Power up SerDes */ 910 reg = phy_read(phy_data->phydev, 0x00); 911 phy_write(phy_data->phydev, 0x00, reg & ~0x00800); 912 913 linkmode_copy(phy_data->phydev->supported, PHY_GBIT_FEATURES); 914 phy_support_asym_pause(phy_data->phydev); 915 916 netif_dbg(pdata, drv, pdata->netdev, 917 "BelFuse PHY quirk in place\n"); 918 919 return true; 920 } 921 922 static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data *pdata) 923 { 924 if (xgbe_phy_belfuse_phy_quirks(pdata)) 925 return; 926 927 if (xgbe_phy_finisar_phy_quirks(pdata)) 928 return; 929 } 930 931 static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata) 932 { 933 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 934 struct xgbe_phy_data *phy_data = pdata->phy_data; 935 struct phy_device *phydev; 936 int ret; 937 938 /* If we already have a PHY, just return */ 939 if (phy_data->phydev) 940 return 0; 941 942 /* Clear the extra AN flag */ 943 pdata->an_again = 0; 944 945 /* Check for the use of an external PHY */ 946 if (phy_data->phydev_mode == XGBE_MDIO_MODE_NONE) 947 return 0; 948 949 /* For SFP, only use an external PHY if available */ 950 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && 951 !phy_data->sfp_phy_avail) 952 return 0; 953 954 /* Set the proper MDIO mode for the PHY */ 955 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, 956 phy_data->phydev_mode); 957 if (ret) { 958 netdev_err(pdata->netdev, 959 "mdio port/clause not compatible (%u/%u)\n", 960 phy_data->mdio_addr, phy_data->phydev_mode); 961 return ret; 962 } 963 964 /* Create and connect to the PHY device */ 965 phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr, 966 (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45)); 967 if (IS_ERR(phydev)) { 968 netdev_err(pdata->netdev, "get_phy_device failed\n"); 969 return -ENODEV; 970 } 971 netif_dbg(pdata, drv, pdata->netdev, "external PHY id is %#010x\n", 972 phydev->phy_id); 973 974 /*TODO: If c45, add request_module based on one of the MMD ids? */ 975 976 ret = phy_device_register(phydev); 977 if (ret) { 978 netdev_err(pdata->netdev, "phy_device_register failed\n"); 979 phy_device_free(phydev); 980 return ret; 981 } 982 983 ret = phy_attach_direct(pdata->netdev, phydev, phydev->dev_flags, 984 PHY_INTERFACE_MODE_SGMII); 985 if (ret) { 986 netdev_err(pdata->netdev, "phy_attach_direct failed\n"); 987 phy_device_remove(phydev); 988 phy_device_free(phydev); 989 return ret; 990 } 991 phy_data->phydev = phydev; 992 phy_data->phydev->mac_managed_pm = true; 993 994 xgbe_phy_external_phy_quirks(pdata); 995 996 linkmode_and(phydev->advertising, phydev->advertising, 997 lks->link_modes.advertising); 998 999 phy_start_aneg(phy_data->phydev); 1000 1001 return 0; 1002 } 1003 1004 static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata) 1005 { 1006 struct xgbe_phy_data *phy_data = pdata->phy_data; 1007 int ret; 1008 1009 if (!phy_data->sfp_changed) 1010 return; 1011 1012 phy_data->sfp_phy_avail = 0; 1013 1014 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) 1015 return; 1016 1017 /* Check access to the PHY by reading CTRL1 */ 1018 ret = xgbe_phy_i2c_mii_read(pdata, MII_BMCR); 1019 if (ret < 0) 1020 return; 1021 1022 /* Successfully accessed the PHY */ 1023 phy_data->sfp_phy_avail = 1; 1024 } 1025 1026 static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data) 1027 { 1028 u8 *sfp_extd = phy_data->sfp_eeprom.extd; 1029 1030 if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_RX_LOS)) 1031 return false; 1032 1033 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_RX_LOS) 1034 return false; 1035 1036 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_rx_los)) 1037 return true; 1038 1039 return false; 1040 } 1041 1042 static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data) 1043 { 1044 u8 *sfp_extd = phy_data->sfp_eeprom.extd; 1045 1046 if (!(sfp_extd[XGBE_SFP_EXTD_OPT1] & XGBE_SFP_EXTD_OPT1_TX_FAULT)) 1047 return false; 1048 1049 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_TX_FAULT) 1050 return false; 1051 1052 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_tx_fault)) 1053 return true; 1054 1055 return false; 1056 } 1057 1058 static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data) 1059 { 1060 if (phy_data->sfp_gpio_mask & XGBE_GPIO_NO_MOD_ABSENT) 1061 return false; 1062 1063 if (phy_data->sfp_gpio_inputs & (1 << phy_data->sfp_gpio_mod_absent)) 1064 return true; 1065 1066 return false; 1067 } 1068 1069 static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) 1070 { 1071 struct xgbe_phy_data *phy_data = pdata->phy_data; 1072 struct xgbe_sfp_eeprom *sfp_eeprom = &phy_data->sfp_eeprom; 1073 u8 *sfp_base; 1074 1075 sfp_base = sfp_eeprom->base; 1076 1077 if (sfp_base[XGBE_SFP_BASE_ID] != XGBE_SFP_ID_SFP) 1078 return; 1079 1080 if (sfp_base[XGBE_SFP_BASE_EXT_ID] != XGBE_SFP_EXT_ID_SFP) 1081 return; 1082 1083 /* Update transceiver signals (eeprom extd/options) */ 1084 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); 1085 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); 1086 1087 /* Assume FIBER cable unless told otherwise */ 1088 if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_PASSIVE) { 1089 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; 1090 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN]; 1091 } else if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_ACTIVE) { 1092 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; 1093 } else { 1094 phy_data->sfp_cable = XGBE_SFP_CABLE_FIBER; 1095 } 1096 1097 /* Determine the type of SFP */ 1098 if (phy_data->sfp_cable != XGBE_SFP_CABLE_FIBER && 1099 xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000)) 1100 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; 1101 else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR) 1102 phy_data->sfp_base = XGBE_SFP_BASE_10000_SR; 1103 else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LR) 1104 phy_data->sfp_base = XGBE_SFP_BASE_10000_LR; 1105 else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LRM) 1106 phy_data->sfp_base = XGBE_SFP_BASE_10000_LRM; 1107 else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_ER) 1108 phy_data->sfp_base = XGBE_SFP_BASE_10000_ER; 1109 else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_SX) 1110 phy_data->sfp_base = XGBE_SFP_BASE_1000_SX; 1111 else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_LX) 1112 phy_data->sfp_base = XGBE_SFP_BASE_1000_LX; 1113 else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_CX) 1114 phy_data->sfp_base = XGBE_SFP_BASE_1000_CX; 1115 else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T) 1116 phy_data->sfp_base = XGBE_SFP_BASE_1000_T; 1117 1118 switch (phy_data->sfp_base) { 1119 case XGBE_SFP_BASE_1000_T: 1120 phy_data->sfp_speed = XGBE_SFP_SPEED_100_1000; 1121 break; 1122 case XGBE_SFP_BASE_1000_SX: 1123 case XGBE_SFP_BASE_1000_LX: 1124 case XGBE_SFP_BASE_1000_CX: 1125 phy_data->sfp_speed = XGBE_SFP_SPEED_1000; 1126 break; 1127 case XGBE_SFP_BASE_10000_SR: 1128 case XGBE_SFP_BASE_10000_LR: 1129 case XGBE_SFP_BASE_10000_LRM: 1130 case XGBE_SFP_BASE_10000_ER: 1131 case XGBE_SFP_BASE_10000_CR: 1132 phy_data->sfp_speed = XGBE_SFP_SPEED_10000; 1133 break; 1134 default: 1135 break; 1136 } 1137 } 1138 1139 static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data *pdata, 1140 struct xgbe_sfp_eeprom *sfp_eeprom) 1141 { 1142 struct xgbe_sfp_ascii sfp_ascii; 1143 char *sfp_data = (char *)&sfp_ascii; 1144 1145 netif_dbg(pdata, drv, pdata->netdev, "SFP detected:\n"); 1146 memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME], 1147 XGBE_SFP_BASE_VENDOR_NAME_LEN); 1148 sfp_data[XGBE_SFP_BASE_VENDOR_NAME_LEN] = '\0'; 1149 netif_dbg(pdata, drv, pdata->netdev, " vendor: %s\n", 1150 sfp_data); 1151 1152 memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_PN], 1153 XGBE_SFP_BASE_VENDOR_PN_LEN); 1154 sfp_data[XGBE_SFP_BASE_VENDOR_PN_LEN] = '\0'; 1155 netif_dbg(pdata, drv, pdata->netdev, " part number: %s\n", 1156 sfp_data); 1157 1158 memcpy(sfp_data, &sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_REV], 1159 XGBE_SFP_BASE_VENDOR_REV_LEN); 1160 sfp_data[XGBE_SFP_BASE_VENDOR_REV_LEN] = '\0'; 1161 netif_dbg(pdata, drv, pdata->netdev, " revision level: %s\n", 1162 sfp_data); 1163 1164 memcpy(sfp_data, &sfp_eeprom->extd[XGBE_SFP_BASE_VENDOR_SN], 1165 XGBE_SFP_BASE_VENDOR_SN_LEN); 1166 sfp_data[XGBE_SFP_BASE_VENDOR_SN_LEN] = '\0'; 1167 netif_dbg(pdata, drv, pdata->netdev, " serial number: %s\n", 1168 sfp_data); 1169 } 1170 1171 static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in, u8 *buf, unsigned int len) 1172 { 1173 u8 cc; 1174 1175 for (cc = 0; len; buf++, len--) 1176 cc += *buf; 1177 1178 return cc == cc_in; 1179 } 1180 1181 static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata) 1182 { 1183 struct xgbe_phy_data *phy_data = pdata->phy_data; 1184 struct xgbe_sfp_eeprom sfp_eeprom; 1185 u8 eeprom_addr; 1186 int ret; 1187 1188 ret = xgbe_phy_sfp_get_mux(pdata); 1189 if (ret) { 1190 dev_err_once(pdata->dev, "%s: I2C error setting SFP MUX\n", 1191 netdev_name(pdata->netdev)); 1192 return ret; 1193 } 1194 1195 /* Read the SFP serial ID eeprom */ 1196 eeprom_addr = 0; 1197 ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_SERIAL_ID_ADDRESS, 1198 &eeprom_addr, sizeof(eeprom_addr), 1199 &sfp_eeprom, sizeof(sfp_eeprom)); 1200 if (ret) { 1201 dev_err_once(pdata->dev, "%s: I2C error reading SFP EEPROM\n", 1202 netdev_name(pdata->netdev)); 1203 goto put; 1204 } 1205 1206 /* Validate the contents read */ 1207 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.base[XGBE_SFP_BASE_CC], 1208 sfp_eeprom.base, 1209 sizeof(sfp_eeprom.base) - 1)) { 1210 ret = -EINVAL; 1211 goto put; 1212 } 1213 1214 if (!xgbe_phy_sfp_verify_eeprom(sfp_eeprom.extd[XGBE_SFP_EXTD_CC], 1215 sfp_eeprom.extd, 1216 sizeof(sfp_eeprom.extd) - 1)) { 1217 ret = -EINVAL; 1218 goto put; 1219 } 1220 1221 /* Check for an added or changed SFP */ 1222 if (memcmp(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom))) { 1223 phy_data->sfp_changed = 1; 1224 1225 if (netif_msg_drv(pdata)) 1226 xgbe_phy_sfp_eeprom_info(pdata, &sfp_eeprom); 1227 1228 memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); 1229 1230 xgbe_phy_free_phy_device(pdata); 1231 } else { 1232 phy_data->sfp_changed = 0; 1233 } 1234 1235 put: 1236 xgbe_phy_sfp_put_mux(pdata); 1237 1238 return ret; 1239 } 1240 1241 static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata) 1242 { 1243 struct xgbe_phy_data *phy_data = pdata->phy_data; 1244 u8 gpio_reg, gpio_ports[2]; 1245 int ret; 1246 1247 /* Read the input port registers */ 1248 gpio_reg = 0; 1249 ret = xgbe_phy_i2c_read(pdata, phy_data->sfp_gpio_address, 1250 &gpio_reg, sizeof(gpio_reg), 1251 gpio_ports, sizeof(gpio_ports)); 1252 if (ret) { 1253 dev_err_once(pdata->dev, "%s: I2C error reading SFP GPIOs\n", 1254 netdev_name(pdata->netdev)); 1255 return; 1256 } 1257 1258 phy_data->sfp_gpio_inputs = (gpio_ports[1] << 8) | gpio_ports[0]; 1259 1260 phy_data->sfp_mod_absent = xgbe_phy_check_sfp_mod_absent(phy_data); 1261 } 1262 1263 static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata) 1264 { 1265 struct xgbe_phy_data *phy_data = pdata->phy_data; 1266 1267 xgbe_phy_free_phy_device(pdata); 1268 1269 phy_data->sfp_mod_absent = 1; 1270 phy_data->sfp_phy_avail = 0; 1271 memset(&phy_data->sfp_eeprom, 0, sizeof(phy_data->sfp_eeprom)); 1272 } 1273 1274 static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data) 1275 { 1276 phy_data->sfp_rx_los = 0; 1277 phy_data->sfp_tx_fault = 0; 1278 phy_data->sfp_mod_absent = 1; 1279 phy_data->sfp_base = XGBE_SFP_BASE_UNKNOWN; 1280 phy_data->sfp_cable = XGBE_SFP_CABLE_UNKNOWN; 1281 phy_data->sfp_speed = XGBE_SFP_SPEED_UNKNOWN; 1282 } 1283 1284 static void xgbe_phy_sfp_detect(struct xgbe_prv_data *pdata) 1285 { 1286 struct xgbe_phy_data *phy_data = pdata->phy_data; 1287 int ret; 1288 1289 /* Reset the SFP signals and info */ 1290 xgbe_phy_sfp_reset(phy_data); 1291 1292 ret = xgbe_phy_get_comm_ownership(pdata); 1293 if (ret) 1294 return; 1295 1296 /* Read the SFP signals and check for module presence */ 1297 xgbe_phy_sfp_signals(pdata); 1298 if (phy_data->sfp_mod_absent) { 1299 xgbe_phy_sfp_mod_absent(pdata); 1300 goto put; 1301 } 1302 1303 ret = xgbe_phy_sfp_read_eeprom(pdata); 1304 if (ret) { 1305 /* Treat any error as if there isn't an SFP plugged in */ 1306 xgbe_phy_sfp_reset(phy_data); 1307 xgbe_phy_sfp_mod_absent(pdata); 1308 goto put; 1309 } 1310 1311 xgbe_phy_sfp_parse_eeprom(pdata); 1312 1313 xgbe_phy_sfp_external_phy(pdata); 1314 1315 put: 1316 xgbe_phy_sfp_phy_settings(pdata); 1317 1318 xgbe_phy_put_comm_ownership(pdata); 1319 } 1320 1321 static int xgbe_phy_module_eeprom(struct xgbe_prv_data *pdata, 1322 struct ethtool_eeprom *eeprom, u8 *data) 1323 { 1324 struct xgbe_phy_data *phy_data = pdata->phy_data; 1325 u8 eeprom_addr, eeprom_data[XGBE_SFP_EEPROM_MAX]; 1326 struct xgbe_sfp_eeprom *sfp_eeprom; 1327 unsigned int i, j, rem; 1328 int ret; 1329 1330 rem = eeprom->len; 1331 1332 if (!eeprom->len) { 1333 ret = -EINVAL; 1334 goto done; 1335 } 1336 1337 if ((eeprom->offset + eeprom->len) > XGBE_SFP_EEPROM_MAX) { 1338 ret = -EINVAL; 1339 goto done; 1340 } 1341 1342 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) { 1343 ret = -ENXIO; 1344 goto done; 1345 } 1346 1347 if (!netif_running(pdata->netdev)) { 1348 ret = -EIO; 1349 goto done; 1350 } 1351 1352 if (phy_data->sfp_mod_absent) { 1353 ret = -EIO; 1354 goto done; 1355 } 1356 1357 ret = xgbe_phy_get_comm_ownership(pdata); 1358 if (ret) { 1359 ret = -EIO; 1360 goto done; 1361 } 1362 1363 ret = xgbe_phy_sfp_get_mux(pdata); 1364 if (ret) { 1365 netdev_err(pdata->netdev, "I2C error setting SFP MUX\n"); 1366 ret = -EIO; 1367 goto put_own; 1368 } 1369 1370 /* Read the SFP serial ID eeprom */ 1371 eeprom_addr = 0; 1372 ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_SERIAL_ID_ADDRESS, 1373 &eeprom_addr, sizeof(eeprom_addr), 1374 eeprom_data, XGBE_SFP_EEPROM_BASE_LEN); 1375 if (ret) { 1376 netdev_err(pdata->netdev, 1377 "I2C error reading SFP EEPROM\n"); 1378 ret = -EIO; 1379 goto put_mux; 1380 } 1381 1382 sfp_eeprom = (struct xgbe_sfp_eeprom *)eeprom_data; 1383 1384 if (XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom)) { 1385 /* Read the SFP diagnostic eeprom */ 1386 eeprom_addr = 0; 1387 ret = xgbe_phy_i2c_read(pdata, XGBE_SFP_DIAG_INFO_ADDRESS, 1388 &eeprom_addr, sizeof(eeprom_addr), 1389 eeprom_data + XGBE_SFP_EEPROM_BASE_LEN, 1390 XGBE_SFP_EEPROM_DIAG_LEN); 1391 if (ret) { 1392 netdev_err(pdata->netdev, 1393 "I2C error reading SFP DIAGS\n"); 1394 ret = -EIO; 1395 goto put_mux; 1396 } 1397 } 1398 1399 for (i = 0, j = eeprom->offset; i < eeprom->len; i++, j++) { 1400 if ((j >= XGBE_SFP_EEPROM_BASE_LEN) && 1401 !XGBE_SFP_DIAGS_SUPPORTED(sfp_eeprom)) 1402 break; 1403 1404 data[i] = eeprom_data[j]; 1405 rem--; 1406 } 1407 1408 put_mux: 1409 xgbe_phy_sfp_put_mux(pdata); 1410 1411 put_own: 1412 xgbe_phy_put_comm_ownership(pdata); 1413 1414 done: 1415 eeprom->len -= rem; 1416 1417 return ret; 1418 } 1419 1420 static int xgbe_phy_module_info(struct xgbe_prv_data *pdata, 1421 struct ethtool_modinfo *modinfo) 1422 { 1423 struct xgbe_phy_data *phy_data = pdata->phy_data; 1424 1425 if (phy_data->port_mode != XGBE_PORT_MODE_SFP) 1426 return -ENXIO; 1427 1428 if (!netif_running(pdata->netdev)) 1429 return -EIO; 1430 1431 if (phy_data->sfp_mod_absent) 1432 return -EIO; 1433 1434 if (XGBE_SFP_DIAGS_SUPPORTED(&phy_data->sfp_eeprom)) { 1435 modinfo->type = ETH_MODULE_SFF_8472; 1436 modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; 1437 } else { 1438 modinfo->type = ETH_MODULE_SFF_8079; 1439 modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN; 1440 } 1441 1442 return 0; 1443 } 1444 1445 static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data *pdata) 1446 { 1447 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1448 struct xgbe_phy_data *phy_data = pdata->phy_data; 1449 u16 lcl_adv = 0, rmt_adv = 0; 1450 u8 fc; 1451 1452 pdata->phy.tx_pause = 0; 1453 pdata->phy.rx_pause = 0; 1454 1455 if (!phy_data->phydev) 1456 return; 1457 1458 lcl_adv = linkmode_adv_to_lcl_adv_t(phy_data->phydev->advertising); 1459 1460 if (phy_data->phydev->pause) { 1461 XGBE_SET_LP_ADV(lks, Pause); 1462 rmt_adv |= LPA_PAUSE_CAP; 1463 } 1464 if (phy_data->phydev->asym_pause) { 1465 XGBE_SET_LP_ADV(lks, Asym_Pause); 1466 rmt_adv |= LPA_PAUSE_ASYM; 1467 } 1468 1469 fc = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv); 1470 if (fc & FLOW_CTRL_TX) 1471 pdata->phy.tx_pause = 1; 1472 if (fc & FLOW_CTRL_RX) 1473 pdata->phy.rx_pause = 1; 1474 } 1475 1476 static enum xgbe_mode xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data *pdata) 1477 { 1478 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1479 enum xgbe_mode mode; 1480 1481 XGBE_SET_LP_ADV(lks, Autoneg); 1482 XGBE_SET_LP_ADV(lks, TP); 1483 1484 /* Use external PHY to determine flow control */ 1485 if (pdata->phy.pause_autoneg) 1486 xgbe_phy_phydev_flowctrl(pdata); 1487 1488 switch (pdata->an_status & XGBE_SGMII_AN_LINK_SPEED) { 1489 case XGBE_SGMII_AN_LINK_SPEED_10: 1490 if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) { 1491 XGBE_SET_LP_ADV(lks, 10baseT_Full); 1492 mode = XGBE_MODE_SGMII_10; 1493 } else { 1494 /* Half-duplex not supported */ 1495 XGBE_SET_LP_ADV(lks, 10baseT_Half); 1496 mode = XGBE_MODE_UNKNOWN; 1497 } 1498 break; 1499 case XGBE_SGMII_AN_LINK_SPEED_100: 1500 if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) { 1501 XGBE_SET_LP_ADV(lks, 100baseT_Full); 1502 mode = XGBE_MODE_SGMII_100; 1503 } else { 1504 /* Half-duplex not supported */ 1505 XGBE_SET_LP_ADV(lks, 100baseT_Half); 1506 mode = XGBE_MODE_UNKNOWN; 1507 } 1508 break; 1509 case XGBE_SGMII_AN_LINK_SPEED_1000: 1510 if (pdata->an_status & XGBE_SGMII_AN_LINK_DUPLEX) { 1511 XGBE_SET_LP_ADV(lks, 1000baseT_Full); 1512 mode = XGBE_MODE_SGMII_1000; 1513 } else { 1514 /* Half-duplex not supported */ 1515 XGBE_SET_LP_ADV(lks, 1000baseT_Half); 1516 mode = XGBE_MODE_UNKNOWN; 1517 } 1518 break; 1519 default: 1520 mode = XGBE_MODE_UNKNOWN; 1521 } 1522 1523 return mode; 1524 } 1525 1526 static enum xgbe_mode xgbe_phy_an37_outcome(struct xgbe_prv_data *pdata) 1527 { 1528 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1529 enum xgbe_mode mode; 1530 unsigned int ad_reg, lp_reg; 1531 1532 XGBE_SET_LP_ADV(lks, Autoneg); 1533 XGBE_SET_LP_ADV(lks, FIBRE); 1534 1535 /* Compare Advertisement and Link Partner register */ 1536 ad_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_ADVERTISE); 1537 lp_reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_LP_ABILITY); 1538 if (lp_reg & 0x100) 1539 XGBE_SET_LP_ADV(lks, Pause); 1540 if (lp_reg & 0x80) 1541 XGBE_SET_LP_ADV(lks, Asym_Pause); 1542 1543 if (pdata->phy.pause_autoneg) { 1544 /* Set flow control based on auto-negotiation result */ 1545 pdata->phy.tx_pause = 0; 1546 pdata->phy.rx_pause = 0; 1547 1548 if (ad_reg & lp_reg & 0x100) { 1549 pdata->phy.tx_pause = 1; 1550 pdata->phy.rx_pause = 1; 1551 } else if (ad_reg & lp_reg & 0x80) { 1552 if (ad_reg & 0x100) 1553 pdata->phy.rx_pause = 1; 1554 else if (lp_reg & 0x100) 1555 pdata->phy.tx_pause = 1; 1556 } 1557 } 1558 1559 if (lp_reg & 0x20) 1560 XGBE_SET_LP_ADV(lks, 1000baseX_Full); 1561 1562 /* Half duplex is not supported */ 1563 ad_reg &= lp_reg; 1564 mode = (ad_reg & 0x20) ? XGBE_MODE_X : XGBE_MODE_UNKNOWN; 1565 1566 return mode; 1567 } 1568 1569 static enum xgbe_mode xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data *pdata) 1570 { 1571 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1572 struct xgbe_phy_data *phy_data = pdata->phy_data; 1573 enum xgbe_mode mode; 1574 unsigned int ad_reg, lp_reg; 1575 1576 XGBE_SET_LP_ADV(lks, Autoneg); 1577 XGBE_SET_LP_ADV(lks, Backplane); 1578 1579 /* Use external PHY to determine flow control */ 1580 if (pdata->phy.pause_autoneg) 1581 xgbe_phy_phydev_flowctrl(pdata); 1582 1583 /* Compare Advertisement and Link Partner register 2 */ 1584 ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1); 1585 lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1); 1586 if (lp_reg & 0x80) 1587 XGBE_SET_LP_ADV(lks, 10000baseKR_Full); 1588 if (lp_reg & 0x20) 1589 XGBE_SET_LP_ADV(lks, 1000baseKX_Full); 1590 1591 ad_reg &= lp_reg; 1592 if (ad_reg & 0x80) { 1593 switch (phy_data->port_mode) { 1594 case XGBE_PORT_MODE_BACKPLANE: 1595 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 1596 mode = XGBE_MODE_KR; 1597 break; 1598 default: 1599 mode = XGBE_MODE_SFI; 1600 break; 1601 } 1602 } else if (ad_reg & 0x20) { 1603 switch (phy_data->port_mode) { 1604 case XGBE_PORT_MODE_BACKPLANE: 1605 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 1606 mode = XGBE_MODE_KX_1000; 1607 break; 1608 case XGBE_PORT_MODE_1000BASE_X: 1609 mode = XGBE_MODE_X; 1610 break; 1611 case XGBE_PORT_MODE_SFP: 1612 switch (phy_data->sfp_base) { 1613 case XGBE_SFP_BASE_1000_T: 1614 if (phy_data->phydev && 1615 (phy_data->phydev->speed == SPEED_10)) 1616 mode = XGBE_MODE_SGMII_10; 1617 else if (phy_data->phydev && 1618 (phy_data->phydev->speed == SPEED_100)) 1619 mode = XGBE_MODE_SGMII_100; 1620 else 1621 mode = XGBE_MODE_SGMII_1000; 1622 break; 1623 case XGBE_SFP_BASE_1000_SX: 1624 case XGBE_SFP_BASE_1000_LX: 1625 case XGBE_SFP_BASE_1000_CX: 1626 default: 1627 mode = XGBE_MODE_X; 1628 break; 1629 } 1630 break; 1631 default: 1632 if (phy_data->phydev && 1633 (phy_data->phydev->speed == SPEED_10)) 1634 mode = XGBE_MODE_SGMII_10; 1635 else if (phy_data->phydev && 1636 (phy_data->phydev->speed == SPEED_100)) 1637 mode = XGBE_MODE_SGMII_100; 1638 else 1639 mode = XGBE_MODE_SGMII_1000; 1640 break; 1641 } 1642 } else { 1643 mode = XGBE_MODE_UNKNOWN; 1644 } 1645 1646 /* Compare Advertisement and Link Partner register 3 */ 1647 ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2); 1648 lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2); 1649 if (lp_reg & 0xc000) 1650 XGBE_SET_LP_ADV(lks, 10000baseR_FEC); 1651 1652 return mode; 1653 } 1654 1655 static enum xgbe_mode xgbe_phy_an73_outcome(struct xgbe_prv_data *pdata) 1656 { 1657 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1658 enum xgbe_mode mode; 1659 unsigned int ad_reg, lp_reg; 1660 1661 XGBE_SET_LP_ADV(lks, Autoneg); 1662 XGBE_SET_LP_ADV(lks, Backplane); 1663 1664 /* Compare Advertisement and Link Partner register 1 */ 1665 ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE); 1666 lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA); 1667 if (lp_reg & 0x400) 1668 XGBE_SET_LP_ADV(lks, Pause); 1669 if (lp_reg & 0x800) 1670 XGBE_SET_LP_ADV(lks, Asym_Pause); 1671 1672 if (pdata->phy.pause_autoneg) { 1673 /* Set flow control based on auto-negotiation result */ 1674 pdata->phy.tx_pause = 0; 1675 pdata->phy.rx_pause = 0; 1676 1677 if (ad_reg & lp_reg & 0x400) { 1678 pdata->phy.tx_pause = 1; 1679 pdata->phy.rx_pause = 1; 1680 } else if (ad_reg & lp_reg & 0x800) { 1681 if (ad_reg & 0x400) 1682 pdata->phy.rx_pause = 1; 1683 else if (lp_reg & 0x400) 1684 pdata->phy.tx_pause = 1; 1685 } 1686 } 1687 1688 /* Compare Advertisement and Link Partner register 2 */ 1689 ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1); 1690 lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 1); 1691 if (lp_reg & 0x80) 1692 XGBE_SET_LP_ADV(lks, 10000baseKR_Full); 1693 if (lp_reg & 0x20) 1694 XGBE_SET_LP_ADV(lks, 1000baseKX_Full); 1695 1696 ad_reg &= lp_reg; 1697 if (ad_reg & 0x80) 1698 mode = XGBE_MODE_KR; 1699 else if (ad_reg & 0x20) 1700 mode = XGBE_MODE_KX_1000; 1701 else 1702 mode = XGBE_MODE_UNKNOWN; 1703 1704 /* Compare Advertisement and Link Partner register 3 */ 1705 ad_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2); 1706 lp_reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_LPA + 2); 1707 if (lp_reg & 0xc000) 1708 XGBE_SET_LP_ADV(lks, 10000baseR_FEC); 1709 1710 return mode; 1711 } 1712 1713 static enum xgbe_mode xgbe_phy_an_outcome(struct xgbe_prv_data *pdata) 1714 { 1715 switch (pdata->an_mode) { 1716 case XGBE_AN_MODE_CL73: 1717 return xgbe_phy_an73_outcome(pdata); 1718 case XGBE_AN_MODE_CL73_REDRV: 1719 return xgbe_phy_an73_redrv_outcome(pdata); 1720 case XGBE_AN_MODE_CL37: 1721 return xgbe_phy_an37_outcome(pdata); 1722 case XGBE_AN_MODE_CL37_SGMII: 1723 return xgbe_phy_an37_sgmii_outcome(pdata); 1724 default: 1725 return XGBE_MODE_UNKNOWN; 1726 } 1727 } 1728 1729 static void xgbe_phy_an_advertising(struct xgbe_prv_data *pdata, 1730 struct ethtool_link_ksettings *dlks) 1731 { 1732 struct ethtool_link_ksettings *slks = &pdata->phy.lks; 1733 struct xgbe_phy_data *phy_data = pdata->phy_data; 1734 1735 XGBE_LM_COPY(dlks, advertising, slks, advertising); 1736 1737 /* Without a re-driver, just return current advertising */ 1738 if (!phy_data->redrv) 1739 return; 1740 1741 /* With the KR re-driver we need to advertise a single speed */ 1742 XGBE_CLR_ADV(dlks, 1000baseKX_Full); 1743 XGBE_CLR_ADV(dlks, 10000baseKR_Full); 1744 1745 /* Advertise FEC support is present */ 1746 if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE) 1747 XGBE_SET_ADV(dlks, 10000baseR_FEC); 1748 1749 switch (phy_data->port_mode) { 1750 case XGBE_PORT_MODE_BACKPLANE: 1751 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 1752 XGBE_SET_ADV(dlks, 10000baseKR_Full); 1753 break; 1754 case XGBE_PORT_MODE_BACKPLANE_2500: 1755 XGBE_SET_ADV(dlks, 1000baseKX_Full); 1756 break; 1757 case XGBE_PORT_MODE_1000BASE_T: 1758 case XGBE_PORT_MODE_1000BASE_X: 1759 case XGBE_PORT_MODE_NBASE_T: 1760 XGBE_SET_ADV(dlks, 1000baseKX_Full); 1761 break; 1762 case XGBE_PORT_MODE_10GBASE_T: 1763 if (phy_data->phydev && 1764 (phy_data->phydev->speed == SPEED_10000)) 1765 XGBE_SET_ADV(dlks, 10000baseKR_Full); 1766 else if (phy_data->phydev && 1767 (phy_data->phydev->speed == SPEED_2500)) 1768 XGBE_SET_ADV(dlks, 2500baseX_Full); 1769 else 1770 XGBE_SET_ADV(dlks, 1000baseKX_Full); 1771 break; 1772 case XGBE_PORT_MODE_10GBASE_R: 1773 XGBE_SET_ADV(dlks, 10000baseKR_Full); 1774 break; 1775 case XGBE_PORT_MODE_SFP: 1776 switch (phy_data->sfp_base) { 1777 case XGBE_SFP_BASE_1000_T: 1778 case XGBE_SFP_BASE_1000_SX: 1779 case XGBE_SFP_BASE_1000_LX: 1780 case XGBE_SFP_BASE_1000_CX: 1781 XGBE_SET_ADV(dlks, 1000baseKX_Full); 1782 break; 1783 default: 1784 XGBE_SET_ADV(dlks, 10000baseKR_Full); 1785 break; 1786 } 1787 break; 1788 default: 1789 XGBE_SET_ADV(dlks, 10000baseKR_Full); 1790 break; 1791 } 1792 } 1793 1794 static int xgbe_phy_an_config(struct xgbe_prv_data *pdata) 1795 { 1796 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 1797 struct xgbe_phy_data *phy_data = pdata->phy_data; 1798 int ret; 1799 1800 ret = xgbe_phy_find_phy_device(pdata); 1801 if (ret) 1802 return ret; 1803 1804 if (!phy_data->phydev) 1805 return 0; 1806 1807 phy_data->phydev->autoneg = pdata->phy.autoneg; 1808 linkmode_and(phy_data->phydev->advertising, 1809 phy_data->phydev->supported, 1810 lks->link_modes.advertising); 1811 1812 if (pdata->phy.autoneg != AUTONEG_ENABLE) { 1813 phy_data->phydev->speed = pdata->phy.speed; 1814 phy_data->phydev->duplex = pdata->phy.duplex; 1815 } 1816 1817 ret = phy_start_aneg(phy_data->phydev); 1818 1819 return ret; 1820 } 1821 1822 static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data) 1823 { 1824 switch (phy_data->sfp_base) { 1825 case XGBE_SFP_BASE_1000_T: 1826 return XGBE_AN_MODE_CL37_SGMII; 1827 case XGBE_SFP_BASE_1000_SX: 1828 case XGBE_SFP_BASE_1000_LX: 1829 case XGBE_SFP_BASE_1000_CX: 1830 return XGBE_AN_MODE_CL37; 1831 default: 1832 return XGBE_AN_MODE_NONE; 1833 } 1834 } 1835 1836 static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata) 1837 { 1838 struct xgbe_phy_data *phy_data = pdata->phy_data; 1839 1840 /* A KR re-driver will always require CL73 AN */ 1841 if (phy_data->redrv) 1842 return XGBE_AN_MODE_CL73_REDRV; 1843 1844 switch (phy_data->port_mode) { 1845 case XGBE_PORT_MODE_BACKPLANE: 1846 return XGBE_AN_MODE_CL73; 1847 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 1848 case XGBE_PORT_MODE_BACKPLANE_2500: 1849 return XGBE_AN_MODE_NONE; 1850 case XGBE_PORT_MODE_1000BASE_T: 1851 return XGBE_AN_MODE_CL37_SGMII; 1852 case XGBE_PORT_MODE_1000BASE_X: 1853 return XGBE_AN_MODE_CL37; 1854 case XGBE_PORT_MODE_NBASE_T: 1855 return XGBE_AN_MODE_CL37_SGMII; 1856 case XGBE_PORT_MODE_10GBASE_T: 1857 return XGBE_AN_MODE_CL73; 1858 case XGBE_PORT_MODE_10GBASE_R: 1859 return XGBE_AN_MODE_NONE; 1860 case XGBE_PORT_MODE_SFP: 1861 return xgbe_phy_an_sfp_mode(phy_data); 1862 default: 1863 return XGBE_AN_MODE_NONE; 1864 } 1865 } 1866 1867 static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data *pdata, 1868 enum xgbe_phy_redrv_mode mode) 1869 { 1870 struct xgbe_phy_data *phy_data = pdata->phy_data; 1871 u16 redrv_reg, redrv_val; 1872 1873 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); 1874 redrv_val = (u16)mode; 1875 1876 return pdata->hw_if.write_ext_mii_regs_c22(pdata, phy_data->redrv_addr, 1877 redrv_reg, redrv_val); 1878 } 1879 1880 static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data *pdata, 1881 enum xgbe_phy_redrv_mode mode) 1882 { 1883 struct xgbe_phy_data *phy_data = pdata->phy_data; 1884 unsigned int redrv_reg; 1885 int ret; 1886 1887 /* Calculate the register to write */ 1888 redrv_reg = XGBE_PHY_REDRV_MODE_REG + (phy_data->redrv_lane * 0x1000); 1889 1890 ret = xgbe_phy_redrv_write(pdata, redrv_reg, mode); 1891 1892 return ret; 1893 } 1894 1895 static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata) 1896 { 1897 struct xgbe_phy_data *phy_data = pdata->phy_data; 1898 enum xgbe_phy_redrv_mode mode; 1899 int ret; 1900 1901 if (!phy_data->redrv) 1902 return; 1903 1904 mode = XGBE_PHY_REDRV_MODE_CX; 1905 if ((phy_data->port_mode == XGBE_PORT_MODE_SFP) && 1906 (phy_data->sfp_base != XGBE_SFP_BASE_1000_CX) && 1907 (phy_data->sfp_base != XGBE_SFP_BASE_10000_CR)) 1908 mode = XGBE_PHY_REDRV_MODE_SR; 1909 1910 ret = xgbe_phy_get_comm_ownership(pdata); 1911 if (ret) 1912 return; 1913 1914 if (phy_data->redrv_if) 1915 xgbe_phy_set_redrv_mode_i2c(pdata, mode); 1916 else 1917 xgbe_phy_set_redrv_mode_mdio(pdata, mode); 1918 1919 xgbe_phy_put_comm_ownership(pdata); 1920 } 1921 1922 #define MAX_RX_ADAPT_RETRIES 1 1923 #define XGBE_PMA_RX_VAL_SIG_MASK (XGBE_PMA_RX_SIG_DET_0_MASK | \ 1924 XGBE_PMA_RX_VALID_0_MASK) 1925 1926 static void xgbe_set_rx_adap_mode(struct xgbe_prv_data *pdata, 1927 enum xgbe_mode mode) 1928 { 1929 if (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) { 1930 pdata->rx_adapt_retries = 0; 1931 pdata->mode_set = false; 1932 return; 1933 } 1934 1935 xgbe_phy_perform_ratechange(pdata, 1936 mode == XGBE_MODE_KR ? 1937 XGBE_MB_CMD_SET_10G_KR : 1938 XGBE_MB_CMD_SET_10G_SFI, 1939 XGBE_MB_SUBCMD_RX_ADAP); 1940 } 1941 1942 static void xgbe_rx_adaptation(struct xgbe_prv_data *pdata) 1943 { 1944 struct xgbe_phy_data *phy_data = pdata->phy_data; 1945 int reg; 1946 1947 /* step 2: force PCS to send RX_ADAPT Req to PHY */ 1948 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4, 1949 XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_ENABLE); 1950 1951 /* Step 3: Wait for RX_ADAPT ACK from the PHY */ 1952 msleep(200); 1953 1954 /* Software polls for coefficient update command (given by local PHY) */ 1955 reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_PHY_RX_EQ_CEU); 1956 1957 /* Clear the RX_AD_REQ bit */ 1958 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4, 1959 XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_DISABLE); 1960 1961 /* Check if coefficient update command is set */ 1962 if ((reg & XGBE_PMA_CFF_UPDT_MASK) != XGBE_PMA_CFF_UPDT_MASK) 1963 goto set_mode; 1964 1965 /* Step 4: Check for Block lock */ 1966 1967 reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1); 1968 if (reg < 0) 1969 goto set_mode; 1970 1971 /* Link status is latched low so that momentary link drops 1972 * can be detected. If link was already down read again 1973 * to get the latest state. 1974 */ 1975 if (!pdata->phy.link && !(reg & MDIO_STAT1_LSTATUS)) { 1976 reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1); 1977 if (reg < 0) 1978 goto set_mode; 1979 } 1980 1981 if (reg & MDIO_STAT1_LSTATUS) { 1982 /* If the block lock is found, update the helpers 1983 * and declare the link up 1984 */ 1985 netif_dbg(pdata, link, pdata->netdev, "Block_lock done"); 1986 pdata->rx_adapt_done = true; 1987 pdata->rx_adapt_retries = 0; 1988 pdata->mode_set = false; 1989 return; 1990 } 1991 1992 set_mode: 1993 xgbe_set_rx_adap_mode(pdata, phy_data->cur_mode); 1994 } 1995 1996 static void xgbe_phy_rx_adaptation(struct xgbe_prv_data *pdata) 1997 { 1998 unsigned int reg; 1999 2000 rx_adapt_reinit: 2001 reg = XMDIO_READ_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_LSTS, 2002 XGBE_PMA_RX_VAL_SIG_MASK); 2003 2004 /* step 1: Check for RX_VALID && LF_SIGDET */ 2005 if ((reg & XGBE_PMA_RX_VAL_SIG_MASK) != XGBE_PMA_RX_VAL_SIG_MASK) { 2006 netif_dbg(pdata, link, pdata->netdev, 2007 "RX_VALID or LF_SIGDET is unset, issue rrc"); 2008 xgbe_phy_rrc(pdata); 2009 if (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) { 2010 pdata->rx_adapt_retries = 0; 2011 return; 2012 } 2013 goto rx_adapt_reinit; 2014 } 2015 2016 /* perform rx adaptation */ 2017 xgbe_rx_adaptation(pdata); 2018 } 2019 2020 /* 2021 * xgbe_phy_stop_data_path - Stop TX/RX to prevent packet corruption 2022 * @pdata: driver private data 2023 * 2024 * This function stops the data path (TX and RX) to prevent packet 2025 * corruption during critical PHY operations like RX adaptation. 2026 * Must be called before initiating RX adaptation when link goes down. 2027 */ 2028 static void xgbe_phy_stop_data_path(struct xgbe_prv_data *pdata) 2029 { 2030 if (pdata->data_path_stopped) 2031 return; 2032 2033 /* Stop TX/RX to prevent packet corruption during RX adaptation */ 2034 pdata->hw_if.disable_tx(pdata); 2035 pdata->hw_if.disable_rx(pdata); 2036 pdata->data_path_stopped = true; 2037 2038 netif_dbg(pdata, link, pdata->netdev, 2039 "stopping data path for RX adaptation\n"); 2040 } 2041 2042 /* 2043 * xgbe_phy_start_data_path - Re-enable TX/RX after RX adaptation 2044 * @pdata: driver private data 2045 * 2046 * This function re-enables the data path (TX and RX) after RX adaptation 2047 * has completed successfully. Only called when link is confirmed up. 2048 */ 2049 static void xgbe_phy_start_data_path(struct xgbe_prv_data *pdata) 2050 { 2051 if (!pdata->data_path_stopped) 2052 return; 2053 2054 pdata->hw_if.enable_rx(pdata); 2055 pdata->hw_if.enable_tx(pdata); 2056 pdata->data_path_stopped = false; 2057 2058 netif_dbg(pdata, link, pdata->netdev, 2059 "restarting data path after RX adaptation\n"); 2060 } 2061 2062 static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata) 2063 { 2064 int reg; 2065 2066 reg = XMDIO_READ_BITS(pdata, MDIO_MMD_PCS, MDIO_PCS_DIGITAL_STAT, 2067 XGBE_PCS_PSEQ_STATE_MASK); 2068 if (reg == XGBE_PCS_PSEQ_STATE_POWER_GOOD) { 2069 /* Mailbox command timed out, reset of RX block is required. 2070 * This can be done by asseting the reset bit and wait for 2071 * its compeletion. 2072 */ 2073 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1, 2074 XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_ON); 2075 ndelay(20); 2076 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1, 2077 XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_OFF); 2078 usleep_range(40, 50); 2079 netif_err(pdata, link, pdata->netdev, "firmware mailbox reset performed\n"); 2080 } 2081 } 2082 2083 static void xgbe_phy_pll_ctrl(struct xgbe_prv_data *pdata, bool enable) 2084 { 2085 /* PLL_CTRL feature needs to be enabled for fixed PHY modes (Non-Autoneg) only */ 2086 if (pdata->phy.autoneg != AUTONEG_DISABLE) 2087 return; 2088 2089 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_MISC_CTRL0, 2090 XGBE_PMA_PLL_CTRL_MASK, 2091 enable ? XGBE_PMA_PLL_CTRL_ENABLE 2092 : XGBE_PMA_PLL_CTRL_DISABLE); 2093 2094 /* Wait for command to complete */ 2095 usleep_range(100, 200); 2096 } 2097 2098 static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata, 2099 enum xgbe_mb_cmd cmd, enum xgbe_mb_subcmd sub_cmd) 2100 { 2101 unsigned int s0 = 0; 2102 unsigned int wait; 2103 2104 /* Disable PLL re-initialization during FW command processing */ 2105 xgbe_phy_pll_ctrl(pdata, false); 2106 2107 /* Log if a previous command did not complete */ 2108 if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) { 2109 netif_dbg(pdata, link, pdata->netdev, 2110 "firmware mailbox not ready for command\n"); 2111 xgbe_phy_rx_reset(pdata); 2112 } 2113 2114 /* Construct the command */ 2115 XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, COMMAND, cmd); 2116 XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, SUB_COMMAND, sub_cmd); 2117 2118 /* Issue the command */ 2119 XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_0, s0); 2120 XP_IOWRITE(pdata, XP_DRIVER_SCRATCH_1, 0); 2121 XP_IOWRITE_BITS(pdata, XP_DRIVER_INT_REQ, REQUEST, 1); 2122 2123 /* Wait for command to complete */ 2124 wait = XGBE_RATECHANGE_COUNT; 2125 while (wait--) { 2126 if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) 2127 goto do_rx_adaptation; 2128 2129 usleep_range(1000, 2000); 2130 } 2131 2132 netif_dbg(pdata, link, pdata->netdev, 2133 "firmware mailbox command did not complete\n"); 2134 2135 /* Reset on error */ 2136 xgbe_phy_rx_reset(pdata); 2137 goto reenable_pll; 2138 2139 do_rx_adaptation: 2140 if (pdata->en_rx_adap && sub_cmd == XGBE_MB_SUBCMD_RX_ADAP && 2141 (cmd == XGBE_MB_CMD_SET_10G_KR || cmd == XGBE_MB_CMD_SET_10G_SFI)) { 2142 netif_dbg(pdata, link, pdata->netdev, 2143 "Enabling RX adaptation\n"); 2144 pdata->mode_set = true; 2145 xgbe_phy_rx_adaptation(pdata); 2146 /* return from here to avoid enabling PLL ctrl 2147 * during adaptation phase 2148 */ 2149 return; 2150 } 2151 2152 reenable_pll: 2153 /* Enable PLL re-initialization, not needed for PHY Power Off and RRC cmds */ 2154 if (cmd != XGBE_MB_CMD_POWER_OFF && 2155 cmd != XGBE_MB_CMD_RRC) 2156 xgbe_phy_pll_ctrl(pdata, true); 2157 } 2158 2159 static void xgbe_phy_rrc(struct xgbe_prv_data *pdata) 2160 { 2161 /* Receiver Reset Cycle */ 2162 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_RRC, XGBE_MB_SUBCMD_NONE); 2163 2164 netif_dbg(pdata, link, pdata->netdev, "receiver reset complete\n"); 2165 } 2166 2167 static void xgbe_phy_power_off(struct xgbe_prv_data *pdata) 2168 { 2169 struct xgbe_phy_data *phy_data = pdata->phy_data; 2170 2171 /* Power off */ 2172 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_POWER_OFF, XGBE_MB_SUBCMD_NONE); 2173 2174 phy_data->cur_mode = XGBE_MODE_UNKNOWN; 2175 2176 netif_dbg(pdata, link, pdata->netdev, "phy powered off\n"); 2177 } 2178 2179 static bool enable_rx_adap(struct xgbe_prv_data *pdata, enum xgbe_mode mode) 2180 { 2181 struct xgbe_phy_data *phy_data = pdata->phy_data; 2182 unsigned int ver; 2183 2184 /* Rx-Adaptation is not supported on older platforms(< 0x30H) */ 2185 ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER); 2186 if (ver < 0x30) 2187 return false; 2188 2189 /* Re-driver models 4223 && 4227 do not support Rx-Adaptation */ 2190 if (phy_data->redrv && 2191 (phy_data->redrv_model == XGBE_PHY_REDRV_MODEL_4223 || 2192 phy_data->redrv_model == XGBE_PHY_REDRV_MODEL_4227)) 2193 return false; 2194 2195 /* 10G KR mode with AN does not support Rx-Adaptation */ 2196 if (mode == XGBE_MODE_KR && 2197 phy_data->port_mode != XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG) 2198 return false; 2199 2200 pdata->en_rx_adap = 1; 2201 return true; 2202 } 2203 2204 static void xgbe_phy_sfi_mode(struct xgbe_prv_data *pdata) 2205 { 2206 struct xgbe_phy_data *phy_data = pdata->phy_data; 2207 2208 xgbe_phy_set_redrv_mode(pdata); 2209 2210 /* 10G/SFI */ 2211 if (phy_data->sfp_cable != XGBE_SFP_CABLE_PASSIVE) { 2212 pdata->en_rx_adap = 0; 2213 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, XGBE_MB_SUBCMD_ACTIVE); 2214 } else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) && 2215 (enable_rx_adap(pdata, XGBE_MODE_SFI))) { 2216 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, 2217 XGBE_MB_SUBCMD_RX_ADAP); 2218 } else { 2219 if (phy_data->sfp_cable_len <= 1) 2220 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, 2221 XGBE_MB_SUBCMD_PASSIVE_1M); 2222 else if (phy_data->sfp_cable_len <= 3) 2223 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, 2224 XGBE_MB_SUBCMD_PASSIVE_3M); 2225 else 2226 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_SFI, 2227 XGBE_MB_SUBCMD_PASSIVE_OTHER); 2228 } 2229 2230 phy_data->cur_mode = XGBE_MODE_SFI; 2231 2232 netif_dbg(pdata, link, pdata->netdev, "10GbE SFI mode set\n"); 2233 } 2234 2235 static void xgbe_phy_x_mode(struct xgbe_prv_data *pdata) 2236 { 2237 struct xgbe_phy_data *phy_data = pdata->phy_data; 2238 2239 xgbe_phy_set_redrv_mode(pdata); 2240 2241 /* 1G/X */ 2242 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_KX); 2243 2244 phy_data->cur_mode = XGBE_MODE_X; 2245 2246 netif_dbg(pdata, link, pdata->netdev, "1GbE X mode set\n"); 2247 } 2248 2249 static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data *pdata) 2250 { 2251 struct xgbe_phy_data *phy_data = pdata->phy_data; 2252 2253 xgbe_phy_set_redrv_mode(pdata); 2254 2255 /* 1G/SGMII */ 2256 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_SGMII); 2257 2258 phy_data->cur_mode = XGBE_MODE_SGMII_1000; 2259 2260 netif_dbg(pdata, link, pdata->netdev, "1GbE SGMII mode set\n"); 2261 } 2262 2263 static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data *pdata) 2264 { 2265 struct xgbe_phy_data *phy_data = pdata->phy_data; 2266 2267 xgbe_phy_set_redrv_mode(pdata); 2268 2269 /* 100M/SGMII */ 2270 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_100MBITS); 2271 2272 phy_data->cur_mode = XGBE_MODE_SGMII_100; 2273 2274 netif_dbg(pdata, link, pdata->netdev, "100MbE SGMII mode set\n"); 2275 } 2276 2277 static void xgbe_phy_sgmii_10_mode(struct xgbe_prv_data *pdata) 2278 { 2279 struct xgbe_phy_data *phy_data = pdata->phy_data; 2280 2281 xgbe_phy_set_redrv_mode(pdata); 2282 2283 /* 10M/SGMII */ 2284 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_10MBITS); 2285 2286 phy_data->cur_mode = XGBE_MODE_SGMII_10; 2287 2288 netif_dbg(pdata, link, pdata->netdev, "10MbE SGMII mode set\n"); 2289 } 2290 2291 static void xgbe_phy_kr_mode(struct xgbe_prv_data *pdata) 2292 { 2293 struct xgbe_phy_data *phy_data = pdata->phy_data; 2294 2295 xgbe_phy_set_redrv_mode(pdata); 2296 2297 /* 10G/KR */ 2298 if (enable_rx_adap(pdata, XGBE_MODE_KR)) 2299 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_KR, 2300 XGBE_MB_SUBCMD_RX_ADAP); 2301 else 2302 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_10G_KR, 2303 XGBE_MB_SUBCMD_NONE); 2304 2305 phy_data->cur_mode = XGBE_MODE_KR; 2306 2307 netif_dbg(pdata, link, pdata->netdev, "10GbE KR mode set\n"); 2308 } 2309 2310 static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data *pdata) 2311 { 2312 struct xgbe_phy_data *phy_data = pdata->phy_data; 2313 2314 xgbe_phy_set_redrv_mode(pdata); 2315 2316 /* 2.5G/KX */ 2317 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_2_5G, XGBE_MB_SUBCMD_NONE); 2318 2319 phy_data->cur_mode = XGBE_MODE_KX_2500; 2320 2321 netif_dbg(pdata, link, pdata->netdev, "2.5GbE KX mode set\n"); 2322 } 2323 2324 static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data *pdata) 2325 { 2326 struct xgbe_phy_data *phy_data = pdata->phy_data; 2327 2328 xgbe_phy_set_redrv_mode(pdata); 2329 2330 /* 1G/KX */ 2331 xgbe_phy_perform_ratechange(pdata, XGBE_MB_CMD_SET_1G, XGBE_MB_SUBCMD_1G_KX); 2332 2333 phy_data->cur_mode = XGBE_MODE_KX_1000; 2334 2335 netif_dbg(pdata, link, pdata->netdev, "1GbE KX mode set\n"); 2336 } 2337 2338 static enum xgbe_mode xgbe_phy_cur_mode(struct xgbe_prv_data *pdata) 2339 { 2340 struct xgbe_phy_data *phy_data = pdata->phy_data; 2341 2342 return phy_data->cur_mode; 2343 } 2344 2345 static enum xgbe_mode xgbe_phy_switch_baset_mode(struct xgbe_prv_data *pdata) 2346 { 2347 struct xgbe_phy_data *phy_data = pdata->phy_data; 2348 2349 /* No switching if not 10GBase-T */ 2350 if (phy_data->port_mode != XGBE_PORT_MODE_10GBASE_T) 2351 return xgbe_phy_cur_mode(pdata); 2352 2353 switch (xgbe_phy_cur_mode(pdata)) { 2354 case XGBE_MODE_SGMII_10: 2355 case XGBE_MODE_SGMII_100: 2356 case XGBE_MODE_SGMII_1000: 2357 return XGBE_MODE_KR; 2358 case XGBE_MODE_KX_2500: 2359 return XGBE_MODE_SGMII_1000; 2360 case XGBE_MODE_KR: 2361 default: 2362 return XGBE_MODE_KX_2500; 2363 } 2364 } 2365 2366 static enum xgbe_mode xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data *pdata) 2367 { 2368 return XGBE_MODE_KX_2500; 2369 } 2370 2371 static enum xgbe_mode xgbe_phy_switch_bp_mode(struct xgbe_prv_data *pdata) 2372 { 2373 /* If we are in KR switch to KX, and vice-versa */ 2374 switch (xgbe_phy_cur_mode(pdata)) { 2375 case XGBE_MODE_KX_1000: 2376 return XGBE_MODE_KR; 2377 case XGBE_MODE_KR: 2378 default: 2379 return XGBE_MODE_KX_1000; 2380 } 2381 } 2382 2383 static enum xgbe_mode xgbe_phy_switch_mode(struct xgbe_prv_data *pdata) 2384 { 2385 struct xgbe_phy_data *phy_data = pdata->phy_data; 2386 2387 switch (phy_data->port_mode) { 2388 case XGBE_PORT_MODE_BACKPLANE: 2389 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 2390 return xgbe_phy_switch_bp_mode(pdata); 2391 case XGBE_PORT_MODE_BACKPLANE_2500: 2392 return xgbe_phy_switch_bp_2500_mode(pdata); 2393 case XGBE_PORT_MODE_1000BASE_T: 2394 case XGBE_PORT_MODE_NBASE_T: 2395 case XGBE_PORT_MODE_10GBASE_T: 2396 return xgbe_phy_switch_baset_mode(pdata); 2397 case XGBE_PORT_MODE_1000BASE_X: 2398 case XGBE_PORT_MODE_10GBASE_R: 2399 case XGBE_PORT_MODE_SFP: 2400 /* No switching, so just return current mode */ 2401 return xgbe_phy_cur_mode(pdata); 2402 default: 2403 return XGBE_MODE_UNKNOWN; 2404 } 2405 } 2406 2407 static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data, 2408 int speed) 2409 { 2410 switch (speed) { 2411 case SPEED_1000: 2412 return XGBE_MODE_X; 2413 case SPEED_10000: 2414 return XGBE_MODE_KR; 2415 default: 2416 return XGBE_MODE_UNKNOWN; 2417 } 2418 } 2419 2420 static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data, 2421 int speed) 2422 { 2423 switch (speed) { 2424 case SPEED_10: 2425 return XGBE_MODE_SGMII_10; 2426 case SPEED_100: 2427 return XGBE_MODE_SGMII_100; 2428 case SPEED_1000: 2429 return XGBE_MODE_SGMII_1000; 2430 case SPEED_2500: 2431 return XGBE_MODE_KX_2500; 2432 case SPEED_10000: 2433 return XGBE_MODE_KR; 2434 default: 2435 return XGBE_MODE_UNKNOWN; 2436 } 2437 } 2438 2439 static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data, 2440 int speed) 2441 { 2442 switch (speed) { 2443 case SPEED_10: 2444 return XGBE_MODE_SGMII_10; 2445 case SPEED_100: 2446 return XGBE_MODE_SGMII_100; 2447 case SPEED_1000: 2448 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) 2449 return XGBE_MODE_SGMII_1000; 2450 else 2451 return XGBE_MODE_X; 2452 case SPEED_10000: 2453 case SPEED_UNKNOWN: 2454 return XGBE_MODE_SFI; 2455 default: 2456 return XGBE_MODE_UNKNOWN; 2457 } 2458 } 2459 2460 static enum xgbe_mode xgbe_phy_get_bp_2500_mode(int speed) 2461 { 2462 switch (speed) { 2463 case SPEED_2500: 2464 return XGBE_MODE_KX_2500; 2465 default: 2466 return XGBE_MODE_UNKNOWN; 2467 } 2468 } 2469 2470 static enum xgbe_mode xgbe_phy_get_bp_mode(int speed) 2471 { 2472 switch (speed) { 2473 case SPEED_1000: 2474 return XGBE_MODE_KX_1000; 2475 case SPEED_10000: 2476 return XGBE_MODE_KR; 2477 default: 2478 return XGBE_MODE_UNKNOWN; 2479 } 2480 } 2481 2482 static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata, 2483 int speed) 2484 { 2485 struct xgbe_phy_data *phy_data = pdata->phy_data; 2486 2487 switch (phy_data->port_mode) { 2488 case XGBE_PORT_MODE_BACKPLANE: 2489 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 2490 return xgbe_phy_get_bp_mode(speed); 2491 case XGBE_PORT_MODE_BACKPLANE_2500: 2492 return xgbe_phy_get_bp_2500_mode(speed); 2493 case XGBE_PORT_MODE_1000BASE_T: 2494 case XGBE_PORT_MODE_NBASE_T: 2495 case XGBE_PORT_MODE_10GBASE_T: 2496 return xgbe_phy_get_baset_mode(phy_data, speed); 2497 case XGBE_PORT_MODE_1000BASE_X: 2498 case XGBE_PORT_MODE_10GBASE_R: 2499 return xgbe_phy_get_basex_mode(phy_data, speed); 2500 case XGBE_PORT_MODE_SFP: 2501 return xgbe_phy_get_sfp_mode(phy_data, speed); 2502 default: 2503 return XGBE_MODE_UNKNOWN; 2504 } 2505 } 2506 2507 static void xgbe_phy_set_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode) 2508 { 2509 switch (mode) { 2510 case XGBE_MODE_KX_1000: 2511 xgbe_phy_kx_1000_mode(pdata); 2512 break; 2513 case XGBE_MODE_KX_2500: 2514 xgbe_phy_kx_2500_mode(pdata); 2515 break; 2516 case XGBE_MODE_KR: 2517 xgbe_phy_kr_mode(pdata); 2518 break; 2519 case XGBE_MODE_SGMII_10: 2520 xgbe_phy_sgmii_10_mode(pdata); 2521 break; 2522 case XGBE_MODE_SGMII_100: 2523 xgbe_phy_sgmii_100_mode(pdata); 2524 break; 2525 case XGBE_MODE_SGMII_1000: 2526 xgbe_phy_sgmii_1000_mode(pdata); 2527 break; 2528 case XGBE_MODE_X: 2529 xgbe_phy_x_mode(pdata); 2530 break; 2531 case XGBE_MODE_SFI: 2532 xgbe_phy_sfi_mode(pdata); 2533 break; 2534 default: 2535 break; 2536 } 2537 } 2538 2539 static bool xgbe_phy_check_mode(struct xgbe_prv_data *pdata, 2540 enum xgbe_mode mode, bool advert) 2541 { 2542 if (pdata->phy.autoneg == AUTONEG_ENABLE) { 2543 return advert; 2544 } else { 2545 enum xgbe_mode cur_mode; 2546 2547 cur_mode = xgbe_phy_get_mode(pdata, pdata->phy.speed); 2548 if (cur_mode == mode) 2549 return true; 2550 } 2551 2552 return false; 2553 } 2554 2555 static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data *pdata, 2556 enum xgbe_mode mode) 2557 { 2558 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 2559 2560 switch (mode) { 2561 case XGBE_MODE_X: 2562 return xgbe_phy_check_mode(pdata, mode, 2563 XGBE_ADV(lks, 1000baseX_Full)); 2564 case XGBE_MODE_KR: 2565 return xgbe_phy_check_mode(pdata, mode, 2566 XGBE_ADV(lks, 10000baseKR_Full)); 2567 default: 2568 return false; 2569 } 2570 } 2571 2572 static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data *pdata, 2573 enum xgbe_mode mode) 2574 { 2575 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 2576 2577 switch (mode) { 2578 case XGBE_MODE_SGMII_10: 2579 return xgbe_phy_check_mode(pdata, mode, 2580 XGBE_ADV(lks, 10baseT_Full)); 2581 case XGBE_MODE_SGMII_100: 2582 return xgbe_phy_check_mode(pdata, mode, 2583 XGBE_ADV(lks, 100baseT_Full)); 2584 case XGBE_MODE_SGMII_1000: 2585 return xgbe_phy_check_mode(pdata, mode, 2586 XGBE_ADV(lks, 1000baseT_Full)); 2587 case XGBE_MODE_KX_2500: 2588 return xgbe_phy_check_mode(pdata, mode, 2589 XGBE_ADV(lks, 2500baseT_Full)); 2590 case XGBE_MODE_KR: 2591 return xgbe_phy_check_mode(pdata, mode, 2592 XGBE_ADV(lks, 10000baseT_Full)); 2593 default: 2594 return false; 2595 } 2596 } 2597 2598 static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data *pdata, 2599 enum xgbe_mode mode) 2600 { 2601 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 2602 struct xgbe_phy_data *phy_data = pdata->phy_data; 2603 2604 switch (mode) { 2605 case XGBE_MODE_X: 2606 if (phy_data->sfp_base == XGBE_SFP_BASE_1000_T) 2607 return false; 2608 return xgbe_phy_check_mode(pdata, mode, 2609 XGBE_ADV(lks, 1000baseX_Full)); 2610 case XGBE_MODE_SGMII_10: 2611 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) 2612 return false; 2613 return xgbe_phy_check_mode(pdata, mode, 2614 XGBE_ADV(lks, 10baseT_Full)); 2615 case XGBE_MODE_SGMII_100: 2616 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) 2617 return false; 2618 return xgbe_phy_check_mode(pdata, mode, 2619 XGBE_ADV(lks, 100baseT_Full)); 2620 case XGBE_MODE_SGMII_1000: 2621 if (phy_data->sfp_base != XGBE_SFP_BASE_1000_T) 2622 return false; 2623 return xgbe_phy_check_mode(pdata, mode, 2624 XGBE_ADV(lks, 1000baseT_Full)); 2625 case XGBE_MODE_SFI: 2626 if (phy_data->sfp_mod_absent) 2627 return true; 2628 return xgbe_phy_check_mode(pdata, mode, 2629 XGBE_ADV(lks, 10000baseSR_Full) || 2630 XGBE_ADV(lks, 10000baseLR_Full) || 2631 XGBE_ADV(lks, 10000baseLRM_Full) || 2632 XGBE_ADV(lks, 10000baseER_Full) || 2633 XGBE_ADV(lks, 10000baseCR_Full)); 2634 default: 2635 return false; 2636 } 2637 } 2638 2639 static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data *pdata, 2640 enum xgbe_mode mode) 2641 { 2642 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 2643 2644 switch (mode) { 2645 case XGBE_MODE_KX_2500: 2646 return xgbe_phy_check_mode(pdata, mode, 2647 XGBE_ADV(lks, 2500baseX_Full)); 2648 default: 2649 return false; 2650 } 2651 } 2652 2653 static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data *pdata, 2654 enum xgbe_mode mode) 2655 { 2656 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 2657 2658 switch (mode) { 2659 case XGBE_MODE_KX_1000: 2660 return xgbe_phy_check_mode(pdata, mode, 2661 XGBE_ADV(lks, 1000baseKX_Full)); 2662 case XGBE_MODE_KR: 2663 return xgbe_phy_check_mode(pdata, mode, 2664 XGBE_ADV(lks, 10000baseKR_Full)); 2665 default: 2666 return false; 2667 } 2668 } 2669 2670 static bool xgbe_phy_use_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode) 2671 { 2672 struct xgbe_phy_data *phy_data = pdata->phy_data; 2673 2674 switch (phy_data->port_mode) { 2675 case XGBE_PORT_MODE_BACKPLANE: 2676 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 2677 return xgbe_phy_use_bp_mode(pdata, mode); 2678 case XGBE_PORT_MODE_BACKPLANE_2500: 2679 return xgbe_phy_use_bp_2500_mode(pdata, mode); 2680 case XGBE_PORT_MODE_1000BASE_T: 2681 case XGBE_PORT_MODE_NBASE_T: 2682 case XGBE_PORT_MODE_10GBASE_T: 2683 return xgbe_phy_use_baset_mode(pdata, mode); 2684 case XGBE_PORT_MODE_1000BASE_X: 2685 case XGBE_PORT_MODE_10GBASE_R: 2686 return xgbe_phy_use_basex_mode(pdata, mode); 2687 case XGBE_PORT_MODE_SFP: 2688 return xgbe_phy_use_sfp_mode(pdata, mode); 2689 default: 2690 return false; 2691 } 2692 } 2693 2694 static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data, 2695 int speed) 2696 { 2697 switch (speed) { 2698 case SPEED_1000: 2699 return (phy_data->port_mode == XGBE_PORT_MODE_1000BASE_X); 2700 case SPEED_10000: 2701 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_R); 2702 default: 2703 return false; 2704 } 2705 } 2706 2707 static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_prv_data *pdata, 2708 int speed) 2709 { 2710 struct xgbe_phy_data *phy_data = pdata->phy_data; 2711 unsigned int ver; 2712 2713 switch (speed) { 2714 case SPEED_10: 2715 /* Supported in ver 21H and ver >= 30H */ 2716 ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER); 2717 return (ver == 0x21 || ver >= 0x30); 2718 case SPEED_100: 2719 case SPEED_1000: 2720 return true; 2721 case SPEED_2500: 2722 return ((phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T) || 2723 (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T)); 2724 case SPEED_10000: 2725 return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T); 2726 default: 2727 return false; 2728 } 2729 } 2730 2731 static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_prv_data *pdata, 2732 int speed) 2733 { 2734 struct xgbe_phy_data *phy_data = pdata->phy_data; 2735 unsigned int ver; 2736 2737 switch (speed) { 2738 case SPEED_10: 2739 /* Supported in ver 21H and ver >= 30H */ 2740 ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER); 2741 return ((ver == 0x21 || ver >= 0x30) && 2742 (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000)); 2743 case SPEED_100: 2744 return (phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000); 2745 case SPEED_1000: 2746 return ((phy_data->sfp_speed == XGBE_SFP_SPEED_100_1000) || 2747 (phy_data->sfp_speed == XGBE_SFP_SPEED_1000)); 2748 case SPEED_10000: 2749 return (phy_data->sfp_speed == XGBE_SFP_SPEED_10000); 2750 default: 2751 return false; 2752 } 2753 } 2754 2755 static bool xgbe_phy_valid_speed_bp_2500_mode(int speed) 2756 { 2757 switch (speed) { 2758 case SPEED_2500: 2759 return true; 2760 default: 2761 return false; 2762 } 2763 } 2764 2765 static bool xgbe_phy_valid_speed_bp_mode(int speed) 2766 { 2767 switch (speed) { 2768 case SPEED_1000: 2769 case SPEED_10000: 2770 return true; 2771 default: 2772 return false; 2773 } 2774 } 2775 2776 static bool xgbe_phy_valid_speed(struct xgbe_prv_data *pdata, int speed) 2777 { 2778 struct xgbe_phy_data *phy_data = pdata->phy_data; 2779 2780 switch (phy_data->port_mode) { 2781 case XGBE_PORT_MODE_BACKPLANE: 2782 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 2783 return xgbe_phy_valid_speed_bp_mode(speed); 2784 case XGBE_PORT_MODE_BACKPLANE_2500: 2785 return xgbe_phy_valid_speed_bp_2500_mode(speed); 2786 case XGBE_PORT_MODE_1000BASE_T: 2787 case XGBE_PORT_MODE_NBASE_T: 2788 case XGBE_PORT_MODE_10GBASE_T: 2789 return xgbe_phy_valid_speed_baset_mode(pdata, speed); 2790 case XGBE_PORT_MODE_1000BASE_X: 2791 case XGBE_PORT_MODE_10GBASE_R: 2792 return xgbe_phy_valid_speed_basex_mode(phy_data, speed); 2793 case XGBE_PORT_MODE_SFP: 2794 return xgbe_phy_valid_speed_sfp_mode(pdata, speed); 2795 default: 2796 return false; 2797 } 2798 } 2799 2800 static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) 2801 { 2802 struct xgbe_phy_data *phy_data = pdata->phy_data; 2803 int reg, ret; 2804 2805 *an_restart = 0; 2806 2807 if (phy_data->port_mode == XGBE_PORT_MODE_SFP) { 2808 /* Check SFP signals */ 2809 xgbe_phy_sfp_detect(pdata); 2810 2811 if (phy_data->sfp_changed) { 2812 *an_restart = 1; 2813 return 0; 2814 } 2815 2816 if (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) { 2817 if (pdata->en_rx_adap) 2818 pdata->rx_adapt_done = false; 2819 return 0; 2820 } 2821 } 2822 2823 if (phy_data->phydev) { 2824 /* Check external PHY */ 2825 ret = phy_read_status(phy_data->phydev); 2826 if (ret < 0) 2827 return 0; 2828 2829 if ((pdata->phy.autoneg == AUTONEG_ENABLE) && 2830 !phy_aneg_done(phy_data->phydev)) 2831 return 0; 2832 2833 if (!phy_data->phydev->link) 2834 return 0; 2835 } 2836 2837 reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1); 2838 if (reg < 0) 2839 return reg; 2840 2841 /* Link status is latched low so that momentary link drops 2842 * can be detected. If link was already down read again 2843 * to get the latest state. 2844 */ 2845 2846 if (!pdata->phy.link && !(reg & MDIO_STAT1_LSTATUS)) { 2847 reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1); 2848 if (reg < 0) 2849 return reg; 2850 } 2851 2852 if (pdata->en_rx_adap) { 2853 /* if the link is available and adaptation is done, 2854 * declare link up 2855 * 2856 * Note: When link is up and adaptation is done, we can 2857 * safely re-enable the data path if it was stopped 2858 * for adaptation. 2859 */ 2860 if ((reg & MDIO_STAT1_LSTATUS) && pdata->rx_adapt_done) { 2861 xgbe_phy_start_data_path(pdata); 2862 return 1; 2863 } 2864 /* If either link is not available or adaptation is not done, 2865 * retrigger the adaptation logic. (if the mode is not set, 2866 * then issue mailbox command first) 2867 */ 2868 2869 /* CRITICAL: Stop data path BEFORE triggering RX adaptation 2870 * to prevent CRC errors from packets corrupted during 2871 * the adaptation process. This is especially important 2872 * when AN is OFF in 10G KR mode. 2873 */ 2874 xgbe_phy_stop_data_path(pdata); 2875 2876 if (pdata->mode_set) { 2877 xgbe_phy_rx_adaptation(pdata); 2878 } else { 2879 pdata->rx_adapt_done = false; 2880 xgbe_phy_set_mode(pdata, phy_data->cur_mode); 2881 } 2882 2883 if (pdata->rx_adapt_done) { 2884 /* Adaptation complete, safe to re-enable data path */ 2885 xgbe_phy_start_data_path(pdata); 2886 return 1; 2887 } 2888 } else if (reg & MDIO_STAT1_LSTATUS) 2889 return 1; 2890 2891 if (pdata->phy.autoneg == AUTONEG_ENABLE && 2892 phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) { 2893 if (!test_bit(XGBE_LINK_INIT, &pdata->dev_state)) { 2894 netif_carrier_off(pdata->netdev); 2895 *an_restart = 1; 2896 } 2897 } 2898 2899 /* No link, attempt a receiver reset cycle */ 2900 if (pdata->vdata->enable_rrc && phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { 2901 phy_data->rrc_count = 0; 2902 xgbe_phy_rrc(pdata); 2903 } 2904 2905 return 0; 2906 } 2907 2908 static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata) 2909 { 2910 struct xgbe_phy_data *phy_data = pdata->phy_data; 2911 2912 phy_data->sfp_gpio_address = XGBE_GPIO_ADDRESS_PCA9555 + 2913 XP_GET_BITS(pdata->pp3, XP_PROP_3, 2914 GPIO_ADDR); 2915 2916 phy_data->sfp_gpio_mask = XP_GET_BITS(pdata->pp3, XP_PROP_3, 2917 GPIO_MASK); 2918 2919 phy_data->sfp_gpio_rx_los = XP_GET_BITS(pdata->pp3, XP_PROP_3, 2920 GPIO_RX_LOS); 2921 phy_data->sfp_gpio_tx_fault = XP_GET_BITS(pdata->pp3, XP_PROP_3, 2922 GPIO_TX_FAULT); 2923 phy_data->sfp_gpio_mod_absent = XP_GET_BITS(pdata->pp3, XP_PROP_3, 2924 GPIO_MOD_ABS); 2925 phy_data->sfp_gpio_rate_select = XP_GET_BITS(pdata->pp3, XP_PROP_3, 2926 GPIO_RATE_SELECT); 2927 2928 if (netif_msg_probe(pdata)) { 2929 dev_dbg(pdata->dev, "SFP: gpio_address=%#x\n", 2930 phy_data->sfp_gpio_address); 2931 dev_dbg(pdata->dev, "SFP: gpio_mask=%#x\n", 2932 phy_data->sfp_gpio_mask); 2933 dev_dbg(pdata->dev, "SFP: gpio_rx_los=%u\n", 2934 phy_data->sfp_gpio_rx_los); 2935 dev_dbg(pdata->dev, "SFP: gpio_tx_fault=%u\n", 2936 phy_data->sfp_gpio_tx_fault); 2937 dev_dbg(pdata->dev, "SFP: gpio_mod_absent=%u\n", 2938 phy_data->sfp_gpio_mod_absent); 2939 dev_dbg(pdata->dev, "SFP: gpio_rate_select=%u\n", 2940 phy_data->sfp_gpio_rate_select); 2941 } 2942 } 2943 2944 static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data *pdata) 2945 { 2946 struct xgbe_phy_data *phy_data = pdata->phy_data; 2947 unsigned int mux_addr_hi, mux_addr_lo; 2948 2949 mux_addr_hi = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_HI); 2950 mux_addr_lo = XP_GET_BITS(pdata->pp4, XP_PROP_4, MUX_ADDR_LO); 2951 if (mux_addr_lo == XGBE_SFP_DIRECT) 2952 return; 2953 2954 phy_data->sfp_comm = XGBE_SFP_COMM_PCA9545; 2955 phy_data->sfp_mux_address = (mux_addr_hi << 2) + mux_addr_lo; 2956 phy_data->sfp_mux_channel = XP_GET_BITS(pdata->pp4, XP_PROP_4, 2957 MUX_CHAN); 2958 2959 if (netif_msg_probe(pdata)) { 2960 dev_dbg(pdata->dev, "SFP: mux_address=%#x\n", 2961 phy_data->sfp_mux_address); 2962 dev_dbg(pdata->dev, "SFP: mux_channel=%u\n", 2963 phy_data->sfp_mux_channel); 2964 } 2965 } 2966 2967 static void xgbe_phy_sfp_setup(struct xgbe_prv_data *pdata) 2968 { 2969 xgbe_phy_sfp_comm_setup(pdata); 2970 xgbe_phy_sfp_gpio_setup(pdata); 2971 } 2972 2973 static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data *pdata) 2974 { 2975 struct xgbe_phy_data *phy_data = pdata->phy_data; 2976 int ret; 2977 2978 ret = pdata->hw_if.set_gpio(pdata, phy_data->mdio_reset_gpio); 2979 if (ret) 2980 return ret; 2981 2982 ret = pdata->hw_if.clr_gpio(pdata, phy_data->mdio_reset_gpio); 2983 2984 return ret; 2985 } 2986 2987 static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data *pdata) 2988 { 2989 struct xgbe_phy_data *phy_data = pdata->phy_data; 2990 u8 gpio_reg, gpio_ports[2], gpio_data[3]; 2991 int ret; 2992 2993 /* Read the output port registers */ 2994 gpio_reg = 2; 2995 ret = xgbe_phy_i2c_read(pdata, phy_data->mdio_reset_addr, 2996 &gpio_reg, sizeof(gpio_reg), 2997 gpio_ports, sizeof(gpio_ports)); 2998 if (ret) 2999 return ret; 3000 3001 /* Prepare to write the GPIO data */ 3002 gpio_data[0] = 2; 3003 gpio_data[1] = gpio_ports[0]; 3004 gpio_data[2] = gpio_ports[1]; 3005 3006 /* Set the GPIO pin */ 3007 if (phy_data->mdio_reset_gpio < 8) 3008 gpio_data[1] |= (1 << (phy_data->mdio_reset_gpio % 8)); 3009 else 3010 gpio_data[2] |= (1 << (phy_data->mdio_reset_gpio % 8)); 3011 3012 /* Write the output port registers */ 3013 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, 3014 gpio_data, sizeof(gpio_data)); 3015 if (ret) 3016 return ret; 3017 3018 /* Clear the GPIO pin */ 3019 if (phy_data->mdio_reset_gpio < 8) 3020 gpio_data[1] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); 3021 else 3022 gpio_data[2] &= ~(1 << (phy_data->mdio_reset_gpio % 8)); 3023 3024 /* Write the output port registers */ 3025 ret = xgbe_phy_i2c_write(pdata, phy_data->mdio_reset_addr, 3026 gpio_data, sizeof(gpio_data)); 3027 3028 return ret; 3029 } 3030 3031 static int xgbe_phy_mdio_reset(struct xgbe_prv_data *pdata) 3032 { 3033 struct xgbe_phy_data *phy_data = pdata->phy_data; 3034 int ret; 3035 3036 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) 3037 return 0; 3038 3039 ret = xgbe_phy_get_comm_ownership(pdata); 3040 if (ret) 3041 return ret; 3042 3043 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) 3044 ret = xgbe_phy_i2c_mdio_reset(pdata); 3045 else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) 3046 ret = xgbe_phy_int_mdio_reset(pdata); 3047 3048 xgbe_phy_put_comm_ownership(pdata); 3049 3050 return ret; 3051 } 3052 3053 static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data) 3054 { 3055 if (!phy_data->redrv) 3056 return false; 3057 3058 if (phy_data->redrv_if >= XGBE_PHY_REDRV_IF_MAX) 3059 return true; 3060 3061 switch (phy_data->redrv_model) { 3062 case XGBE_PHY_REDRV_MODEL_4223: 3063 if (phy_data->redrv_lane > 3) 3064 return true; 3065 break; 3066 case XGBE_PHY_REDRV_MODEL_4227: 3067 if (phy_data->redrv_lane > 1) 3068 return true; 3069 break; 3070 default: 3071 return true; 3072 } 3073 3074 return false; 3075 } 3076 3077 static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata) 3078 { 3079 struct xgbe_phy_data *phy_data = pdata->phy_data; 3080 3081 if (phy_data->conn_type != XGBE_CONN_TYPE_MDIO) 3082 return 0; 3083 3084 phy_data->mdio_reset = XP_GET_BITS(pdata->pp3, XP_PROP_3, MDIO_RESET); 3085 switch (phy_data->mdio_reset) { 3086 case XGBE_MDIO_RESET_NONE: 3087 case XGBE_MDIO_RESET_I2C_GPIO: 3088 case XGBE_MDIO_RESET_INT_GPIO: 3089 break; 3090 default: 3091 dev_err(pdata->dev, "unsupported MDIO reset (%#x)\n", 3092 phy_data->mdio_reset); 3093 return -EINVAL; 3094 } 3095 3096 if (phy_data->mdio_reset == XGBE_MDIO_RESET_I2C_GPIO) { 3097 phy_data->mdio_reset_addr = XGBE_GPIO_ADDRESS_PCA9555 + 3098 XP_GET_BITS(pdata->pp3, XP_PROP_3, 3099 MDIO_RESET_I2C_ADDR); 3100 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, 3101 MDIO_RESET_I2C_GPIO); 3102 } else if (phy_data->mdio_reset == XGBE_MDIO_RESET_INT_GPIO) { 3103 phy_data->mdio_reset_gpio = XP_GET_BITS(pdata->pp3, XP_PROP_3, 3104 MDIO_RESET_INT_GPIO); 3105 } 3106 3107 return 0; 3108 } 3109 3110 static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data *pdata) 3111 { 3112 struct xgbe_phy_data *phy_data = pdata->phy_data; 3113 unsigned int ver; 3114 3115 /* 10 Mbps speed is supported in ver 21H and ver >= 30H */ 3116 ver = XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER); 3117 if ((ver < 0x30 && ver != 0x21) && (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10)) 3118 return true; 3119 3120 switch (phy_data->port_mode) { 3121 case XGBE_PORT_MODE_BACKPLANE: 3122 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 3123 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || 3124 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) 3125 return false; 3126 break; 3127 case XGBE_PORT_MODE_BACKPLANE_2500: 3128 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) 3129 return false; 3130 break; 3131 case XGBE_PORT_MODE_1000BASE_T: 3132 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) || 3133 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || 3134 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000)) 3135 return false; 3136 break; 3137 case XGBE_PORT_MODE_1000BASE_X: 3138 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) 3139 return false; 3140 break; 3141 case XGBE_PORT_MODE_NBASE_T: 3142 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) || 3143 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || 3144 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || 3145 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500)) 3146 return false; 3147 break; 3148 case XGBE_PORT_MODE_10GBASE_T: 3149 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) || 3150 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || 3151 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || 3152 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) || 3153 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) 3154 return false; 3155 break; 3156 case XGBE_PORT_MODE_10GBASE_R: 3157 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) 3158 return false; 3159 break; 3160 case XGBE_PORT_MODE_SFP: 3161 if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) || 3162 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) || 3163 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) || 3164 (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000)) 3165 return false; 3166 break; 3167 default: 3168 break; 3169 } 3170 3171 return true; 3172 } 3173 3174 static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data *pdata) 3175 { 3176 struct xgbe_phy_data *phy_data = pdata->phy_data; 3177 3178 switch (phy_data->port_mode) { 3179 case XGBE_PORT_MODE_BACKPLANE: 3180 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 3181 case XGBE_PORT_MODE_BACKPLANE_2500: 3182 if (phy_data->conn_type == XGBE_CONN_TYPE_BACKPLANE) 3183 return false; 3184 break; 3185 case XGBE_PORT_MODE_1000BASE_T: 3186 case XGBE_PORT_MODE_1000BASE_X: 3187 case XGBE_PORT_MODE_NBASE_T: 3188 case XGBE_PORT_MODE_10GBASE_T: 3189 case XGBE_PORT_MODE_10GBASE_R: 3190 if (phy_data->conn_type == XGBE_CONN_TYPE_MDIO) 3191 return false; 3192 break; 3193 case XGBE_PORT_MODE_SFP: 3194 if (phy_data->conn_type == XGBE_CONN_TYPE_SFP) 3195 return false; 3196 break; 3197 default: 3198 break; 3199 } 3200 3201 return true; 3202 } 3203 3204 static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata) 3205 { 3206 if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS)) 3207 return false; 3208 if (!XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE)) 3209 return false; 3210 3211 return true; 3212 } 3213 3214 static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata) 3215 { 3216 struct xgbe_phy_data *phy_data = pdata->phy_data; 3217 3218 if (!pdata->debugfs_an_cdr_workaround) 3219 return; 3220 3221 if (!phy_data->phy_cdr_notrack) 3222 return; 3223 3224 usleep_range(phy_data->phy_cdr_delay, 3225 phy_data->phy_cdr_delay + 500); 3226 3227 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, 3228 XGBE_PMA_CDR_TRACK_EN_MASK, 3229 XGBE_PMA_CDR_TRACK_EN_ON); 3230 3231 phy_data->phy_cdr_notrack = 0; 3232 } 3233 3234 static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata) 3235 { 3236 struct xgbe_phy_data *phy_data = pdata->phy_data; 3237 3238 if (!pdata->debugfs_an_cdr_workaround) 3239 return; 3240 3241 if (phy_data->phy_cdr_notrack) 3242 return; 3243 3244 XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, 3245 XGBE_PMA_CDR_TRACK_EN_MASK, 3246 XGBE_PMA_CDR_TRACK_EN_OFF); 3247 3248 xgbe_phy_rrc(pdata); 3249 3250 phy_data->phy_cdr_notrack = 1; 3251 } 3252 3253 static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata) 3254 { 3255 if (!pdata->debugfs_an_cdr_track_early) 3256 xgbe_phy_cdr_track(pdata); 3257 } 3258 3259 static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata) 3260 { 3261 if (pdata->debugfs_an_cdr_track_early) 3262 xgbe_phy_cdr_track(pdata); 3263 } 3264 3265 static void xgbe_phy_an_post(struct xgbe_prv_data *pdata) 3266 { 3267 struct xgbe_phy_data *phy_data = pdata->phy_data; 3268 3269 switch (pdata->an_mode) { 3270 case XGBE_AN_MODE_CL73: 3271 case XGBE_AN_MODE_CL73_REDRV: 3272 if (phy_data->cur_mode != XGBE_MODE_KR) 3273 break; 3274 3275 xgbe_phy_cdr_track(pdata); 3276 3277 switch (pdata->an_result) { 3278 case XGBE_AN_READY: 3279 case XGBE_AN_COMPLETE: 3280 break; 3281 default: 3282 if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) 3283 phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; 3284 else 3285 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; 3286 break; 3287 } 3288 break; 3289 default: 3290 break; 3291 } 3292 } 3293 3294 static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata) 3295 { 3296 struct xgbe_phy_data *phy_data = pdata->phy_data; 3297 3298 switch (pdata->an_mode) { 3299 case XGBE_AN_MODE_CL73: 3300 case XGBE_AN_MODE_CL73_REDRV: 3301 if (phy_data->cur_mode != XGBE_MODE_KR) 3302 break; 3303 3304 xgbe_phy_cdr_notrack(pdata); 3305 break; 3306 default: 3307 break; 3308 } 3309 } 3310 3311 static void xgbe_phy_stop(struct xgbe_prv_data *pdata) 3312 { 3313 struct xgbe_phy_data *phy_data = pdata->phy_data; 3314 3315 /* If we have an external PHY, free it */ 3316 xgbe_phy_free_phy_device(pdata); 3317 3318 /* Reset SFP data */ 3319 xgbe_phy_sfp_reset(phy_data); 3320 xgbe_phy_sfp_mod_absent(pdata); 3321 3322 /* Reset CDR support */ 3323 xgbe_phy_cdr_track(pdata); 3324 3325 /* Power off the PHY */ 3326 xgbe_phy_power_off(pdata); 3327 3328 /* Stop the I2C controller */ 3329 pdata->i2c_if.i2c_stop(pdata); 3330 } 3331 3332 static int xgbe_phy_start(struct xgbe_prv_data *pdata) 3333 { 3334 struct xgbe_phy_data *phy_data = pdata->phy_data; 3335 int ret; 3336 3337 /* Start the I2C controller */ 3338 ret = pdata->i2c_if.i2c_start(pdata); 3339 if (ret) 3340 return ret; 3341 3342 /* Set the proper MDIO mode for the re-driver */ 3343 if (phy_data->redrv && !phy_data->redrv_if) { 3344 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, 3345 XGBE_MDIO_MODE_CL22); 3346 if (ret) { 3347 netdev_err(pdata->netdev, 3348 "redriver mdio port not compatible (%u)\n", 3349 phy_data->redrv_addr); 3350 return ret; 3351 } 3352 } 3353 3354 /* Start in highest supported mode */ 3355 xgbe_phy_set_mode(pdata, phy_data->start_mode); 3356 3357 /* Reset CDR support */ 3358 xgbe_phy_cdr_track(pdata); 3359 3360 /* After starting the I2C controller, we can check for an SFP */ 3361 switch (phy_data->port_mode) { 3362 case XGBE_PORT_MODE_SFP: 3363 xgbe_phy_sfp_detect(pdata); 3364 break; 3365 default: 3366 break; 3367 } 3368 3369 /* If we have an external PHY, start it */ 3370 ret = xgbe_phy_find_phy_device(pdata); 3371 if (ret) 3372 goto err_i2c; 3373 3374 return 0; 3375 3376 err_i2c: 3377 pdata->i2c_if.i2c_stop(pdata); 3378 3379 return ret; 3380 } 3381 3382 static int xgbe_phy_reset(struct xgbe_prv_data *pdata) 3383 { 3384 struct xgbe_phy_data *phy_data = pdata->phy_data; 3385 enum xgbe_mode cur_mode; 3386 int ret; 3387 3388 /* Reset by power cycling the PHY */ 3389 cur_mode = phy_data->cur_mode; 3390 xgbe_phy_power_off(pdata); 3391 xgbe_phy_set_mode(pdata, cur_mode); 3392 3393 if (!phy_data->phydev) 3394 return 0; 3395 3396 /* Reset the external PHY */ 3397 ret = xgbe_phy_mdio_reset(pdata); 3398 if (ret) 3399 return ret; 3400 3401 return phy_init_hw(phy_data->phydev); 3402 } 3403 3404 static void xgbe_phy_exit(struct xgbe_prv_data *pdata) 3405 { 3406 struct xgbe_phy_data *phy_data = pdata->phy_data; 3407 3408 /* Unregister for driving external PHYs */ 3409 mdiobus_unregister(phy_data->mii); 3410 } 3411 3412 static int xgbe_phy_init(struct xgbe_prv_data *pdata) 3413 { 3414 struct ethtool_link_ksettings *lks = &pdata->phy.lks; 3415 struct xgbe_phy_data *phy_data; 3416 struct mii_bus *mii; 3417 int ret; 3418 3419 /* Check if enabled */ 3420 if (!xgbe_phy_port_enabled(pdata)) { 3421 dev_info(pdata->dev, "device is not enabled\n"); 3422 return -ENODEV; 3423 } 3424 3425 /* Initialize the I2C controller */ 3426 ret = pdata->i2c_if.i2c_init(pdata); 3427 if (ret) 3428 return ret; 3429 3430 phy_data = devm_kzalloc(pdata->dev, sizeof(*phy_data), GFP_KERNEL); 3431 if (!phy_data) 3432 return -ENOMEM; 3433 pdata->phy_data = phy_data; 3434 3435 phy_data->port_mode = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_MODE); 3436 phy_data->port_id = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_ID); 3437 phy_data->port_speeds = XP_GET_BITS(pdata->pp0, XP_PROP_0, PORT_SPEEDS); 3438 phy_data->conn_type = XP_GET_BITS(pdata->pp0, XP_PROP_0, CONN_TYPE); 3439 phy_data->mdio_addr = XP_GET_BITS(pdata->pp0, XP_PROP_0, MDIO_ADDR); 3440 if (netif_msg_probe(pdata)) { 3441 dev_dbg(pdata->dev, "port mode=%u\n", phy_data->port_mode); 3442 dev_dbg(pdata->dev, "port id=%u\n", phy_data->port_id); 3443 dev_dbg(pdata->dev, "port speeds=%#x\n", phy_data->port_speeds); 3444 dev_dbg(pdata->dev, "conn type=%u\n", phy_data->conn_type); 3445 dev_dbg(pdata->dev, "mdio addr=%u\n", phy_data->mdio_addr); 3446 } 3447 3448 phy_data->redrv = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_PRESENT); 3449 phy_data->redrv_if = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_IF); 3450 phy_data->redrv_addr = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_ADDR); 3451 phy_data->redrv_lane = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_LANE); 3452 phy_data->redrv_model = XP_GET_BITS(pdata->pp4, XP_PROP_4, REDRV_MODEL); 3453 if (phy_data->redrv && netif_msg_probe(pdata)) { 3454 dev_dbg(pdata->dev, "redrv present\n"); 3455 dev_dbg(pdata->dev, "redrv i/f=%u\n", phy_data->redrv_if); 3456 dev_dbg(pdata->dev, "redrv addr=%#x\n", phy_data->redrv_addr); 3457 dev_dbg(pdata->dev, "redrv lane=%u\n", phy_data->redrv_lane); 3458 dev_dbg(pdata->dev, "redrv model=%u\n", phy_data->redrv_model); 3459 } 3460 3461 /* Validate the connection requested */ 3462 if (xgbe_phy_conn_type_mismatch(pdata)) { 3463 dev_err(pdata->dev, "phy mode/connection mismatch (%#x/%#x)\n", 3464 phy_data->port_mode, phy_data->conn_type); 3465 return -EINVAL; 3466 } 3467 3468 /* Validate the mode requested */ 3469 if (xgbe_phy_port_mode_mismatch(pdata)) { 3470 dev_err(pdata->dev, "phy mode/speed mismatch (%#x/%#x)\n", 3471 phy_data->port_mode, phy_data->port_speeds); 3472 return -EINVAL; 3473 } 3474 3475 /* Check for and validate MDIO reset support */ 3476 ret = xgbe_phy_mdio_reset_setup(pdata); 3477 if (ret) 3478 return ret; 3479 3480 /* Validate the re-driver information */ 3481 if (xgbe_phy_redrv_error(phy_data)) { 3482 dev_err(pdata->dev, "phy re-driver settings error\n"); 3483 return -EINVAL; 3484 } 3485 pdata->kr_redrv = phy_data->redrv; 3486 3487 /* Indicate current mode is unknown */ 3488 phy_data->cur_mode = XGBE_MODE_UNKNOWN; 3489 3490 /* Initialize supported features */ 3491 XGBE_ZERO_SUP(lks); 3492 3493 switch (phy_data->port_mode) { 3494 /* Backplane support */ 3495 case XGBE_PORT_MODE_BACKPLANE: 3496 XGBE_SET_SUP(lks, Autoneg); 3497 fallthrough; 3498 case XGBE_PORT_MODE_BACKPLANE_NO_AUTONEG: 3499 XGBE_SET_SUP(lks, Pause); 3500 XGBE_SET_SUP(lks, Asym_Pause); 3501 XGBE_SET_SUP(lks, Backplane); 3502 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { 3503 XGBE_SET_SUP(lks, 1000baseKX_Full); 3504 phy_data->start_mode = XGBE_MODE_KX_1000; 3505 } 3506 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { 3507 XGBE_SET_SUP(lks, 10000baseKR_Full); 3508 if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE) 3509 XGBE_SET_SUP(lks, 10000baseR_FEC); 3510 phy_data->start_mode = XGBE_MODE_KR; 3511 } 3512 3513 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; 3514 break; 3515 case XGBE_PORT_MODE_BACKPLANE_2500: 3516 XGBE_SET_SUP(lks, Pause); 3517 XGBE_SET_SUP(lks, Asym_Pause); 3518 XGBE_SET_SUP(lks, Backplane); 3519 XGBE_SET_SUP(lks, 2500baseX_Full); 3520 phy_data->start_mode = XGBE_MODE_KX_2500; 3521 3522 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; 3523 break; 3524 3525 /* MDIO 1GBase-T support */ 3526 case XGBE_PORT_MODE_1000BASE_T: 3527 XGBE_SET_SUP(lks, Autoneg); 3528 XGBE_SET_SUP(lks, Pause); 3529 XGBE_SET_SUP(lks, Asym_Pause); 3530 XGBE_SET_SUP(lks, TP); 3531 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) { 3532 XGBE_SET_SUP(lks, 10baseT_Full); 3533 phy_data->start_mode = XGBE_MODE_SGMII_10; 3534 } 3535 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { 3536 XGBE_SET_SUP(lks, 100baseT_Full); 3537 phy_data->start_mode = XGBE_MODE_SGMII_100; 3538 } 3539 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { 3540 XGBE_SET_SUP(lks, 1000baseT_Full); 3541 phy_data->start_mode = XGBE_MODE_SGMII_1000; 3542 } 3543 3544 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; 3545 break; 3546 3547 /* MDIO Base-X support */ 3548 case XGBE_PORT_MODE_1000BASE_X: 3549 XGBE_SET_SUP(lks, Autoneg); 3550 XGBE_SET_SUP(lks, Pause); 3551 XGBE_SET_SUP(lks, Asym_Pause); 3552 XGBE_SET_SUP(lks, FIBRE); 3553 XGBE_SET_SUP(lks, 1000baseX_Full); 3554 phy_data->start_mode = XGBE_MODE_X; 3555 3556 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; 3557 break; 3558 3559 /* MDIO NBase-T support */ 3560 case XGBE_PORT_MODE_NBASE_T: 3561 XGBE_SET_SUP(lks, Autoneg); 3562 XGBE_SET_SUP(lks, Pause); 3563 XGBE_SET_SUP(lks, Asym_Pause); 3564 XGBE_SET_SUP(lks, TP); 3565 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) { 3566 XGBE_SET_SUP(lks, 10baseT_Full); 3567 phy_data->start_mode = XGBE_MODE_SGMII_10; 3568 } 3569 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { 3570 XGBE_SET_SUP(lks, 100baseT_Full); 3571 phy_data->start_mode = XGBE_MODE_SGMII_100; 3572 } 3573 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { 3574 XGBE_SET_SUP(lks, 1000baseT_Full); 3575 phy_data->start_mode = XGBE_MODE_SGMII_1000; 3576 } 3577 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { 3578 XGBE_SET_SUP(lks, 2500baseT_Full); 3579 phy_data->start_mode = XGBE_MODE_KX_2500; 3580 } 3581 3582 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; 3583 break; 3584 3585 /* 10GBase-T support */ 3586 case XGBE_PORT_MODE_10GBASE_T: 3587 XGBE_SET_SUP(lks, Autoneg); 3588 XGBE_SET_SUP(lks, Pause); 3589 XGBE_SET_SUP(lks, Asym_Pause); 3590 XGBE_SET_SUP(lks, TP); 3591 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) { 3592 XGBE_SET_SUP(lks, 10baseT_Full); 3593 phy_data->start_mode = XGBE_MODE_SGMII_10; 3594 } 3595 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) { 3596 XGBE_SET_SUP(lks, 100baseT_Full); 3597 phy_data->start_mode = XGBE_MODE_SGMII_100; 3598 } 3599 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) { 3600 XGBE_SET_SUP(lks, 1000baseT_Full); 3601 phy_data->start_mode = XGBE_MODE_SGMII_1000; 3602 } 3603 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) { 3604 XGBE_SET_SUP(lks, 2500baseT_Full); 3605 phy_data->start_mode = XGBE_MODE_KX_2500; 3606 } 3607 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) { 3608 XGBE_SET_SUP(lks, 10000baseT_Full); 3609 phy_data->start_mode = XGBE_MODE_KR; 3610 } 3611 3612 phy_data->phydev_mode = XGBE_MDIO_MODE_CL45; 3613 break; 3614 3615 /* 10GBase-R support */ 3616 case XGBE_PORT_MODE_10GBASE_R: 3617 XGBE_SET_SUP(lks, Autoneg); 3618 XGBE_SET_SUP(lks, Pause); 3619 XGBE_SET_SUP(lks, Asym_Pause); 3620 XGBE_SET_SUP(lks, FIBRE); 3621 XGBE_SET_SUP(lks, 10000baseSR_Full); 3622 XGBE_SET_SUP(lks, 10000baseLR_Full); 3623 XGBE_SET_SUP(lks, 10000baseLRM_Full); 3624 XGBE_SET_SUP(lks, 10000baseER_Full); 3625 if (pdata->fec_ability & MDIO_PMA_10GBR_FECABLE_ABLE) 3626 XGBE_SET_SUP(lks, 10000baseR_FEC); 3627 phy_data->start_mode = XGBE_MODE_SFI; 3628 3629 phy_data->phydev_mode = XGBE_MDIO_MODE_NONE; 3630 break; 3631 3632 /* SFP support */ 3633 case XGBE_PORT_MODE_SFP: 3634 XGBE_SET_SUP(lks, Autoneg); 3635 XGBE_SET_SUP(lks, Pause); 3636 XGBE_SET_SUP(lks, Asym_Pause); 3637 XGBE_SET_SUP(lks, TP); 3638 XGBE_SET_SUP(lks, FIBRE); 3639 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) 3640 phy_data->start_mode = XGBE_MODE_SGMII_10; 3641 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) 3642 phy_data->start_mode = XGBE_MODE_SGMII_100; 3643 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) 3644 phy_data->start_mode = XGBE_MODE_SGMII_1000; 3645 if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) 3646 phy_data->start_mode = XGBE_MODE_SFI; 3647 3648 phy_data->phydev_mode = XGBE_MDIO_MODE_CL22; 3649 3650 xgbe_phy_sfp_setup(pdata); 3651 break; 3652 default: 3653 return -EINVAL; 3654 } 3655 3656 if (netif_msg_probe(pdata)) 3657 dev_dbg(pdata->dev, "phy supported=0x%*pb\n", 3658 __ETHTOOL_LINK_MODE_MASK_NBITS, 3659 lks->link_modes.supported); 3660 3661 if ((phy_data->conn_type & XGBE_CONN_TYPE_MDIO) && 3662 (phy_data->phydev_mode != XGBE_MDIO_MODE_NONE)) { 3663 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, 3664 phy_data->phydev_mode); 3665 if (ret) { 3666 dev_err(pdata->dev, 3667 "mdio port/clause not compatible (%d/%u)\n", 3668 phy_data->mdio_addr, phy_data->phydev_mode); 3669 return -EINVAL; 3670 } 3671 } 3672 3673 if (phy_data->redrv && !phy_data->redrv_if) { 3674 ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, 3675 XGBE_MDIO_MODE_CL22); 3676 if (ret) { 3677 dev_err(pdata->dev, 3678 "redriver mdio port not compatible (%u)\n", 3679 phy_data->redrv_addr); 3680 return -EINVAL; 3681 } 3682 } 3683 3684 phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; 3685 3686 /* Register for driving external PHYs */ 3687 mii = devm_mdiobus_alloc(pdata->dev); 3688 if (!mii) { 3689 dev_err(pdata->dev, "mdiobus_alloc failed\n"); 3690 return -ENOMEM; 3691 } 3692 3693 mii->priv = pdata; 3694 mii->name = "amd-xgbe-mii"; 3695 mii->read = xgbe_phy_mii_read_c22; 3696 mii->write = xgbe_phy_mii_write_c22; 3697 mii->read_c45 = xgbe_phy_mii_read_c45; 3698 mii->write_c45 = xgbe_phy_mii_write_c45; 3699 mii->parent = pdata->dev; 3700 mii->phy_mask = ~0; 3701 snprintf(mii->id, sizeof(mii->id), "%s", dev_name(pdata->dev)); 3702 ret = mdiobus_register(mii); 3703 if (ret) { 3704 dev_err(pdata->dev, "mdiobus_register failed\n"); 3705 return ret; 3706 } 3707 phy_data->mii = mii; 3708 3709 return 0; 3710 } 3711 3712 void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if) 3713 { 3714 struct xgbe_phy_impl_if *phy_impl = &phy_if->phy_impl; 3715 3716 phy_impl->init = xgbe_phy_init; 3717 phy_impl->exit = xgbe_phy_exit; 3718 3719 phy_impl->reset = xgbe_phy_reset; 3720 phy_impl->start = xgbe_phy_start; 3721 phy_impl->stop = xgbe_phy_stop; 3722 3723 phy_impl->link_status = xgbe_phy_link_status; 3724 3725 phy_impl->valid_speed = xgbe_phy_valid_speed; 3726 3727 phy_impl->use_mode = xgbe_phy_use_mode; 3728 phy_impl->set_mode = xgbe_phy_set_mode; 3729 phy_impl->get_mode = xgbe_phy_get_mode; 3730 phy_impl->switch_mode = xgbe_phy_switch_mode; 3731 phy_impl->cur_mode = xgbe_phy_cur_mode; 3732 3733 phy_impl->an_mode = xgbe_phy_an_mode; 3734 3735 phy_impl->an_config = xgbe_phy_an_config; 3736 3737 phy_impl->an_advertising = xgbe_phy_an_advertising; 3738 3739 phy_impl->an_outcome = xgbe_phy_an_outcome; 3740 3741 phy_impl->an_pre = xgbe_phy_an_pre; 3742 phy_impl->an_post = xgbe_phy_an_post; 3743 3744 phy_impl->kr_training_pre = xgbe_phy_kr_training_pre; 3745 phy_impl->kr_training_post = xgbe_phy_kr_training_post; 3746 3747 phy_impl->module_info = xgbe_phy_module_info; 3748 phy_impl->module_eeprom = xgbe_phy_module_eeprom; 3749 } 3750