1 /****************************************************************************** 2 3 Copyright (c) 2001-2013, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Redistributions in binary form must reproduce the above copyright 13 notice, this list of conditions and the following disclaimer in the 14 documentation and/or other materials provided with the distribution. 15 16 3. Neither the name of the Intel Corporation nor the names of its 17 contributors may be used to endorse or promote products derived from 18 this software without specific prior written permission. 19 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32 ******************************************************************************/ 33 /*$FreeBSD$*/ 34 35 #include "e1000_api.h" 36 37 static s32 e1000_wait_autoneg(struct e1000_hw *hw); 38 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset, 39 u16 *data, bool read, bool page_set); 40 static u32 e1000_get_phy_addr_for_hv_page(u32 page); 41 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset, 42 u16 *data, bool read); 43 44 /* Cable length tables */ 45 static const u16 e1000_m88_cable_length_table[] = { 46 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED }; 47 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \ 48 (sizeof(e1000_m88_cable_length_table) / \ 49 sizeof(e1000_m88_cable_length_table[0])) 50 51 static const u16 e1000_igp_2_cable_length_table[] = { 52 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21, 0, 0, 0, 3, 53 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 6, 10, 14, 18, 22, 54 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61, 21, 26, 31, 35, 40, 55 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82, 40, 45, 51, 56, 61, 56 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104, 60, 66, 72, 77, 82, 57 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121, 83, 89, 95, 58 100, 105, 109, 113, 116, 119, 122, 124, 104, 109, 114, 118, 121, 59 124}; 60 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \ 61 (sizeof(e1000_igp_2_cable_length_table) / \ 62 sizeof(e1000_igp_2_cable_length_table[0])) 63 64 /** 65 * e1000_init_phy_ops_generic - Initialize PHY function pointers 66 * @hw: pointer to the HW structure 67 * 68 * Setups up the function pointers to no-op functions 69 **/ 70 void e1000_init_phy_ops_generic(struct e1000_hw *hw) 71 { 72 struct e1000_phy_info *phy = &hw->phy; 73 DEBUGFUNC("e1000_init_phy_ops_generic"); 74 75 /* Initialize function pointers */ 76 phy->ops.init_params = e1000_null_ops_generic; 77 phy->ops.acquire = e1000_null_ops_generic; 78 phy->ops.check_polarity = e1000_null_ops_generic; 79 phy->ops.check_reset_block = e1000_null_ops_generic; 80 phy->ops.commit = e1000_null_ops_generic; 81 phy->ops.force_speed_duplex = e1000_null_ops_generic; 82 phy->ops.get_cfg_done = e1000_null_ops_generic; 83 phy->ops.get_cable_length = e1000_null_ops_generic; 84 phy->ops.get_info = e1000_null_ops_generic; 85 phy->ops.set_page = e1000_null_set_page; 86 phy->ops.read_reg = e1000_null_read_reg; 87 phy->ops.read_reg_locked = e1000_null_read_reg; 88 phy->ops.read_reg_page = e1000_null_read_reg; 89 phy->ops.release = e1000_null_phy_generic; 90 phy->ops.reset = e1000_null_ops_generic; 91 phy->ops.set_d0_lplu_state = e1000_null_lplu_state; 92 phy->ops.set_d3_lplu_state = e1000_null_lplu_state; 93 phy->ops.write_reg = e1000_null_write_reg; 94 phy->ops.write_reg_locked = e1000_null_write_reg; 95 phy->ops.write_reg_page = e1000_null_write_reg; 96 phy->ops.power_up = e1000_null_phy_generic; 97 phy->ops.power_down = e1000_null_phy_generic; 98 phy->ops.read_i2c_byte = e1000_read_i2c_byte_null; 99 phy->ops.write_i2c_byte = e1000_write_i2c_byte_null; 100 phy->ops.cfg_on_link_up = e1000_null_ops_generic; 101 } 102 103 /** 104 * e1000_null_set_page - No-op function, return 0 105 * @hw: pointer to the HW structure 106 **/ 107 s32 e1000_null_set_page(struct e1000_hw E1000_UNUSEDARG *hw, 108 u16 E1000_UNUSEDARG data) 109 { 110 DEBUGFUNC("e1000_null_set_page"); 111 return E1000_SUCCESS; 112 } 113 114 /** 115 * e1000_null_read_reg - No-op function, return 0 116 * @hw: pointer to the HW structure 117 **/ 118 s32 e1000_null_read_reg(struct e1000_hw E1000_UNUSEDARG *hw, 119 u32 E1000_UNUSEDARG offset, u16 E1000_UNUSEDARG *data) 120 { 121 DEBUGFUNC("e1000_null_read_reg"); 122 return E1000_SUCCESS; 123 } 124 125 /** 126 * e1000_null_phy_generic - No-op function, return void 127 * @hw: pointer to the HW structure 128 **/ 129 void e1000_null_phy_generic(struct e1000_hw E1000_UNUSEDARG *hw) 130 { 131 DEBUGFUNC("e1000_null_phy_generic"); 132 return; 133 } 134 135 /** 136 * e1000_null_lplu_state - No-op function, return 0 137 * @hw: pointer to the HW structure 138 **/ 139 s32 e1000_null_lplu_state(struct e1000_hw E1000_UNUSEDARG *hw, 140 bool E1000_UNUSEDARG active) 141 { 142 DEBUGFUNC("e1000_null_lplu_state"); 143 return E1000_SUCCESS; 144 } 145 146 /** 147 * e1000_null_write_reg - No-op function, return 0 148 * @hw: pointer to the HW structure 149 **/ 150 s32 e1000_null_write_reg(struct e1000_hw E1000_UNUSEDARG *hw, 151 u32 E1000_UNUSEDARG offset, u16 E1000_UNUSEDARG data) 152 { 153 DEBUGFUNC("e1000_null_write_reg"); 154 return E1000_SUCCESS; 155 } 156 157 /** 158 * e1000_read_i2c_byte_null - No-op function, return 0 159 * @hw: pointer to hardware structure 160 * @byte_offset: byte offset to write 161 * @dev_addr: device address 162 * @data: data value read 163 * 164 **/ 165 s32 e1000_read_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw, 166 u8 E1000_UNUSEDARG byte_offset, 167 u8 E1000_UNUSEDARG dev_addr, 168 u8 E1000_UNUSEDARG *data) 169 { 170 DEBUGFUNC("e1000_read_i2c_byte_null"); 171 return E1000_SUCCESS; 172 } 173 174 /** 175 * e1000_write_i2c_byte_null - No-op function, return 0 176 * @hw: pointer to hardware structure 177 * @byte_offset: byte offset to write 178 * @dev_addr: device address 179 * @data: data value to write 180 * 181 **/ 182 s32 e1000_write_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw, 183 u8 E1000_UNUSEDARG byte_offset, 184 u8 E1000_UNUSEDARG dev_addr, 185 u8 E1000_UNUSEDARG data) 186 { 187 DEBUGFUNC("e1000_write_i2c_byte_null"); 188 return E1000_SUCCESS; 189 } 190 191 /** 192 * e1000_check_reset_block_generic - Check if PHY reset is blocked 193 * @hw: pointer to the HW structure 194 * 195 * Read the PHY management control register and check whether a PHY reset 196 * is blocked. If a reset is not blocked return E1000_SUCCESS, otherwise 197 * return E1000_BLK_PHY_RESET (12). 198 **/ 199 s32 e1000_check_reset_block_generic(struct e1000_hw *hw) 200 { 201 u32 manc; 202 203 DEBUGFUNC("e1000_check_reset_block"); 204 205 manc = E1000_READ_REG(hw, E1000_MANC); 206 207 return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ? 208 E1000_BLK_PHY_RESET : E1000_SUCCESS; 209 } 210 211 /** 212 * e1000_get_phy_id - Retrieve the PHY ID and revision 213 * @hw: pointer to the HW structure 214 * 215 * Reads the PHY registers and stores the PHY ID and possibly the PHY 216 * revision in the hardware structure. 217 **/ 218 s32 e1000_get_phy_id(struct e1000_hw *hw) 219 { 220 struct e1000_phy_info *phy = &hw->phy; 221 s32 ret_val = E1000_SUCCESS; 222 u16 phy_id; 223 u16 retry_count = 0; 224 225 DEBUGFUNC("e1000_get_phy_id"); 226 227 if (!phy->ops.read_reg) 228 return E1000_SUCCESS; 229 230 while (retry_count < 2) { 231 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id); 232 if (ret_val) 233 return ret_val; 234 235 phy->id = (u32)(phy_id << 16); 236 usec_delay(20); 237 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id); 238 if (ret_val) 239 return ret_val; 240 241 phy->id |= (u32)(phy_id & PHY_REVISION_MASK); 242 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK); 243 244 if (phy->id != 0 && phy->id != PHY_REVISION_MASK) 245 return E1000_SUCCESS; 246 247 retry_count++; 248 } 249 250 return E1000_SUCCESS; 251 } 252 253 /** 254 * e1000_phy_reset_dsp_generic - Reset PHY DSP 255 * @hw: pointer to the HW structure 256 * 257 * Reset the digital signal processor. 258 **/ 259 s32 e1000_phy_reset_dsp_generic(struct e1000_hw *hw) 260 { 261 s32 ret_val; 262 263 DEBUGFUNC("e1000_phy_reset_dsp_generic"); 264 265 if (!hw->phy.ops.write_reg) 266 return E1000_SUCCESS; 267 268 ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1); 269 if (ret_val) 270 return ret_val; 271 272 return hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0); 273 } 274 275 /** 276 * e1000_read_phy_reg_mdic - Read MDI control register 277 * @hw: pointer to the HW structure 278 * @offset: register offset to be read 279 * @data: pointer to the read data 280 * 281 * Reads the MDI control register in the PHY at offset and stores the 282 * information read to data. 283 **/ 284 s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) 285 { 286 struct e1000_phy_info *phy = &hw->phy; 287 u32 i, mdic = 0; 288 289 DEBUGFUNC("e1000_read_phy_reg_mdic"); 290 291 if (offset > MAX_PHY_REG_ADDRESS) { 292 DEBUGOUT1("PHY Address %d is out of range\n", offset); 293 return -E1000_ERR_PARAM; 294 } 295 296 /* Set up Op-code, Phy Address, and register offset in the MDI 297 * Control register. The MAC will take care of interfacing with the 298 * PHY to retrieve the desired data. 299 */ 300 mdic = ((offset << E1000_MDIC_REG_SHIFT) | 301 (phy->addr << E1000_MDIC_PHY_SHIFT) | 302 (E1000_MDIC_OP_READ)); 303 304 E1000_WRITE_REG(hw, E1000_MDIC, mdic); 305 306 /* Poll the ready bit to see if the MDI read completed 307 * Increasing the time out as testing showed failures with 308 * the lower time out 309 */ 310 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) { 311 usec_delay_irq(50); 312 mdic = E1000_READ_REG(hw, E1000_MDIC); 313 if (mdic & E1000_MDIC_READY) 314 break; 315 } 316 if (!(mdic & E1000_MDIC_READY)) { 317 DEBUGOUT("MDI Read did not complete\n"); 318 return -E1000_ERR_PHY; 319 } 320 if (mdic & E1000_MDIC_ERROR) { 321 DEBUGOUT("MDI Error\n"); 322 return -E1000_ERR_PHY; 323 } 324 if (((mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT) != offset) { 325 DEBUGOUT2("MDI Read offset error - requested %d, returned %d\n", 326 offset, 327 (mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT); 328 return -E1000_ERR_PHY; 329 } 330 *data = (u16) mdic; 331 332 /* Allow some time after each MDIC transaction to avoid 333 * reading duplicate data in the next MDIC transaction. 334 */ 335 if (hw->mac.type == e1000_pch2lan) 336 usec_delay_irq(100); 337 338 return E1000_SUCCESS; 339 } 340 341 /** 342 * e1000_write_phy_reg_mdic - Write MDI control register 343 * @hw: pointer to the HW structure 344 * @offset: register offset to write to 345 * @data: data to write to register at offset 346 * 347 * Writes data to MDI control register in the PHY at offset. 348 **/ 349 s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data) 350 { 351 struct e1000_phy_info *phy = &hw->phy; 352 u32 i, mdic = 0; 353 354 DEBUGFUNC("e1000_write_phy_reg_mdic"); 355 356 if (offset > MAX_PHY_REG_ADDRESS) { 357 DEBUGOUT1("PHY Address %d is out of range\n", offset); 358 return -E1000_ERR_PARAM; 359 } 360 361 /* Set up Op-code, Phy Address, and register offset in the MDI 362 * Control register. The MAC will take care of interfacing with the 363 * PHY to retrieve the desired data. 364 */ 365 mdic = (((u32)data) | 366 (offset << E1000_MDIC_REG_SHIFT) | 367 (phy->addr << E1000_MDIC_PHY_SHIFT) | 368 (E1000_MDIC_OP_WRITE)); 369 370 E1000_WRITE_REG(hw, E1000_MDIC, mdic); 371 372 /* Poll the ready bit to see if the MDI read completed 373 * Increasing the time out as testing showed failures with 374 * the lower time out 375 */ 376 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) { 377 usec_delay_irq(50); 378 mdic = E1000_READ_REG(hw, E1000_MDIC); 379 if (mdic & E1000_MDIC_READY) 380 break; 381 } 382 if (!(mdic & E1000_MDIC_READY)) { 383 DEBUGOUT("MDI Write did not complete\n"); 384 return -E1000_ERR_PHY; 385 } 386 if (mdic & E1000_MDIC_ERROR) { 387 DEBUGOUT("MDI Error\n"); 388 return -E1000_ERR_PHY; 389 } 390 if (((mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT) != offset) { 391 DEBUGOUT2("MDI Write offset error - requested %d, returned %d\n", 392 offset, 393 (mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT); 394 return -E1000_ERR_PHY; 395 } 396 397 /* Allow some time after each MDIC transaction to avoid 398 * reading duplicate data in the next MDIC transaction. 399 */ 400 if (hw->mac.type == e1000_pch2lan) 401 usec_delay_irq(100); 402 403 return E1000_SUCCESS; 404 } 405 406 /** 407 * e1000_read_phy_reg_i2c - Read PHY register using i2c 408 * @hw: pointer to the HW structure 409 * @offset: register offset to be read 410 * @data: pointer to the read data 411 * 412 * Reads the PHY register at offset using the i2c interface and stores the 413 * retrieved information in data. 414 **/ 415 s32 e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data) 416 { 417 struct e1000_phy_info *phy = &hw->phy; 418 u32 i, i2ccmd = 0; 419 420 DEBUGFUNC("e1000_read_phy_reg_i2c"); 421 422 /* Set up Op-code, Phy Address, and register address in the I2CCMD 423 * register. The MAC will take care of interfacing with the 424 * PHY to retrieve the desired data. 425 */ 426 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 427 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | 428 (E1000_I2CCMD_OPCODE_READ)); 429 430 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 431 432 /* Poll the ready bit to see if the I2C read completed */ 433 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 434 usec_delay(50); 435 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); 436 if (i2ccmd & E1000_I2CCMD_READY) 437 break; 438 } 439 if (!(i2ccmd & E1000_I2CCMD_READY)) { 440 DEBUGOUT("I2CCMD Read did not complete\n"); 441 return -E1000_ERR_PHY; 442 } 443 if (i2ccmd & E1000_I2CCMD_ERROR) { 444 DEBUGOUT("I2CCMD Error bit set\n"); 445 return -E1000_ERR_PHY; 446 } 447 448 /* Need to byte-swap the 16-bit value. */ 449 *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00); 450 451 return E1000_SUCCESS; 452 } 453 454 /** 455 * e1000_write_phy_reg_i2c - Write PHY register using i2c 456 * @hw: pointer to the HW structure 457 * @offset: register offset to write to 458 * @data: data to write at register offset 459 * 460 * Writes the data to PHY register at the offset using the i2c interface. 461 **/ 462 s32 e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data) 463 { 464 struct e1000_phy_info *phy = &hw->phy; 465 u32 i, i2ccmd = 0; 466 u16 phy_data_swapped; 467 468 DEBUGFUNC("e1000_write_phy_reg_i2c"); 469 470 /* Prevent overwritting SFP I2C EEPROM which is at A0 address.*/ 471 if ((hw->phy.addr == 0) || (hw->phy.addr > 7)) { 472 DEBUGOUT1("PHY I2C Address %d is out of range.\n", 473 hw->phy.addr); 474 return -E1000_ERR_CONFIG; 475 } 476 477 /* Swap the data bytes for the I2C interface */ 478 phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00); 479 480 /* Set up Op-code, Phy Address, and register address in the I2CCMD 481 * register. The MAC will take care of interfacing with the 482 * PHY to retrieve the desired data. 483 */ 484 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 485 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | 486 E1000_I2CCMD_OPCODE_WRITE | 487 phy_data_swapped); 488 489 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 490 491 /* Poll the ready bit to see if the I2C read completed */ 492 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 493 usec_delay(50); 494 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); 495 if (i2ccmd & E1000_I2CCMD_READY) 496 break; 497 } 498 if (!(i2ccmd & E1000_I2CCMD_READY)) { 499 DEBUGOUT("I2CCMD Write did not complete\n"); 500 return -E1000_ERR_PHY; 501 } 502 if (i2ccmd & E1000_I2CCMD_ERROR) { 503 DEBUGOUT("I2CCMD Error bit set\n"); 504 return -E1000_ERR_PHY; 505 } 506 507 return E1000_SUCCESS; 508 } 509 510 /** 511 * e1000_read_sfp_data_byte - Reads SFP module data. 512 * @hw: pointer to the HW structure 513 * @offset: byte location offset to be read 514 * @data: read data buffer pointer 515 * 516 * Reads one byte from SFP module data stored 517 * in SFP resided EEPROM memory or SFP diagnostic area. 518 * Function should be called with 519 * E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access 520 * E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters 521 * access 522 **/ 523 s32 e1000_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data) 524 { 525 u32 i = 0; 526 u32 i2ccmd = 0; 527 u32 data_local = 0; 528 529 DEBUGFUNC("e1000_read_sfp_data_byte"); 530 531 if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) { 532 DEBUGOUT("I2CCMD command address exceeds upper limit\n"); 533 return -E1000_ERR_PHY; 534 } 535 536 /* Set up Op-code, EEPROM Address,in the I2CCMD 537 * register. The MAC will take care of interfacing with the 538 * EEPROM to retrieve the desired data. 539 */ 540 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 541 E1000_I2CCMD_OPCODE_READ); 542 543 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 544 545 /* Poll the ready bit to see if the I2C read completed */ 546 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 547 usec_delay(50); 548 data_local = E1000_READ_REG(hw, E1000_I2CCMD); 549 if (data_local & E1000_I2CCMD_READY) 550 break; 551 } 552 if (!(data_local & E1000_I2CCMD_READY)) { 553 DEBUGOUT("I2CCMD Read did not complete\n"); 554 return -E1000_ERR_PHY; 555 } 556 if (data_local & E1000_I2CCMD_ERROR) { 557 DEBUGOUT("I2CCMD Error bit set\n"); 558 return -E1000_ERR_PHY; 559 } 560 *data = (u8) data_local & 0xFF; 561 562 return E1000_SUCCESS; 563 } 564 565 /** 566 * e1000_write_sfp_data_byte - Writes SFP module data. 567 * @hw: pointer to the HW structure 568 * @offset: byte location offset to write to 569 * @data: data to write 570 * 571 * Writes one byte to SFP module data stored 572 * in SFP resided EEPROM memory or SFP diagnostic area. 573 * Function should be called with 574 * E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access 575 * E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters 576 * access 577 **/ 578 s32 e1000_write_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 data) 579 { 580 u32 i = 0; 581 u32 i2ccmd = 0; 582 u32 data_local = 0; 583 584 DEBUGFUNC("e1000_write_sfp_data_byte"); 585 586 if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) { 587 DEBUGOUT("I2CCMD command address exceeds upper limit\n"); 588 return -E1000_ERR_PHY; 589 } 590 /* The programming interface is 16 bits wide 591 * so we need to read the whole word first 592 * then update appropriate byte lane and write 593 * the updated word back. 594 */ 595 /* Set up Op-code, EEPROM Address,in the I2CCMD 596 * register. The MAC will take care of interfacing 597 * with an EEPROM to write the data given. 598 */ 599 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 600 E1000_I2CCMD_OPCODE_READ); 601 /* Set a command to read single word */ 602 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 603 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 604 usec_delay(50); 605 /* Poll the ready bit to see if lastly 606 * launched I2C operation completed 607 */ 608 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); 609 if (i2ccmd & E1000_I2CCMD_READY) { 610 /* Check if this is READ or WRITE phase */ 611 if ((i2ccmd & E1000_I2CCMD_OPCODE_READ) == 612 E1000_I2CCMD_OPCODE_READ) { 613 /* Write the selected byte 614 * lane and update whole word 615 */ 616 data_local = i2ccmd & 0xFF00; 617 data_local |= data; 618 i2ccmd = ((offset << 619 E1000_I2CCMD_REG_ADDR_SHIFT) | 620 E1000_I2CCMD_OPCODE_WRITE | data_local); 621 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 622 } else { 623 break; 624 } 625 } 626 } 627 if (!(i2ccmd & E1000_I2CCMD_READY)) { 628 DEBUGOUT("I2CCMD Write did not complete\n"); 629 return -E1000_ERR_PHY; 630 } 631 if (i2ccmd & E1000_I2CCMD_ERROR) { 632 DEBUGOUT("I2CCMD Error bit set\n"); 633 return -E1000_ERR_PHY; 634 } 635 return E1000_SUCCESS; 636 } 637 638 /** 639 * e1000_read_phy_reg_m88 - Read m88 PHY register 640 * @hw: pointer to the HW structure 641 * @offset: register offset to be read 642 * @data: pointer to the read data 643 * 644 * Acquires semaphore, if necessary, then reads the PHY register at offset 645 * and storing the retrieved information in data. Release any acquired 646 * semaphores before exiting. 647 **/ 648 s32 e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data) 649 { 650 s32 ret_val; 651 652 DEBUGFUNC("e1000_read_phy_reg_m88"); 653 654 if (!hw->phy.ops.acquire) 655 return E1000_SUCCESS; 656 657 ret_val = hw->phy.ops.acquire(hw); 658 if (ret_val) 659 return ret_val; 660 661 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 662 data); 663 664 hw->phy.ops.release(hw); 665 666 return ret_val; 667 } 668 669 /** 670 * e1000_write_phy_reg_m88 - Write m88 PHY register 671 * @hw: pointer to the HW structure 672 * @offset: register offset to write to 673 * @data: data to write at register offset 674 * 675 * Acquires semaphore, if necessary, then writes the data to PHY register 676 * at the offset. Release any acquired semaphores before exiting. 677 **/ 678 s32 e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data) 679 { 680 s32 ret_val; 681 682 DEBUGFUNC("e1000_write_phy_reg_m88"); 683 684 if (!hw->phy.ops.acquire) 685 return E1000_SUCCESS; 686 687 ret_val = hw->phy.ops.acquire(hw); 688 if (ret_val) 689 return ret_val; 690 691 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 692 data); 693 694 hw->phy.ops.release(hw); 695 696 return ret_val; 697 } 698 699 /** 700 * e1000_set_page_igp - Set page as on IGP-like PHY(s) 701 * @hw: pointer to the HW structure 702 * @page: page to set (shifted left when necessary) 703 * 704 * Sets PHY page required for PHY register access. Assumes semaphore is 705 * already acquired. Note, this function sets phy.addr to 1 so the caller 706 * must set it appropriately (if necessary) after this function returns. 707 **/ 708 s32 e1000_set_page_igp(struct e1000_hw *hw, u16 page) 709 { 710 DEBUGFUNC("e1000_set_page_igp"); 711 712 DEBUGOUT1("Setting page 0x%x\n", page); 713 714 hw->phy.addr = 1; 715 716 return e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, page); 717 } 718 719 /** 720 * __e1000_read_phy_reg_igp - Read igp PHY register 721 * @hw: pointer to the HW structure 722 * @offset: register offset to be read 723 * @data: pointer to the read data 724 * @locked: semaphore has already been acquired or not 725 * 726 * Acquires semaphore, if necessary, then reads the PHY register at offset 727 * and stores the retrieved information in data. Release any acquired 728 * semaphores before exiting. 729 **/ 730 static s32 __e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data, 731 bool locked) 732 { 733 s32 ret_val = E1000_SUCCESS; 734 735 DEBUGFUNC("__e1000_read_phy_reg_igp"); 736 737 if (!locked) { 738 if (!hw->phy.ops.acquire) 739 return E1000_SUCCESS; 740 741 ret_val = hw->phy.ops.acquire(hw); 742 if (ret_val) 743 return ret_val; 744 } 745 746 if (offset > MAX_PHY_MULTI_PAGE_REG) 747 ret_val = e1000_write_phy_reg_mdic(hw, 748 IGP01E1000_PHY_PAGE_SELECT, 749 (u16)offset); 750 if (!ret_val) 751 ret_val = e1000_read_phy_reg_mdic(hw, 752 MAX_PHY_REG_ADDRESS & offset, 753 data); 754 if (!locked) 755 hw->phy.ops.release(hw); 756 757 return ret_val; 758 } 759 760 /** 761 * e1000_read_phy_reg_igp - Read igp PHY register 762 * @hw: pointer to the HW structure 763 * @offset: register offset to be read 764 * @data: pointer to the read data 765 * 766 * Acquires semaphore then reads the PHY register at offset and stores the 767 * retrieved information in data. 768 * Release the acquired semaphore before exiting. 769 **/ 770 s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data) 771 { 772 return __e1000_read_phy_reg_igp(hw, offset, data, FALSE); 773 } 774 775 /** 776 * e1000_read_phy_reg_igp_locked - Read igp PHY register 777 * @hw: pointer to the HW structure 778 * @offset: register offset to be read 779 * @data: pointer to the read data 780 * 781 * Reads the PHY register at offset and stores the retrieved information 782 * in data. Assumes semaphore already acquired. 783 **/ 784 s32 e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data) 785 { 786 return __e1000_read_phy_reg_igp(hw, offset, data, TRUE); 787 } 788 789 /** 790 * e1000_write_phy_reg_igp - Write igp PHY register 791 * @hw: pointer to the HW structure 792 * @offset: register offset to write to 793 * @data: data to write at register offset 794 * @locked: semaphore has already been acquired or not 795 * 796 * Acquires semaphore, if necessary, then writes the data to PHY register 797 * at the offset. Release any acquired semaphores before exiting. 798 **/ 799 static s32 __e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data, 800 bool locked) 801 { 802 s32 ret_val = E1000_SUCCESS; 803 804 DEBUGFUNC("e1000_write_phy_reg_igp"); 805 806 if (!locked) { 807 if (!hw->phy.ops.acquire) 808 return E1000_SUCCESS; 809 810 ret_val = hw->phy.ops.acquire(hw); 811 if (ret_val) 812 return ret_val; 813 } 814 815 if (offset > MAX_PHY_MULTI_PAGE_REG) 816 ret_val = e1000_write_phy_reg_mdic(hw, 817 IGP01E1000_PHY_PAGE_SELECT, 818 (u16)offset); 819 if (!ret_val) 820 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & 821 offset, 822 data); 823 if (!locked) 824 hw->phy.ops.release(hw); 825 826 return ret_val; 827 } 828 829 /** 830 * e1000_write_phy_reg_igp - Write igp PHY register 831 * @hw: pointer to the HW structure 832 * @offset: register offset to write to 833 * @data: data to write at register offset 834 * 835 * Acquires semaphore then writes the data to PHY register 836 * at the offset. Release any acquired semaphores before exiting. 837 **/ 838 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data) 839 { 840 return __e1000_write_phy_reg_igp(hw, offset, data, FALSE); 841 } 842 843 /** 844 * e1000_write_phy_reg_igp_locked - Write igp PHY register 845 * @hw: pointer to the HW structure 846 * @offset: register offset to write to 847 * @data: data to write at register offset 848 * 849 * Writes the data to PHY register at the offset. 850 * Assumes semaphore already acquired. 851 **/ 852 s32 e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data) 853 { 854 return __e1000_write_phy_reg_igp(hw, offset, data, TRUE); 855 } 856 857 /** 858 * __e1000_read_kmrn_reg - Read kumeran register 859 * @hw: pointer to the HW structure 860 * @offset: register offset to be read 861 * @data: pointer to the read data 862 * @locked: semaphore has already been acquired or not 863 * 864 * Acquires semaphore, if necessary. Then reads the PHY register at offset 865 * using the kumeran interface. The information retrieved is stored in data. 866 * Release any acquired semaphores before exiting. 867 **/ 868 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data, 869 bool locked) 870 { 871 u32 kmrnctrlsta; 872 873 DEBUGFUNC("__e1000_read_kmrn_reg"); 874 875 if (!locked) { 876 s32 ret_val = E1000_SUCCESS; 877 878 if (!hw->phy.ops.acquire) 879 return E1000_SUCCESS; 880 881 ret_val = hw->phy.ops.acquire(hw); 882 if (ret_val) 883 return ret_val; 884 } 885 886 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) & 887 E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN; 888 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta); 889 E1000_WRITE_FLUSH(hw); 890 891 usec_delay(2); 892 893 kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA); 894 *data = (u16)kmrnctrlsta; 895 896 if (!locked) 897 hw->phy.ops.release(hw); 898 899 return E1000_SUCCESS; 900 } 901 902 /** 903 * e1000_read_kmrn_reg_generic - Read kumeran register 904 * @hw: pointer to the HW structure 905 * @offset: register offset to be read 906 * @data: pointer to the read data 907 * 908 * Acquires semaphore then reads the PHY register at offset using the 909 * kumeran interface. The information retrieved is stored in data. 910 * Release the acquired semaphore before exiting. 911 **/ 912 s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data) 913 { 914 return __e1000_read_kmrn_reg(hw, offset, data, FALSE); 915 } 916 917 /** 918 * e1000_read_kmrn_reg_locked - Read kumeran register 919 * @hw: pointer to the HW structure 920 * @offset: register offset to be read 921 * @data: pointer to the read data 922 * 923 * Reads the PHY register at offset using the kumeran interface. The 924 * information retrieved is stored in data. 925 * Assumes semaphore already acquired. 926 **/ 927 s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data) 928 { 929 return __e1000_read_kmrn_reg(hw, offset, data, TRUE); 930 } 931 932 /** 933 * __e1000_write_kmrn_reg - Write kumeran register 934 * @hw: pointer to the HW structure 935 * @offset: register offset to write to 936 * @data: data to write at register offset 937 * @locked: semaphore has already been acquired or not 938 * 939 * Acquires semaphore, if necessary. Then write the data to PHY register 940 * at the offset using the kumeran interface. Release any acquired semaphores 941 * before exiting. 942 **/ 943 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data, 944 bool locked) 945 { 946 u32 kmrnctrlsta; 947 948 DEBUGFUNC("e1000_write_kmrn_reg_generic"); 949 950 if (!locked) { 951 s32 ret_val = E1000_SUCCESS; 952 953 if (!hw->phy.ops.acquire) 954 return E1000_SUCCESS; 955 956 ret_val = hw->phy.ops.acquire(hw); 957 if (ret_val) 958 return ret_val; 959 } 960 961 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) & 962 E1000_KMRNCTRLSTA_OFFSET) | data; 963 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta); 964 E1000_WRITE_FLUSH(hw); 965 966 usec_delay(2); 967 968 if (!locked) 969 hw->phy.ops.release(hw); 970 971 return E1000_SUCCESS; 972 } 973 974 /** 975 * e1000_write_kmrn_reg_generic - Write kumeran register 976 * @hw: pointer to the HW structure 977 * @offset: register offset to write to 978 * @data: data to write at register offset 979 * 980 * Acquires semaphore then writes the data to the PHY register at the offset 981 * using the kumeran interface. Release the acquired semaphore before exiting. 982 **/ 983 s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data) 984 { 985 return __e1000_write_kmrn_reg(hw, offset, data, FALSE); 986 } 987 988 /** 989 * e1000_write_kmrn_reg_locked - Write kumeran register 990 * @hw: pointer to the HW structure 991 * @offset: register offset to write to 992 * @data: data to write at register offset 993 * 994 * Write the data to PHY register at the offset using the kumeran interface. 995 * Assumes semaphore already acquired. 996 **/ 997 s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) 998 { 999 return __e1000_write_kmrn_reg(hw, offset, data, TRUE); 1000 } 1001 1002 /** 1003 * e1000_set_master_slave_mode - Setup PHY for Master/slave mode 1004 * @hw: pointer to the HW structure 1005 * 1006 * Sets up Master/slave mode 1007 **/ 1008 static s32 e1000_set_master_slave_mode(struct e1000_hw *hw) 1009 { 1010 s32 ret_val; 1011 u16 phy_data; 1012 1013 /* Resolve Master/Slave mode */ 1014 ret_val = hw->phy.ops.read_reg(hw, PHY_1000T_CTRL, &phy_data); 1015 if (ret_val) 1016 return ret_val; 1017 1018 /* load defaults for future use */ 1019 hw->phy.original_ms_type = (phy_data & CR_1000T_MS_ENABLE) ? 1020 ((phy_data & CR_1000T_MS_VALUE) ? 1021 e1000_ms_force_master : 1022 e1000_ms_force_slave) : e1000_ms_auto; 1023 1024 switch (hw->phy.ms_type) { 1025 case e1000_ms_force_master: 1026 phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE); 1027 break; 1028 case e1000_ms_force_slave: 1029 phy_data |= CR_1000T_MS_ENABLE; 1030 phy_data &= ~(CR_1000T_MS_VALUE); 1031 break; 1032 case e1000_ms_auto: 1033 phy_data &= ~CR_1000T_MS_ENABLE; 1034 /* fall-through */ 1035 default: 1036 break; 1037 } 1038 1039 return hw->phy.ops.write_reg(hw, PHY_1000T_CTRL, phy_data); 1040 } 1041 1042 /** 1043 * e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link 1044 * @hw: pointer to the HW structure 1045 * 1046 * Sets up Carrier-sense on Transmit and downshift values. 1047 **/ 1048 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) 1049 { 1050 s32 ret_val; 1051 u16 phy_data; 1052 1053 DEBUGFUNC("e1000_copper_link_setup_82577"); 1054 1055 if (hw->phy.type == e1000_phy_82580) { 1056 ret_val = hw->phy.ops.reset(hw); 1057 if (ret_val) { 1058 DEBUGOUT("Error resetting the PHY.\n"); 1059 return ret_val; 1060 } 1061 } 1062 1063 /* Enable CRS on Tx. This must be set for half-duplex operation. */ 1064 ret_val = hw->phy.ops.read_reg(hw, I82577_CFG_REG, &phy_data); 1065 if (ret_val) 1066 return ret_val; 1067 1068 phy_data |= I82577_CFG_ASSERT_CRS_ON_TX; 1069 1070 /* Enable downshift */ 1071 phy_data |= I82577_CFG_ENABLE_DOWNSHIFT; 1072 1073 ret_val = hw->phy.ops.write_reg(hw, I82577_CFG_REG, phy_data); 1074 if (ret_val) 1075 return ret_val; 1076 1077 /* Set MDI/MDIX mode */ 1078 ret_val = hw->phy.ops.read_reg(hw, I82577_PHY_CTRL_2, &phy_data); 1079 if (ret_val) 1080 return ret_val; 1081 phy_data &= ~I82577_PHY_CTRL2_MDIX_CFG_MASK; 1082 /* Options: 1083 * 0 - Auto (default) 1084 * 1 - MDI mode 1085 * 2 - MDI-X mode 1086 */ 1087 switch (hw->phy.mdix) { 1088 case 1: 1089 break; 1090 case 2: 1091 phy_data |= I82577_PHY_CTRL2_MANUAL_MDIX; 1092 break; 1093 case 0: 1094 default: 1095 phy_data |= I82577_PHY_CTRL2_AUTO_MDI_MDIX; 1096 break; 1097 } 1098 ret_val = hw->phy.ops.write_reg(hw, I82577_PHY_CTRL_2, phy_data); 1099 if (ret_val) 1100 return ret_val; 1101 1102 return e1000_set_master_slave_mode(hw); 1103 } 1104 1105 /** 1106 * e1000_copper_link_setup_m88 - Setup m88 PHY's for copper link 1107 * @hw: pointer to the HW structure 1108 * 1109 * Sets up MDI/MDI-X and polarity for m88 PHY's. If necessary, transmit clock 1110 * and downshift values are set also. 1111 **/ 1112 s32 e1000_copper_link_setup_m88(struct e1000_hw *hw) 1113 { 1114 struct e1000_phy_info *phy = &hw->phy; 1115 s32 ret_val; 1116 u16 phy_data; 1117 1118 DEBUGFUNC("e1000_copper_link_setup_m88"); 1119 1120 1121 /* Enable CRS on Tx. This must be set for half-duplex operation. */ 1122 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); 1123 if (ret_val) 1124 return ret_val; 1125 1126 /* For BM PHY this bit is downshift enable */ 1127 if (phy->type != e1000_phy_bm) 1128 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX; 1129 1130 /* Options: 1131 * MDI/MDI-X = 0 (default) 1132 * 0 - Auto for all speeds 1133 * 1 - MDI mode 1134 * 2 - MDI-X mode 1135 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes) 1136 */ 1137 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; 1138 1139 switch (phy->mdix) { 1140 case 1: 1141 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE; 1142 break; 1143 case 2: 1144 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE; 1145 break; 1146 case 3: 1147 phy_data |= M88E1000_PSCR_AUTO_X_1000T; 1148 break; 1149 case 0: 1150 default: 1151 phy_data |= M88E1000_PSCR_AUTO_X_MODE; 1152 break; 1153 } 1154 1155 /* Options: 1156 * disable_polarity_correction = 0 (default) 1157 * Automatic Correction for Reversed Cable Polarity 1158 * 0 - Disabled 1159 * 1 - Enabled 1160 */ 1161 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL; 1162 if (phy->disable_polarity_correction) 1163 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL; 1164 1165 /* Enable downshift on BM (disabled by default) */ 1166 if (phy->type == e1000_phy_bm) { 1167 /* For 82574/82583, first disable then enable downshift */ 1168 if (phy->id == BME1000_E_PHY_ID_R2) { 1169 phy_data &= ~BME1000_PSCR_ENABLE_DOWNSHIFT; 1170 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, 1171 phy_data); 1172 if (ret_val) 1173 return ret_val; 1174 /* Commit the changes. */ 1175 ret_val = phy->ops.commit(hw); 1176 if (ret_val) { 1177 DEBUGOUT("Error committing the PHY changes\n"); 1178 return ret_val; 1179 } 1180 } 1181 1182 phy_data |= BME1000_PSCR_ENABLE_DOWNSHIFT; 1183 } 1184 1185 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); 1186 if (ret_val) 1187 return ret_val; 1188 1189 if ((phy->type == e1000_phy_m88) && 1190 (phy->revision < E1000_REVISION_4) && 1191 (phy->id != BME1000_E_PHY_ID_R2)) { 1192 /* Force TX_CLK in the Extended PHY Specific Control Register 1193 * to 25MHz clock. 1194 */ 1195 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, 1196 &phy_data); 1197 if (ret_val) 1198 return ret_val; 1199 1200 phy_data |= M88E1000_EPSCR_TX_CLK_25; 1201 1202 if ((phy->revision == E1000_REVISION_2) && 1203 (phy->id == M88E1111_I_PHY_ID)) { 1204 /* 82573L PHY - set the downshift counter to 5x. */ 1205 phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK; 1206 phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X; 1207 } else { 1208 /* Configure Master and Slave downshift values */ 1209 phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK | 1210 M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK); 1211 phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X | 1212 M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X); 1213 } 1214 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, 1215 phy_data); 1216 if (ret_val) 1217 return ret_val; 1218 } 1219 1220 if ((phy->type == e1000_phy_bm) && (phy->id == BME1000_E_PHY_ID_R2)) { 1221 /* Set PHY page 0, register 29 to 0x0003 */ 1222 ret_val = phy->ops.write_reg(hw, 29, 0x0003); 1223 if (ret_val) 1224 return ret_val; 1225 1226 /* Set PHY page 0, register 30 to 0x0000 */ 1227 ret_val = phy->ops.write_reg(hw, 30, 0x0000); 1228 if (ret_val) 1229 return ret_val; 1230 } 1231 1232 /* Commit the changes. */ 1233 ret_val = phy->ops.commit(hw); 1234 if (ret_val) { 1235 DEBUGOUT("Error committing the PHY changes\n"); 1236 return ret_val; 1237 } 1238 1239 if (phy->type == e1000_phy_82578) { 1240 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, 1241 &phy_data); 1242 if (ret_val) 1243 return ret_val; 1244 1245 /* 82578 PHY - set the downshift count to 1x. */ 1246 phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE; 1247 phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK; 1248 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, 1249 phy_data); 1250 if (ret_val) 1251 return ret_val; 1252 } 1253 1254 return E1000_SUCCESS; 1255 } 1256 1257 /** 1258 * e1000_copper_link_setup_m88_gen2 - Setup m88 PHY's for copper link 1259 * @hw: pointer to the HW structure 1260 * 1261 * Sets up MDI/MDI-X and polarity for i347-AT4, m88e1322 and m88e1112 PHY's. 1262 * Also enables and sets the downshift parameters. 1263 **/ 1264 s32 e1000_copper_link_setup_m88_gen2(struct e1000_hw *hw) 1265 { 1266 struct e1000_phy_info *phy = &hw->phy; 1267 s32 ret_val; 1268 u16 phy_data; 1269 1270 DEBUGFUNC("e1000_copper_link_setup_m88_gen2"); 1271 1272 1273 /* Enable CRS on Tx. This must be set for half-duplex operation. */ 1274 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); 1275 if (ret_val) 1276 return ret_val; 1277 1278 /* Options: 1279 * MDI/MDI-X = 0 (default) 1280 * 0 - Auto for all speeds 1281 * 1 - MDI mode 1282 * 2 - MDI-X mode 1283 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes) 1284 */ 1285 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; 1286 1287 switch (phy->mdix) { 1288 case 1: 1289 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE; 1290 break; 1291 case 2: 1292 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE; 1293 break; 1294 case 3: 1295 /* M88E1112 does not support this mode) */ 1296 if (phy->id != M88E1112_E_PHY_ID) { 1297 phy_data |= M88E1000_PSCR_AUTO_X_1000T; 1298 break; 1299 } 1300 case 0: 1301 default: 1302 phy_data |= M88E1000_PSCR_AUTO_X_MODE; 1303 break; 1304 } 1305 1306 /* Options: 1307 * disable_polarity_correction = 0 (default) 1308 * Automatic Correction for Reversed Cable Polarity 1309 * 0 - Disabled 1310 * 1 - Enabled 1311 */ 1312 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL; 1313 if (phy->disable_polarity_correction) 1314 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL; 1315 1316 /* Enable downshift and setting it to X6 */ 1317 if (phy->id == M88E1543_E_PHY_ID) { 1318 phy_data &= ~I347AT4_PSCR_DOWNSHIFT_ENABLE; 1319 ret_val = 1320 phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); 1321 if (ret_val) 1322 return ret_val; 1323 1324 ret_val = phy->ops.commit(hw); 1325 if (ret_val) { 1326 DEBUGOUT("Error committing the PHY changes\n"); 1327 return ret_val; 1328 } 1329 } 1330 1331 phy_data &= ~I347AT4_PSCR_DOWNSHIFT_MASK; 1332 phy_data |= I347AT4_PSCR_DOWNSHIFT_6X; 1333 phy_data |= I347AT4_PSCR_DOWNSHIFT_ENABLE; 1334 1335 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); 1336 if (ret_val) 1337 return ret_val; 1338 1339 /* Commit the changes. */ 1340 ret_val = phy->ops.commit(hw); 1341 if (ret_val) { 1342 DEBUGOUT("Error committing the PHY changes\n"); 1343 return ret_val; 1344 } 1345 1346 ret_val = e1000_set_master_slave_mode(hw); 1347 if (ret_val) 1348 return ret_val; 1349 1350 return E1000_SUCCESS; 1351 } 1352 1353 /** 1354 * e1000_copper_link_setup_igp - Setup igp PHY's for copper link 1355 * @hw: pointer to the HW structure 1356 * 1357 * Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for 1358 * igp PHY's. 1359 **/ 1360 s32 e1000_copper_link_setup_igp(struct e1000_hw *hw) 1361 { 1362 struct e1000_phy_info *phy = &hw->phy; 1363 s32 ret_val; 1364 u16 data; 1365 1366 DEBUGFUNC("e1000_copper_link_setup_igp"); 1367 1368 1369 ret_val = hw->phy.ops.reset(hw); 1370 if (ret_val) { 1371 DEBUGOUT("Error resetting the PHY.\n"); 1372 return ret_val; 1373 } 1374 1375 /* Wait 100ms for MAC to configure PHY from NVM settings, to avoid 1376 * timeout issues when LFS is enabled. 1377 */ 1378 msec_delay(100); 1379 1380 /* The NVM settings will configure LPLU in D3 for 1381 * non-IGP1 PHYs. 1382 */ 1383 if (phy->type == e1000_phy_igp) { 1384 /* disable lplu d3 during driver init */ 1385 ret_val = hw->phy.ops.set_d3_lplu_state(hw, FALSE); 1386 if (ret_val) { 1387 DEBUGOUT("Error Disabling LPLU D3\n"); 1388 return ret_val; 1389 } 1390 } 1391 1392 /* disable lplu d0 during driver init */ 1393 if (hw->phy.ops.set_d0_lplu_state) { 1394 ret_val = hw->phy.ops.set_d0_lplu_state(hw, FALSE); 1395 if (ret_val) { 1396 DEBUGOUT("Error Disabling LPLU D0\n"); 1397 return ret_val; 1398 } 1399 } 1400 /* Configure mdi-mdix settings */ 1401 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data); 1402 if (ret_val) 1403 return ret_val; 1404 1405 data &= ~IGP01E1000_PSCR_AUTO_MDIX; 1406 1407 switch (phy->mdix) { 1408 case 1: 1409 data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX; 1410 break; 1411 case 2: 1412 data |= IGP01E1000_PSCR_FORCE_MDI_MDIX; 1413 break; 1414 case 0: 1415 default: 1416 data |= IGP01E1000_PSCR_AUTO_MDIX; 1417 break; 1418 } 1419 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data); 1420 if (ret_val) 1421 return ret_val; 1422 1423 /* set auto-master slave resolution settings */ 1424 if (hw->mac.autoneg) { 1425 /* when autonegotiation advertisement is only 1000Mbps then we 1426 * should disable SmartSpeed and enable Auto MasterSlave 1427 * resolution as hardware default. 1428 */ 1429 if (phy->autoneg_advertised == ADVERTISE_1000_FULL) { 1430 /* Disable SmartSpeed */ 1431 ret_val = phy->ops.read_reg(hw, 1432 IGP01E1000_PHY_PORT_CONFIG, 1433 &data); 1434 if (ret_val) 1435 return ret_val; 1436 1437 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 1438 ret_val = phy->ops.write_reg(hw, 1439 IGP01E1000_PHY_PORT_CONFIG, 1440 data); 1441 if (ret_val) 1442 return ret_val; 1443 1444 /* Set auto Master/Slave resolution process */ 1445 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data); 1446 if (ret_val) 1447 return ret_val; 1448 1449 data &= ~CR_1000T_MS_ENABLE; 1450 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data); 1451 if (ret_val) 1452 return ret_val; 1453 } 1454 1455 ret_val = e1000_set_master_slave_mode(hw); 1456 } 1457 1458 return ret_val; 1459 } 1460 1461 /** 1462 * e1000_phy_setup_autoneg - Configure PHY for auto-negotiation 1463 * @hw: pointer to the HW structure 1464 * 1465 * Reads the MII auto-neg advertisement register and/or the 1000T control 1466 * register and if the PHY is already setup for auto-negotiation, then 1467 * return successful. Otherwise, setup advertisement and flow control to 1468 * the appropriate values for the wanted auto-negotiation. 1469 **/ 1470 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw) 1471 { 1472 struct e1000_phy_info *phy = &hw->phy; 1473 s32 ret_val; 1474 u16 mii_autoneg_adv_reg; 1475 u16 mii_1000t_ctrl_reg = 0; 1476 1477 DEBUGFUNC("e1000_phy_setup_autoneg"); 1478 1479 phy->autoneg_advertised &= phy->autoneg_mask; 1480 1481 /* Read the MII Auto-Neg Advertisement Register (Address 4). */ 1482 ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg); 1483 if (ret_val) 1484 return ret_val; 1485 1486 if (phy->autoneg_mask & ADVERTISE_1000_FULL) { 1487 /* Read the MII 1000Base-T Control Register (Address 9). */ 1488 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, 1489 &mii_1000t_ctrl_reg); 1490 if (ret_val) 1491 return ret_val; 1492 } 1493 1494 /* Need to parse both autoneg_advertised and fc and set up 1495 * the appropriate PHY registers. First we will parse for 1496 * autoneg_advertised software override. Since we can advertise 1497 * a plethora of combinations, we need to check each bit 1498 * individually. 1499 */ 1500 1501 /* First we clear all the 10/100 mb speed bits in the Auto-Neg 1502 * Advertisement Register (Address 4) and the 1000 mb speed bits in 1503 * the 1000Base-T Control Register (Address 9). 1504 */ 1505 mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS | 1506 NWAY_AR_100TX_HD_CAPS | 1507 NWAY_AR_10T_FD_CAPS | 1508 NWAY_AR_10T_HD_CAPS); 1509 mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS); 1510 1511 DEBUGOUT1("autoneg_advertised %x\n", phy->autoneg_advertised); 1512 1513 /* Do we want to advertise 10 Mb Half Duplex? */ 1514 if (phy->autoneg_advertised & ADVERTISE_10_HALF) { 1515 DEBUGOUT("Advertise 10mb Half duplex\n"); 1516 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS; 1517 } 1518 1519 /* Do we want to advertise 10 Mb Full Duplex? */ 1520 if (phy->autoneg_advertised & ADVERTISE_10_FULL) { 1521 DEBUGOUT("Advertise 10mb Full duplex\n"); 1522 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS; 1523 } 1524 1525 /* Do we want to advertise 100 Mb Half Duplex? */ 1526 if (phy->autoneg_advertised & ADVERTISE_100_HALF) { 1527 DEBUGOUT("Advertise 100mb Half duplex\n"); 1528 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS; 1529 } 1530 1531 /* Do we want to advertise 100 Mb Full Duplex? */ 1532 if (phy->autoneg_advertised & ADVERTISE_100_FULL) { 1533 DEBUGOUT("Advertise 100mb Full duplex\n"); 1534 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS; 1535 } 1536 1537 /* We do not allow the Phy to advertise 1000 Mb Half Duplex */ 1538 if (phy->autoneg_advertised & ADVERTISE_1000_HALF) 1539 DEBUGOUT("Advertise 1000mb Half duplex request denied!\n"); 1540 1541 /* Do we want to advertise 1000 Mb Full Duplex? */ 1542 if (phy->autoneg_advertised & ADVERTISE_1000_FULL) { 1543 DEBUGOUT("Advertise 1000mb Full duplex\n"); 1544 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS; 1545 } 1546 1547 /* Check for a software override of the flow control settings, and 1548 * setup the PHY advertisement registers accordingly. If 1549 * auto-negotiation is enabled, then software will have to set the 1550 * "PAUSE" bits to the correct value in the Auto-Negotiation 1551 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto- 1552 * negotiation. 1553 * 1554 * The possible values of the "fc" parameter are: 1555 * 0: Flow control is completely disabled 1556 * 1: Rx flow control is enabled (we can receive pause frames 1557 * but not send pause frames). 1558 * 2: Tx flow control is enabled (we can send pause frames 1559 * but we do not support receiving pause frames). 1560 * 3: Both Rx and Tx flow control (symmetric) are enabled. 1561 * other: No software override. The flow control configuration 1562 * in the EEPROM is used. 1563 */ 1564 switch (hw->fc.current_mode) { 1565 case e1000_fc_none: 1566 /* Flow control (Rx & Tx) is completely disabled by a 1567 * software over-ride. 1568 */ 1569 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE); 1570 break; 1571 case e1000_fc_rx_pause: 1572 /* Rx Flow control is enabled, and Tx Flow control is 1573 * disabled, by a software over-ride. 1574 * 1575 * Since there really isn't a way to advertise that we are 1576 * capable of Rx Pause ONLY, we will advertise that we 1577 * support both symmetric and asymmetric Rx PAUSE. Later 1578 * (in e1000_config_fc_after_link_up) we will disable the 1579 * hw's ability to send PAUSE frames. 1580 */ 1581 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE); 1582 break; 1583 case e1000_fc_tx_pause: 1584 /* Tx Flow control is enabled, and Rx Flow control is 1585 * disabled, by a software over-ride. 1586 */ 1587 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR; 1588 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE; 1589 break; 1590 case e1000_fc_full: 1591 /* Flow control (both Rx and Tx) is enabled by a software 1592 * over-ride. 1593 */ 1594 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE); 1595 break; 1596 default: 1597 DEBUGOUT("Flow control param set incorrectly\n"); 1598 return -E1000_ERR_CONFIG; 1599 } 1600 1601 ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg); 1602 if (ret_val) 1603 return ret_val; 1604 1605 DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg); 1606 1607 if (phy->autoneg_mask & ADVERTISE_1000_FULL) 1608 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, 1609 mii_1000t_ctrl_reg); 1610 1611 return ret_val; 1612 } 1613 1614 /** 1615 * e1000_copper_link_autoneg - Setup/Enable autoneg for copper link 1616 * @hw: pointer to the HW structure 1617 * 1618 * Performs initial bounds checking on autoneg advertisement parameter, then 1619 * configure to advertise the full capability. Setup the PHY to autoneg 1620 * and restart the negotiation process between the link partner. If 1621 * autoneg_wait_to_complete, then wait for autoneg to complete before exiting. 1622 **/ 1623 s32 e1000_copper_link_autoneg(struct e1000_hw *hw) 1624 { 1625 struct e1000_phy_info *phy = &hw->phy; 1626 s32 ret_val; 1627 u16 phy_ctrl; 1628 1629 DEBUGFUNC("e1000_copper_link_autoneg"); 1630 1631 /* Perform some bounds checking on the autoneg advertisement 1632 * parameter. 1633 */ 1634 phy->autoneg_advertised &= phy->autoneg_mask; 1635 1636 /* If autoneg_advertised is zero, we assume it was not defaulted 1637 * by the calling code so we set to advertise full capability. 1638 */ 1639 if (!phy->autoneg_advertised) 1640 phy->autoneg_advertised = phy->autoneg_mask; 1641 1642 DEBUGOUT("Reconfiguring auto-neg advertisement params\n"); 1643 ret_val = e1000_phy_setup_autoneg(hw); 1644 if (ret_val) { 1645 DEBUGOUT("Error Setting up Auto-Negotiation\n"); 1646 return ret_val; 1647 } 1648 DEBUGOUT("Restarting Auto-Neg\n"); 1649 1650 /* Restart auto-negotiation by setting the Auto Neg Enable bit and 1651 * the Auto Neg Restart bit in the PHY control register. 1652 */ 1653 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl); 1654 if (ret_val) 1655 return ret_val; 1656 1657 phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG); 1658 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl); 1659 if (ret_val) 1660 return ret_val; 1661 1662 /* Does the user want to wait for Auto-Neg to complete here, or 1663 * check at a later time (for example, callback routine). 1664 */ 1665 if (phy->autoneg_wait_to_complete) { 1666 ret_val = e1000_wait_autoneg(hw); 1667 if (ret_val) { 1668 DEBUGOUT("Error while waiting for autoneg to complete\n"); 1669 return ret_val; 1670 } 1671 } 1672 1673 hw->mac.get_link_status = TRUE; 1674 1675 return ret_val; 1676 } 1677 1678 /** 1679 * e1000_setup_copper_link_generic - Configure copper link settings 1680 * @hw: pointer to the HW structure 1681 * 1682 * Calls the appropriate function to configure the link for auto-neg or forced 1683 * speed and duplex. Then we check for link, once link is established calls 1684 * to configure collision distance and flow control are called. If link is 1685 * not established, we return -E1000_ERR_PHY (-2). 1686 **/ 1687 s32 e1000_setup_copper_link_generic(struct e1000_hw *hw) 1688 { 1689 s32 ret_val; 1690 bool link; 1691 1692 DEBUGFUNC("e1000_setup_copper_link_generic"); 1693 1694 if (hw->mac.autoneg) { 1695 /* Setup autoneg and flow control advertisement and perform 1696 * autonegotiation. 1697 */ 1698 ret_val = e1000_copper_link_autoneg(hw); 1699 if (ret_val) 1700 return ret_val; 1701 } else { 1702 /* PHY will be set to 10H, 10F, 100H or 100F 1703 * depending on user settings. 1704 */ 1705 DEBUGOUT("Forcing Speed and Duplex\n"); 1706 ret_val = hw->phy.ops.force_speed_duplex(hw); 1707 if (ret_val) { 1708 DEBUGOUT("Error Forcing Speed and Duplex\n"); 1709 return ret_val; 1710 } 1711 } 1712 1713 /* Check link status. Wait up to 100 microseconds for link to become 1714 * valid. 1715 */ 1716 ret_val = e1000_phy_has_link_generic(hw, COPPER_LINK_UP_LIMIT, 10, 1717 &link); 1718 if (ret_val) 1719 return ret_val; 1720 1721 if (link) { 1722 DEBUGOUT("Valid link established!!!\n"); 1723 hw->mac.ops.config_collision_dist(hw); 1724 ret_val = e1000_config_fc_after_link_up_generic(hw); 1725 } else { 1726 DEBUGOUT("Unable to establish link!!!\n"); 1727 } 1728 1729 return ret_val; 1730 } 1731 1732 /** 1733 * e1000_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY 1734 * @hw: pointer to the HW structure 1735 * 1736 * Calls the PHY setup function to force speed and duplex. Clears the 1737 * auto-crossover to force MDI manually. Waits for link and returns 1738 * successful if link up is successful, else -E1000_ERR_PHY (-2). 1739 **/ 1740 s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw) 1741 { 1742 struct e1000_phy_info *phy = &hw->phy; 1743 s32 ret_val; 1744 u16 phy_data; 1745 bool link; 1746 1747 DEBUGFUNC("e1000_phy_force_speed_duplex_igp"); 1748 1749 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); 1750 if (ret_val) 1751 return ret_val; 1752 1753 e1000_phy_force_speed_duplex_setup(hw, &phy_data); 1754 1755 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); 1756 if (ret_val) 1757 return ret_val; 1758 1759 /* Clear Auto-Crossover to force MDI manually. IGP requires MDI 1760 * forced whenever speed and duplex are forced. 1761 */ 1762 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data); 1763 if (ret_val) 1764 return ret_val; 1765 1766 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX; 1767 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX; 1768 1769 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data); 1770 if (ret_val) 1771 return ret_val; 1772 1773 DEBUGOUT1("IGP PSCR: %X\n", phy_data); 1774 1775 usec_delay(1); 1776 1777 if (phy->autoneg_wait_to_complete) { 1778 DEBUGOUT("Waiting for forced speed/duplex link on IGP phy.\n"); 1779 1780 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1781 100000, &link); 1782 if (ret_val) 1783 return ret_val; 1784 1785 if (!link) 1786 DEBUGOUT("Link taking longer than expected.\n"); 1787 1788 /* Try once more */ 1789 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1790 100000, &link); 1791 } 1792 1793 return ret_val; 1794 } 1795 1796 /** 1797 * e1000_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY 1798 * @hw: pointer to the HW structure 1799 * 1800 * Calls the PHY setup function to force speed and duplex. Clears the 1801 * auto-crossover to force MDI manually. Resets the PHY to commit the 1802 * changes. If time expires while waiting for link up, we reset the DSP. 1803 * After reset, TX_CLK and CRS on Tx must be set. Return successful upon 1804 * successful completion, else return corresponding error code. 1805 **/ 1806 s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw) 1807 { 1808 struct e1000_phy_info *phy = &hw->phy; 1809 s32 ret_val; 1810 u16 phy_data; 1811 bool link; 1812 1813 DEBUGFUNC("e1000_phy_force_speed_duplex_m88"); 1814 1815 /* I210 and I211 devices support Auto-Crossover in forced operation. */ 1816 if (phy->type != e1000_phy_i210) { 1817 /* Clear Auto-Crossover to force MDI manually. M88E1000 1818 * requires MDI forced whenever speed and duplex are forced. 1819 */ 1820 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, 1821 &phy_data); 1822 if (ret_val) 1823 return ret_val; 1824 1825 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE; 1826 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, 1827 phy_data); 1828 if (ret_val) 1829 return ret_val; 1830 } 1831 1832 DEBUGOUT1("M88E1000 PSCR: %X\n", phy_data); 1833 1834 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); 1835 if (ret_val) 1836 return ret_val; 1837 1838 e1000_phy_force_speed_duplex_setup(hw, &phy_data); 1839 1840 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); 1841 if (ret_val) 1842 return ret_val; 1843 1844 /* Reset the phy to commit changes. */ 1845 ret_val = hw->phy.ops.commit(hw); 1846 if (ret_val) 1847 return ret_val; 1848 1849 if (phy->autoneg_wait_to_complete) { 1850 DEBUGOUT("Waiting for forced speed/duplex link on M88 phy.\n"); 1851 1852 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1853 100000, &link); 1854 if (ret_val) 1855 return ret_val; 1856 1857 if (!link) { 1858 bool reset_dsp = TRUE; 1859 1860 switch (hw->phy.id) { 1861 case I347AT4_E_PHY_ID: 1862 case M88E1340M_E_PHY_ID: 1863 case M88E1112_E_PHY_ID: 1864 case M88E1543_E_PHY_ID: 1865 case M88E1512_E_PHY_ID: 1866 case I210_I_PHY_ID: 1867 reset_dsp = FALSE; 1868 break; 1869 default: 1870 if (hw->phy.type != e1000_phy_m88) 1871 reset_dsp = FALSE; 1872 break; 1873 } 1874 1875 if (!reset_dsp) { 1876 DEBUGOUT("Link taking longer than expected.\n"); 1877 } else { 1878 /* We didn't get link. 1879 * Reset the DSP and cross our fingers. 1880 */ 1881 ret_val = phy->ops.write_reg(hw, 1882 M88E1000_PHY_PAGE_SELECT, 1883 0x001d); 1884 if (ret_val) 1885 return ret_val; 1886 ret_val = e1000_phy_reset_dsp_generic(hw); 1887 if (ret_val) 1888 return ret_val; 1889 } 1890 } 1891 1892 /* Try once more */ 1893 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1894 100000, &link); 1895 if (ret_val) 1896 return ret_val; 1897 } 1898 1899 if (hw->phy.type != e1000_phy_m88) 1900 return E1000_SUCCESS; 1901 1902 if (hw->phy.id == I347AT4_E_PHY_ID || 1903 hw->phy.id == M88E1340M_E_PHY_ID || 1904 hw->phy.id == M88E1112_E_PHY_ID) 1905 return E1000_SUCCESS; 1906 if (hw->phy.id == I210_I_PHY_ID) 1907 return E1000_SUCCESS; 1908 if ((hw->phy.id == M88E1543_E_PHY_ID) || 1909 (hw->phy.id == M88E1512_E_PHY_ID)) 1910 return E1000_SUCCESS; 1911 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); 1912 if (ret_val) 1913 return ret_val; 1914 1915 /* Resetting the phy means we need to re-force TX_CLK in the 1916 * Extended PHY Specific Control Register to 25MHz clock from 1917 * the reset value of 2.5MHz. 1918 */ 1919 phy_data |= M88E1000_EPSCR_TX_CLK_25; 1920 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); 1921 if (ret_val) 1922 return ret_val; 1923 1924 /* In addition, we must re-enable CRS on Tx for both half and full 1925 * duplex. 1926 */ 1927 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); 1928 if (ret_val) 1929 return ret_val; 1930 1931 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX; 1932 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); 1933 1934 return ret_val; 1935 } 1936 1937 /** 1938 * e1000_phy_force_speed_duplex_ife - Force PHY speed & duplex 1939 * @hw: pointer to the HW structure 1940 * 1941 * Forces the speed and duplex settings of the PHY. 1942 * This is a function pointer entry point only called by 1943 * PHY setup routines. 1944 **/ 1945 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw) 1946 { 1947 struct e1000_phy_info *phy = &hw->phy; 1948 s32 ret_val; 1949 u16 data; 1950 bool link; 1951 1952 DEBUGFUNC("e1000_phy_force_speed_duplex_ife"); 1953 1954 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &data); 1955 if (ret_val) 1956 return ret_val; 1957 1958 e1000_phy_force_speed_duplex_setup(hw, &data); 1959 1960 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, data); 1961 if (ret_val) 1962 return ret_val; 1963 1964 /* Disable MDI-X support for 10/100 */ 1965 ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data); 1966 if (ret_val) 1967 return ret_val; 1968 1969 data &= ~IFE_PMC_AUTO_MDIX; 1970 data &= ~IFE_PMC_FORCE_MDIX; 1971 1972 ret_val = phy->ops.write_reg(hw, IFE_PHY_MDIX_CONTROL, data); 1973 if (ret_val) 1974 return ret_val; 1975 1976 DEBUGOUT1("IFE PMC: %X\n", data); 1977 1978 usec_delay(1); 1979 1980 if (phy->autoneg_wait_to_complete) { 1981 DEBUGOUT("Waiting for forced speed/duplex link on IFE phy.\n"); 1982 1983 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1984 100000, &link); 1985 if (ret_val) 1986 return ret_val; 1987 1988 if (!link) 1989 DEBUGOUT("Link taking longer than expected.\n"); 1990 1991 /* Try once more */ 1992 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 1993 100000, &link); 1994 if (ret_val) 1995 return ret_val; 1996 } 1997 1998 return E1000_SUCCESS; 1999 } 2000 2001 /** 2002 * e1000_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex 2003 * @hw: pointer to the HW structure 2004 * @phy_ctrl: pointer to current value of PHY_CONTROL 2005 * 2006 * Forces speed and duplex on the PHY by doing the following: disable flow 2007 * control, force speed/duplex on the MAC, disable auto speed detection, 2008 * disable auto-negotiation, configure duplex, configure speed, configure 2009 * the collision distance, write configuration to CTRL register. The 2010 * caller must write to the PHY_CONTROL register for these settings to 2011 * take affect. 2012 **/ 2013 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl) 2014 { 2015 struct e1000_mac_info *mac = &hw->mac; 2016 u32 ctrl; 2017 2018 DEBUGFUNC("e1000_phy_force_speed_duplex_setup"); 2019 2020 /* Turn off flow control when forcing speed/duplex */ 2021 hw->fc.current_mode = e1000_fc_none; 2022 2023 /* Force speed/duplex on the mac */ 2024 ctrl = E1000_READ_REG(hw, E1000_CTRL); 2025 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX); 2026 ctrl &= ~E1000_CTRL_SPD_SEL; 2027 2028 /* Disable Auto Speed Detection */ 2029 ctrl &= ~E1000_CTRL_ASDE; 2030 2031 /* Disable autoneg on the phy */ 2032 *phy_ctrl &= ~MII_CR_AUTO_NEG_EN; 2033 2034 /* Forcing Full or Half Duplex? */ 2035 if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) { 2036 ctrl &= ~E1000_CTRL_FD; 2037 *phy_ctrl &= ~MII_CR_FULL_DUPLEX; 2038 DEBUGOUT("Half Duplex\n"); 2039 } else { 2040 ctrl |= E1000_CTRL_FD; 2041 *phy_ctrl |= MII_CR_FULL_DUPLEX; 2042 DEBUGOUT("Full Duplex\n"); 2043 } 2044 2045 /* Forcing 10mb or 100mb? */ 2046 if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) { 2047 ctrl |= E1000_CTRL_SPD_100; 2048 *phy_ctrl |= MII_CR_SPEED_100; 2049 *phy_ctrl &= ~MII_CR_SPEED_1000; 2050 DEBUGOUT("Forcing 100mb\n"); 2051 } else { 2052 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100); 2053 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100); 2054 DEBUGOUT("Forcing 10mb\n"); 2055 } 2056 2057 hw->mac.ops.config_collision_dist(hw); 2058 2059 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 2060 } 2061 2062 /** 2063 * e1000_set_d3_lplu_state_generic - Sets low power link up state for D3 2064 * @hw: pointer to the HW structure 2065 * @active: boolean used to enable/disable lplu 2066 * 2067 * Success returns 0, Failure returns 1 2068 * 2069 * The low power link up (lplu) state is set to the power management level D3 2070 * and SmartSpeed is disabled when active is TRUE, else clear lplu for D3 2071 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 2072 * is used during Dx states where the power conservation is most important. 2073 * During driver activity, SmartSpeed should be enabled so performance is 2074 * maintained. 2075 **/ 2076 s32 e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active) 2077 { 2078 struct e1000_phy_info *phy = &hw->phy; 2079 s32 ret_val; 2080 u16 data; 2081 2082 DEBUGFUNC("e1000_set_d3_lplu_state_generic"); 2083 2084 if (!hw->phy.ops.read_reg) 2085 return E1000_SUCCESS; 2086 2087 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); 2088 if (ret_val) 2089 return ret_val; 2090 2091 if (!active) { 2092 data &= ~IGP02E1000_PM_D3_LPLU; 2093 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 2094 data); 2095 if (ret_val) 2096 return ret_val; 2097 /* LPLU and SmartSpeed are mutually exclusive. LPLU is used 2098 * during Dx states where the power conservation is most 2099 * important. During driver activity we should enable 2100 * SmartSpeed, so performance is maintained. 2101 */ 2102 if (phy->smart_speed == e1000_smart_speed_on) { 2103 ret_val = phy->ops.read_reg(hw, 2104 IGP01E1000_PHY_PORT_CONFIG, 2105 &data); 2106 if (ret_val) 2107 return ret_val; 2108 2109 data |= IGP01E1000_PSCFR_SMART_SPEED; 2110 ret_val = phy->ops.write_reg(hw, 2111 IGP01E1000_PHY_PORT_CONFIG, 2112 data); 2113 if (ret_val) 2114 return ret_val; 2115 } else if (phy->smart_speed == e1000_smart_speed_off) { 2116 ret_val = phy->ops.read_reg(hw, 2117 IGP01E1000_PHY_PORT_CONFIG, 2118 &data); 2119 if (ret_val) 2120 return ret_val; 2121 2122 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 2123 ret_val = phy->ops.write_reg(hw, 2124 IGP01E1000_PHY_PORT_CONFIG, 2125 data); 2126 if (ret_val) 2127 return ret_val; 2128 } 2129 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) || 2130 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) || 2131 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) { 2132 data |= IGP02E1000_PM_D3_LPLU; 2133 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 2134 data); 2135 if (ret_val) 2136 return ret_val; 2137 2138 /* When LPLU is enabled, we should disable SmartSpeed */ 2139 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 2140 &data); 2141 if (ret_val) 2142 return ret_val; 2143 2144 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 2145 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 2146 data); 2147 } 2148 2149 return ret_val; 2150 } 2151 2152 /** 2153 * e1000_check_downshift_generic - Checks whether a downshift in speed occurred 2154 * @hw: pointer to the HW structure 2155 * 2156 * Success returns 0, Failure returns 1 2157 * 2158 * A downshift is detected by querying the PHY link health. 2159 **/ 2160 s32 e1000_check_downshift_generic(struct e1000_hw *hw) 2161 { 2162 struct e1000_phy_info *phy = &hw->phy; 2163 s32 ret_val; 2164 u16 phy_data, offset, mask; 2165 2166 DEBUGFUNC("e1000_check_downshift_generic"); 2167 2168 switch (phy->type) { 2169 case e1000_phy_i210: 2170 case e1000_phy_m88: 2171 case e1000_phy_gg82563: 2172 case e1000_phy_bm: 2173 case e1000_phy_82578: 2174 offset = M88E1000_PHY_SPEC_STATUS; 2175 mask = M88E1000_PSSR_DOWNSHIFT; 2176 break; 2177 case e1000_phy_igp: 2178 case e1000_phy_igp_2: 2179 case e1000_phy_igp_3: 2180 offset = IGP01E1000_PHY_LINK_HEALTH; 2181 mask = IGP01E1000_PLHR_SS_DOWNGRADE; 2182 break; 2183 default: 2184 /* speed downshift not supported */ 2185 phy->speed_downgraded = FALSE; 2186 return E1000_SUCCESS; 2187 } 2188 2189 ret_val = phy->ops.read_reg(hw, offset, &phy_data); 2190 2191 if (!ret_val) 2192 phy->speed_downgraded = !!(phy_data & mask); 2193 2194 return ret_val; 2195 } 2196 2197 /** 2198 * e1000_check_polarity_m88 - Checks the polarity. 2199 * @hw: pointer to the HW structure 2200 * 2201 * Success returns 0, Failure returns -E1000_ERR_PHY (-2) 2202 * 2203 * Polarity is determined based on the PHY specific status register. 2204 **/ 2205 s32 e1000_check_polarity_m88(struct e1000_hw *hw) 2206 { 2207 struct e1000_phy_info *phy = &hw->phy; 2208 s32 ret_val; 2209 u16 data; 2210 2211 DEBUGFUNC("e1000_check_polarity_m88"); 2212 2213 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data); 2214 2215 if (!ret_val) 2216 phy->cable_polarity = ((data & M88E1000_PSSR_REV_POLARITY) 2217 ? e1000_rev_polarity_reversed 2218 : e1000_rev_polarity_normal); 2219 2220 return ret_val; 2221 } 2222 2223 /** 2224 * e1000_check_polarity_igp - Checks the polarity. 2225 * @hw: pointer to the HW structure 2226 * 2227 * Success returns 0, Failure returns -E1000_ERR_PHY (-2) 2228 * 2229 * Polarity is determined based on the PHY port status register, and the 2230 * current speed (since there is no polarity at 100Mbps). 2231 **/ 2232 s32 e1000_check_polarity_igp(struct e1000_hw *hw) 2233 { 2234 struct e1000_phy_info *phy = &hw->phy; 2235 s32 ret_val; 2236 u16 data, offset, mask; 2237 2238 DEBUGFUNC("e1000_check_polarity_igp"); 2239 2240 /* Polarity is determined based on the speed of 2241 * our connection. 2242 */ 2243 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data); 2244 if (ret_val) 2245 return ret_val; 2246 2247 if ((data & IGP01E1000_PSSR_SPEED_MASK) == 2248 IGP01E1000_PSSR_SPEED_1000MBPS) { 2249 offset = IGP01E1000_PHY_PCS_INIT_REG; 2250 mask = IGP01E1000_PHY_POLARITY_MASK; 2251 } else { 2252 /* This really only applies to 10Mbps since 2253 * there is no polarity for 100Mbps (always 0). 2254 */ 2255 offset = IGP01E1000_PHY_PORT_STATUS; 2256 mask = IGP01E1000_PSSR_POLARITY_REVERSED; 2257 } 2258 2259 ret_val = phy->ops.read_reg(hw, offset, &data); 2260 2261 if (!ret_val) 2262 phy->cable_polarity = ((data & mask) 2263 ? e1000_rev_polarity_reversed 2264 : e1000_rev_polarity_normal); 2265 2266 return ret_val; 2267 } 2268 2269 /** 2270 * e1000_check_polarity_ife - Check cable polarity for IFE PHY 2271 * @hw: pointer to the HW structure 2272 * 2273 * Polarity is determined on the polarity reversal feature being enabled. 2274 **/ 2275 s32 e1000_check_polarity_ife(struct e1000_hw *hw) 2276 { 2277 struct e1000_phy_info *phy = &hw->phy; 2278 s32 ret_val; 2279 u16 phy_data, offset, mask; 2280 2281 DEBUGFUNC("e1000_check_polarity_ife"); 2282 2283 /* Polarity is determined based on the reversal feature being enabled. 2284 */ 2285 if (phy->polarity_correction) { 2286 offset = IFE_PHY_EXTENDED_STATUS_CONTROL; 2287 mask = IFE_PESC_POLARITY_REVERSED; 2288 } else { 2289 offset = IFE_PHY_SPECIAL_CONTROL; 2290 mask = IFE_PSC_FORCE_POLARITY; 2291 } 2292 2293 ret_val = phy->ops.read_reg(hw, offset, &phy_data); 2294 2295 if (!ret_val) 2296 phy->cable_polarity = ((phy_data & mask) 2297 ? e1000_rev_polarity_reversed 2298 : e1000_rev_polarity_normal); 2299 2300 return ret_val; 2301 } 2302 2303 /** 2304 * e1000_wait_autoneg - Wait for auto-neg completion 2305 * @hw: pointer to the HW structure 2306 * 2307 * Waits for auto-negotiation to complete or for the auto-negotiation time 2308 * limit to expire, which ever happens first. 2309 **/ 2310 static s32 e1000_wait_autoneg(struct e1000_hw *hw) 2311 { 2312 s32 ret_val = E1000_SUCCESS; 2313 u16 i, phy_status; 2314 2315 DEBUGFUNC("e1000_wait_autoneg"); 2316 2317 if (!hw->phy.ops.read_reg) 2318 return E1000_SUCCESS; 2319 2320 /* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */ 2321 for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) { 2322 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); 2323 if (ret_val) 2324 break; 2325 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); 2326 if (ret_val) 2327 break; 2328 if (phy_status & MII_SR_AUTONEG_COMPLETE) 2329 break; 2330 msec_delay(100); 2331 } 2332 2333 /* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation 2334 * has completed. 2335 */ 2336 return ret_val; 2337 } 2338 2339 /** 2340 * e1000_phy_has_link_generic - Polls PHY for link 2341 * @hw: pointer to the HW structure 2342 * @iterations: number of times to poll for link 2343 * @usec_interval: delay between polling attempts 2344 * @success: pointer to whether polling was successful or not 2345 * 2346 * Polls the PHY status register for link, 'iterations' number of times. 2347 **/ 2348 s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations, 2349 u32 usec_interval, bool *success) 2350 { 2351 s32 ret_val = E1000_SUCCESS; 2352 u16 i, phy_status; 2353 2354 DEBUGFUNC("e1000_phy_has_link_generic"); 2355 2356 if (!hw->phy.ops.read_reg) 2357 return E1000_SUCCESS; 2358 2359 for (i = 0; i < iterations; i++) { 2360 /* Some PHYs require the PHY_STATUS register to be read 2361 * twice due to the link bit being sticky. No harm doing 2362 * it across the board. 2363 */ 2364 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); 2365 if (ret_val) 2366 /* If the first read fails, another entity may have 2367 * ownership of the resources, wait and try again to 2368 * see if they have relinquished the resources yet. 2369 */ 2370 usec_delay(usec_interval); 2371 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); 2372 if (ret_val) 2373 break; 2374 if (phy_status & MII_SR_LINK_STATUS) 2375 break; 2376 if (usec_interval >= 1000) 2377 msec_delay_irq(usec_interval/1000); 2378 else 2379 usec_delay(usec_interval); 2380 } 2381 2382 *success = (i < iterations); 2383 2384 return ret_val; 2385 } 2386 2387 /** 2388 * e1000_get_cable_length_m88 - Determine cable length for m88 PHY 2389 * @hw: pointer to the HW structure 2390 * 2391 * Reads the PHY specific status register to retrieve the cable length 2392 * information. The cable length is determined by averaging the minimum and 2393 * maximum values to get the "average" cable length. The m88 PHY has four 2394 * possible cable length values, which are: 2395 * Register Value Cable Length 2396 * 0 < 50 meters 2397 * 1 50 - 80 meters 2398 * 2 80 - 110 meters 2399 * 3 110 - 140 meters 2400 * 4 > 140 meters 2401 **/ 2402 s32 e1000_get_cable_length_m88(struct e1000_hw *hw) 2403 { 2404 struct e1000_phy_info *phy = &hw->phy; 2405 s32 ret_val; 2406 u16 phy_data, index; 2407 2408 DEBUGFUNC("e1000_get_cable_length_m88"); 2409 2410 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); 2411 if (ret_val) 2412 return ret_val; 2413 2414 index = ((phy_data & M88E1000_PSSR_CABLE_LENGTH) >> 2415 M88E1000_PSSR_CABLE_LENGTH_SHIFT); 2416 2417 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) 2418 return -E1000_ERR_PHY; 2419 2420 phy->min_cable_length = e1000_m88_cable_length_table[index]; 2421 phy->max_cable_length = e1000_m88_cable_length_table[index + 1]; 2422 2423 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2; 2424 2425 return E1000_SUCCESS; 2426 } 2427 2428 s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw) 2429 { 2430 struct e1000_phy_info *phy = &hw->phy; 2431 s32 ret_val; 2432 u16 phy_data, phy_data2, is_cm; 2433 u16 index, default_page; 2434 2435 DEBUGFUNC("e1000_get_cable_length_m88_gen2"); 2436 2437 switch (hw->phy.id) { 2438 case I210_I_PHY_ID: 2439 /* Get cable length from PHY Cable Diagnostics Control Reg */ 2440 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) + 2441 (I347AT4_PCDL + phy->addr), 2442 &phy_data); 2443 if (ret_val) 2444 return ret_val; 2445 2446 /* Check if the unit of cable length is meters or cm */ 2447 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) + 2448 I347AT4_PCDC, &phy_data2); 2449 if (ret_val) 2450 return ret_val; 2451 2452 is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT); 2453 2454 /* Populate the phy structure with cable length in meters */ 2455 phy->min_cable_length = phy_data / (is_cm ? 100 : 1); 2456 phy->max_cable_length = phy_data / (is_cm ? 100 : 1); 2457 phy->cable_length = phy_data / (is_cm ? 100 : 1); 2458 break; 2459 case M88E1543_E_PHY_ID: 2460 case M88E1512_E_PHY_ID: 2461 case M88E1340M_E_PHY_ID: 2462 case I347AT4_E_PHY_ID: 2463 /* Remember the original page select and set it to 7 */ 2464 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT, 2465 &default_page); 2466 if (ret_val) 2467 return ret_val; 2468 2469 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07); 2470 if (ret_val) 2471 return ret_val; 2472 2473 /* Get cable length from PHY Cable Diagnostics Control Reg */ 2474 ret_val = phy->ops.read_reg(hw, (I347AT4_PCDL + phy->addr), 2475 &phy_data); 2476 if (ret_val) 2477 return ret_val; 2478 2479 /* Check if the unit of cable length is meters or cm */ 2480 ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2); 2481 if (ret_val) 2482 return ret_val; 2483 2484 is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT); 2485 2486 /* Populate the phy structure with cable length in meters */ 2487 phy->min_cable_length = phy_data / (is_cm ? 100 : 1); 2488 phy->max_cable_length = phy_data / (is_cm ? 100 : 1); 2489 phy->cable_length = phy_data / (is_cm ? 100 : 1); 2490 2491 /* Reset the page select to its original value */ 2492 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 2493 default_page); 2494 if (ret_val) 2495 return ret_val; 2496 break; 2497 2498 case M88E1112_E_PHY_ID: 2499 /* Remember the original page select and set it to 5 */ 2500 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT, 2501 &default_page); 2502 if (ret_val) 2503 return ret_val; 2504 2505 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05); 2506 if (ret_val) 2507 return ret_val; 2508 2509 ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE, 2510 &phy_data); 2511 if (ret_val) 2512 return ret_val; 2513 2514 index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >> 2515 M88E1000_PSSR_CABLE_LENGTH_SHIFT; 2516 2517 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) 2518 return -E1000_ERR_PHY; 2519 2520 phy->min_cable_length = e1000_m88_cable_length_table[index]; 2521 phy->max_cable_length = e1000_m88_cable_length_table[index + 1]; 2522 2523 phy->cable_length = (phy->min_cable_length + 2524 phy->max_cable_length) / 2; 2525 2526 /* Reset the page select to its original value */ 2527 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 2528 default_page); 2529 if (ret_val) 2530 return ret_val; 2531 2532 break; 2533 default: 2534 return -E1000_ERR_PHY; 2535 } 2536 2537 return ret_val; 2538 } 2539 2540 /** 2541 * e1000_get_cable_length_igp_2 - Determine cable length for igp2 PHY 2542 * @hw: pointer to the HW structure 2543 * 2544 * The automatic gain control (agc) normalizes the amplitude of the 2545 * received signal, adjusting for the attenuation produced by the 2546 * cable. By reading the AGC registers, which represent the 2547 * combination of coarse and fine gain value, the value can be put 2548 * into a lookup table to obtain the approximate cable length 2549 * for each channel. 2550 **/ 2551 s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw) 2552 { 2553 struct e1000_phy_info *phy = &hw->phy; 2554 s32 ret_val; 2555 u16 phy_data, i, agc_value = 0; 2556 u16 cur_agc_index, max_agc_index = 0; 2557 u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1; 2558 static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = { 2559 IGP02E1000_PHY_AGC_A, 2560 IGP02E1000_PHY_AGC_B, 2561 IGP02E1000_PHY_AGC_C, 2562 IGP02E1000_PHY_AGC_D 2563 }; 2564 2565 DEBUGFUNC("e1000_get_cable_length_igp_2"); 2566 2567 /* Read the AGC registers for all channels */ 2568 for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) { 2569 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data); 2570 if (ret_val) 2571 return ret_val; 2572 2573 /* Getting bits 15:9, which represent the combination of 2574 * coarse and fine gain values. The result is a number 2575 * that can be put into the lookup table to obtain the 2576 * approximate cable length. 2577 */ 2578 cur_agc_index = ((phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) & 2579 IGP02E1000_AGC_LENGTH_MASK); 2580 2581 /* Array index bound check. */ 2582 if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) || 2583 (cur_agc_index == 0)) 2584 return -E1000_ERR_PHY; 2585 2586 /* Remove min & max AGC values from calculation. */ 2587 if (e1000_igp_2_cable_length_table[min_agc_index] > 2588 e1000_igp_2_cable_length_table[cur_agc_index]) 2589 min_agc_index = cur_agc_index; 2590 if (e1000_igp_2_cable_length_table[max_agc_index] < 2591 e1000_igp_2_cable_length_table[cur_agc_index]) 2592 max_agc_index = cur_agc_index; 2593 2594 agc_value += e1000_igp_2_cable_length_table[cur_agc_index]; 2595 } 2596 2597 agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] + 2598 e1000_igp_2_cable_length_table[max_agc_index]); 2599 agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2); 2600 2601 /* Calculate cable length with the error range of +/- 10 meters. */ 2602 phy->min_cable_length = (((agc_value - IGP02E1000_AGC_RANGE) > 0) ? 2603 (agc_value - IGP02E1000_AGC_RANGE) : 0); 2604 phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE; 2605 2606 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2; 2607 2608 return E1000_SUCCESS; 2609 } 2610 2611 /** 2612 * e1000_get_phy_info_m88 - Retrieve PHY information 2613 * @hw: pointer to the HW structure 2614 * 2615 * Valid for only copper links. Read the PHY status register (sticky read) 2616 * to verify that link is up. Read the PHY special control register to 2617 * determine the polarity and 10base-T extended distance. Read the PHY 2618 * special status register to determine MDI/MDIx and current speed. If 2619 * speed is 1000, then determine cable length, local and remote receiver. 2620 **/ 2621 s32 e1000_get_phy_info_m88(struct e1000_hw *hw) 2622 { 2623 struct e1000_phy_info *phy = &hw->phy; 2624 s32 ret_val; 2625 u16 phy_data; 2626 bool link; 2627 2628 DEBUGFUNC("e1000_get_phy_info_m88"); 2629 2630 if (phy->media_type != e1000_media_type_copper) { 2631 DEBUGOUT("Phy info is only valid for copper media\n"); 2632 return -E1000_ERR_CONFIG; 2633 } 2634 2635 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); 2636 if (ret_val) 2637 return ret_val; 2638 2639 if (!link) { 2640 DEBUGOUT("Phy info is only valid if link is up\n"); 2641 return -E1000_ERR_CONFIG; 2642 } 2643 2644 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); 2645 if (ret_val) 2646 return ret_val; 2647 2648 phy->polarity_correction = !!(phy_data & 2649 M88E1000_PSCR_POLARITY_REVERSAL); 2650 2651 ret_val = e1000_check_polarity_m88(hw); 2652 if (ret_val) 2653 return ret_val; 2654 2655 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); 2656 if (ret_val) 2657 return ret_val; 2658 2659 phy->is_mdix = !!(phy_data & M88E1000_PSSR_MDIX); 2660 2661 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) { 2662 ret_val = hw->phy.ops.get_cable_length(hw); 2663 if (ret_val) 2664 return ret_val; 2665 2666 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data); 2667 if (ret_val) 2668 return ret_val; 2669 2670 phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS) 2671 ? e1000_1000t_rx_status_ok 2672 : e1000_1000t_rx_status_not_ok; 2673 2674 phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS) 2675 ? e1000_1000t_rx_status_ok 2676 : e1000_1000t_rx_status_not_ok; 2677 } else { 2678 /* Set values to "undefined" */ 2679 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED; 2680 phy->local_rx = e1000_1000t_rx_status_undefined; 2681 phy->remote_rx = e1000_1000t_rx_status_undefined; 2682 } 2683 2684 return ret_val; 2685 } 2686 2687 /** 2688 * e1000_get_phy_info_igp - Retrieve igp PHY information 2689 * @hw: pointer to the HW structure 2690 * 2691 * Read PHY status to determine if link is up. If link is up, then 2692 * set/determine 10base-T extended distance and polarity correction. Read 2693 * PHY port status to determine MDI/MDIx and speed. Based on the speed, 2694 * determine on the cable length, local and remote receiver. 2695 **/ 2696 s32 e1000_get_phy_info_igp(struct e1000_hw *hw) 2697 { 2698 struct e1000_phy_info *phy = &hw->phy; 2699 s32 ret_val; 2700 u16 data; 2701 bool link; 2702 2703 DEBUGFUNC("e1000_get_phy_info_igp"); 2704 2705 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); 2706 if (ret_val) 2707 return ret_val; 2708 2709 if (!link) { 2710 DEBUGOUT("Phy info is only valid if link is up\n"); 2711 return -E1000_ERR_CONFIG; 2712 } 2713 2714 phy->polarity_correction = TRUE; 2715 2716 ret_val = e1000_check_polarity_igp(hw); 2717 if (ret_val) 2718 return ret_val; 2719 2720 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data); 2721 if (ret_val) 2722 return ret_val; 2723 2724 phy->is_mdix = !!(data & IGP01E1000_PSSR_MDIX); 2725 2726 if ((data & IGP01E1000_PSSR_SPEED_MASK) == 2727 IGP01E1000_PSSR_SPEED_1000MBPS) { 2728 ret_val = phy->ops.get_cable_length(hw); 2729 if (ret_val) 2730 return ret_val; 2731 2732 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); 2733 if (ret_val) 2734 return ret_val; 2735 2736 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS) 2737 ? e1000_1000t_rx_status_ok 2738 : e1000_1000t_rx_status_not_ok; 2739 2740 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS) 2741 ? e1000_1000t_rx_status_ok 2742 : e1000_1000t_rx_status_not_ok; 2743 } else { 2744 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED; 2745 phy->local_rx = e1000_1000t_rx_status_undefined; 2746 phy->remote_rx = e1000_1000t_rx_status_undefined; 2747 } 2748 2749 return ret_val; 2750 } 2751 2752 /** 2753 * e1000_get_phy_info_ife - Retrieves various IFE PHY states 2754 * @hw: pointer to the HW structure 2755 * 2756 * Populates "phy" structure with various feature states. 2757 **/ 2758 s32 e1000_get_phy_info_ife(struct e1000_hw *hw) 2759 { 2760 struct e1000_phy_info *phy = &hw->phy; 2761 s32 ret_val; 2762 u16 data; 2763 bool link; 2764 2765 DEBUGFUNC("e1000_get_phy_info_ife"); 2766 2767 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); 2768 if (ret_val) 2769 return ret_val; 2770 2771 if (!link) { 2772 DEBUGOUT("Phy info is only valid if link is up\n"); 2773 return -E1000_ERR_CONFIG; 2774 } 2775 2776 ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data); 2777 if (ret_val) 2778 return ret_val; 2779 phy->polarity_correction = !(data & IFE_PSC_AUTO_POLARITY_DISABLE); 2780 2781 if (phy->polarity_correction) { 2782 ret_val = e1000_check_polarity_ife(hw); 2783 if (ret_val) 2784 return ret_val; 2785 } else { 2786 /* Polarity is forced */ 2787 phy->cable_polarity = ((data & IFE_PSC_FORCE_POLARITY) 2788 ? e1000_rev_polarity_reversed 2789 : e1000_rev_polarity_normal); 2790 } 2791 2792 ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data); 2793 if (ret_val) 2794 return ret_val; 2795 2796 phy->is_mdix = !!(data & IFE_PMC_MDIX_STATUS); 2797 2798 /* The following parameters are undefined for 10/100 operation. */ 2799 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED; 2800 phy->local_rx = e1000_1000t_rx_status_undefined; 2801 phy->remote_rx = e1000_1000t_rx_status_undefined; 2802 2803 return E1000_SUCCESS; 2804 } 2805 2806 /** 2807 * e1000_phy_sw_reset_generic - PHY software reset 2808 * @hw: pointer to the HW structure 2809 * 2810 * Does a software reset of the PHY by reading the PHY control register and 2811 * setting/write the control register reset bit to the PHY. 2812 **/ 2813 s32 e1000_phy_sw_reset_generic(struct e1000_hw *hw) 2814 { 2815 s32 ret_val; 2816 u16 phy_ctrl; 2817 2818 DEBUGFUNC("e1000_phy_sw_reset_generic"); 2819 2820 if (!hw->phy.ops.read_reg) 2821 return E1000_SUCCESS; 2822 2823 ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl); 2824 if (ret_val) 2825 return ret_val; 2826 2827 phy_ctrl |= MII_CR_RESET; 2828 ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl); 2829 if (ret_val) 2830 return ret_val; 2831 2832 usec_delay(1); 2833 2834 return ret_val; 2835 } 2836 2837 /** 2838 * e1000_phy_hw_reset_generic - PHY hardware reset 2839 * @hw: pointer to the HW structure 2840 * 2841 * Verify the reset block is not blocking us from resetting. Acquire 2842 * semaphore (if necessary) and read/set/write the device control reset 2843 * bit in the PHY. Wait the appropriate delay time for the device to 2844 * reset and release the semaphore (if necessary). 2845 **/ 2846 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw) 2847 { 2848 struct e1000_phy_info *phy = &hw->phy; 2849 s32 ret_val; 2850 u32 ctrl; 2851 2852 DEBUGFUNC("e1000_phy_hw_reset_generic"); 2853 2854 if (phy->ops.check_reset_block) { 2855 ret_val = phy->ops.check_reset_block(hw); 2856 if (ret_val) 2857 return E1000_SUCCESS; 2858 } 2859 2860 ret_val = phy->ops.acquire(hw); 2861 if (ret_val) 2862 return ret_val; 2863 2864 ctrl = E1000_READ_REG(hw, E1000_CTRL); 2865 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PHY_RST); 2866 E1000_WRITE_FLUSH(hw); 2867 2868 usec_delay(phy->reset_delay_us); 2869 2870 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 2871 E1000_WRITE_FLUSH(hw); 2872 2873 usec_delay(150); 2874 2875 phy->ops.release(hw); 2876 2877 return phy->ops.get_cfg_done(hw); 2878 } 2879 2880 /** 2881 * e1000_get_cfg_done_generic - Generic configuration done 2882 * @hw: pointer to the HW structure 2883 * 2884 * Generic function to wait 10 milli-seconds for configuration to complete 2885 * and return success. 2886 **/ 2887 s32 e1000_get_cfg_done_generic(struct e1000_hw E1000_UNUSEDARG *hw) 2888 { 2889 DEBUGFUNC("e1000_get_cfg_done_generic"); 2890 2891 msec_delay_irq(10); 2892 2893 return E1000_SUCCESS; 2894 } 2895 2896 /** 2897 * e1000_phy_init_script_igp3 - Inits the IGP3 PHY 2898 * @hw: pointer to the HW structure 2899 * 2900 * Initializes a Intel Gigabit PHY3 when an EEPROM is not present. 2901 **/ 2902 s32 e1000_phy_init_script_igp3(struct e1000_hw *hw) 2903 { 2904 DEBUGOUT("Running IGP 3 PHY init script\n"); 2905 2906 /* PHY init IGP 3 */ 2907 /* Enable rise/fall, 10-mode work in class-A */ 2908 hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018); 2909 /* Remove all caps from Replica path filter */ 2910 hw->phy.ops.write_reg(hw, 0x2F52, 0x0000); 2911 /* Bias trimming for ADC, AFE and Driver (Default) */ 2912 hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24); 2913 /* Increase Hybrid poly bias */ 2914 hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0); 2915 /* Add 4% to Tx amplitude in Gig mode */ 2916 hw->phy.ops.write_reg(hw, 0x2010, 0x10B0); 2917 /* Disable trimming (TTT) */ 2918 hw->phy.ops.write_reg(hw, 0x2011, 0x0000); 2919 /* Poly DC correction to 94.6% + 2% for all channels */ 2920 hw->phy.ops.write_reg(hw, 0x20DD, 0x249A); 2921 /* ABS DC correction to 95.9% */ 2922 hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3); 2923 /* BG temp curve trim */ 2924 hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE); 2925 /* Increasing ADC OPAMP stage 1 currents to max */ 2926 hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4); 2927 /* Force 1000 ( required for enabling PHY regs configuration) */ 2928 hw->phy.ops.write_reg(hw, 0x0000, 0x0140); 2929 /* Set upd_freq to 6 */ 2930 hw->phy.ops.write_reg(hw, 0x1F30, 0x1606); 2931 /* Disable NPDFE */ 2932 hw->phy.ops.write_reg(hw, 0x1F31, 0xB814); 2933 /* Disable adaptive fixed FFE (Default) */ 2934 hw->phy.ops.write_reg(hw, 0x1F35, 0x002A); 2935 /* Enable FFE hysteresis */ 2936 hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067); 2937 /* Fixed FFE for short cable lengths */ 2938 hw->phy.ops.write_reg(hw, 0x1F54, 0x0065); 2939 /* Fixed FFE for medium cable lengths */ 2940 hw->phy.ops.write_reg(hw, 0x1F55, 0x002A); 2941 /* Fixed FFE for long cable lengths */ 2942 hw->phy.ops.write_reg(hw, 0x1F56, 0x002A); 2943 /* Enable Adaptive Clip Threshold */ 2944 hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0); 2945 /* AHT reset limit to 1 */ 2946 hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF); 2947 /* Set AHT master delay to 127 msec */ 2948 hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC); 2949 /* Set scan bits for AHT */ 2950 hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF); 2951 /* Set AHT Preset bits */ 2952 hw->phy.ops.write_reg(hw, 0x1F79, 0x0210); 2953 /* Change integ_factor of channel A to 3 */ 2954 hw->phy.ops.write_reg(hw, 0x1895, 0x0003); 2955 /* Change prop_factor of channels BCD to 8 */ 2956 hw->phy.ops.write_reg(hw, 0x1796, 0x0008); 2957 /* Change cg_icount + enable integbp for channels BCD */ 2958 hw->phy.ops.write_reg(hw, 0x1798, 0xD008); 2959 /* Change cg_icount + enable integbp + change prop_factor_master 2960 * to 8 for channel A 2961 */ 2962 hw->phy.ops.write_reg(hw, 0x1898, 0xD918); 2963 /* Disable AHT in Slave mode on channel A */ 2964 hw->phy.ops.write_reg(hw, 0x187A, 0x0800); 2965 /* Enable LPLU and disable AN to 1000 in non-D0a states, 2966 * Enable SPD+B2B 2967 */ 2968 hw->phy.ops.write_reg(hw, 0x0019, 0x008D); 2969 /* Enable restart AN on an1000_dis change */ 2970 hw->phy.ops.write_reg(hw, 0x001B, 0x2080); 2971 /* Enable wh_fifo read clock in 10/100 modes */ 2972 hw->phy.ops.write_reg(hw, 0x0014, 0x0045); 2973 /* Restart AN, Speed selection is 1000 */ 2974 hw->phy.ops.write_reg(hw, 0x0000, 0x1340); 2975 2976 return E1000_SUCCESS; 2977 } 2978 2979 /** 2980 * e1000_get_phy_type_from_id - Get PHY type from id 2981 * @phy_id: phy_id read from the phy 2982 * 2983 * Returns the phy type from the id. 2984 **/ 2985 enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id) 2986 { 2987 enum e1000_phy_type phy_type = e1000_phy_unknown; 2988 2989 switch (phy_id) { 2990 case M88E1000_I_PHY_ID: 2991 case M88E1000_E_PHY_ID: 2992 case M88E1111_I_PHY_ID: 2993 case M88E1011_I_PHY_ID: 2994 case M88E1543_E_PHY_ID: 2995 case M88E1512_E_PHY_ID: 2996 case I347AT4_E_PHY_ID: 2997 case M88E1112_E_PHY_ID: 2998 case M88E1340M_E_PHY_ID: 2999 phy_type = e1000_phy_m88; 3000 break; 3001 case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */ 3002 phy_type = e1000_phy_igp_2; 3003 break; 3004 case GG82563_E_PHY_ID: 3005 phy_type = e1000_phy_gg82563; 3006 break; 3007 case IGP03E1000_E_PHY_ID: 3008 phy_type = e1000_phy_igp_3; 3009 break; 3010 case IFE_E_PHY_ID: 3011 case IFE_PLUS_E_PHY_ID: 3012 case IFE_C_E_PHY_ID: 3013 phy_type = e1000_phy_ife; 3014 break; 3015 case BME1000_E_PHY_ID: 3016 case BME1000_E_PHY_ID_R2: 3017 phy_type = e1000_phy_bm; 3018 break; 3019 case I82578_E_PHY_ID: 3020 phy_type = e1000_phy_82578; 3021 break; 3022 case I82577_E_PHY_ID: 3023 phy_type = e1000_phy_82577; 3024 break; 3025 case I82579_E_PHY_ID: 3026 phy_type = e1000_phy_82579; 3027 break; 3028 case I217_E_PHY_ID: 3029 phy_type = e1000_phy_i217; 3030 break; 3031 case I82580_I_PHY_ID: 3032 phy_type = e1000_phy_82580; 3033 break; 3034 case I210_I_PHY_ID: 3035 phy_type = e1000_phy_i210; 3036 break; 3037 default: 3038 phy_type = e1000_phy_unknown; 3039 break; 3040 } 3041 return phy_type; 3042 } 3043 3044 /** 3045 * e1000_determine_phy_address - Determines PHY address. 3046 * @hw: pointer to the HW structure 3047 * 3048 * This uses a trial and error method to loop through possible PHY 3049 * addresses. It tests each by reading the PHY ID registers and 3050 * checking for a match. 3051 **/ 3052 s32 e1000_determine_phy_address(struct e1000_hw *hw) 3053 { 3054 u32 phy_addr = 0; 3055 u32 i; 3056 enum e1000_phy_type phy_type = e1000_phy_unknown; 3057 3058 hw->phy.id = phy_type; 3059 3060 for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) { 3061 hw->phy.addr = phy_addr; 3062 i = 0; 3063 3064 do { 3065 e1000_get_phy_id(hw); 3066 phy_type = e1000_get_phy_type_from_id(hw->phy.id); 3067 3068 /* If phy_type is valid, break - we found our 3069 * PHY address 3070 */ 3071 if (phy_type != e1000_phy_unknown) 3072 return E1000_SUCCESS; 3073 3074 msec_delay(1); 3075 i++; 3076 } while (i < 10); 3077 } 3078 3079 return -E1000_ERR_PHY_TYPE; 3080 } 3081 3082 /** 3083 * e1000_get_phy_addr_for_bm_page - Retrieve PHY page address 3084 * @page: page to access 3085 * 3086 * Returns the phy address for the page requested. 3087 **/ 3088 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg) 3089 { 3090 u32 phy_addr = 2; 3091 3092 if ((page >= 768) || (page == 0 && reg == 25) || (reg == 31)) 3093 phy_addr = 1; 3094 3095 return phy_addr; 3096 } 3097 3098 /** 3099 * e1000_write_phy_reg_bm - Write BM PHY register 3100 * @hw: pointer to the HW structure 3101 * @offset: register offset to write to 3102 * @data: data to write at register offset 3103 * 3104 * Acquires semaphore, if necessary, then writes the data to PHY register 3105 * at the offset. Release any acquired semaphores before exiting. 3106 **/ 3107 s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data) 3108 { 3109 s32 ret_val; 3110 u32 page = offset >> IGP_PAGE_SHIFT; 3111 3112 DEBUGFUNC("e1000_write_phy_reg_bm"); 3113 3114 ret_val = hw->phy.ops.acquire(hw); 3115 if (ret_val) 3116 return ret_val; 3117 3118 /* Page 800 works differently than the rest so it has its own func */ 3119 if (page == BM_WUC_PAGE) { 3120 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, 3121 FALSE, FALSE); 3122 goto release; 3123 } 3124 3125 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); 3126 3127 if (offset > MAX_PHY_MULTI_PAGE_REG) { 3128 u32 page_shift, page_select; 3129 3130 /* Page select is register 31 for phy address 1 and 22 for 3131 * phy address 2 and 3. Page select is shifted only for 3132 * phy address 1. 3133 */ 3134 if (hw->phy.addr == 1) { 3135 page_shift = IGP_PAGE_SHIFT; 3136 page_select = IGP01E1000_PHY_PAGE_SELECT; 3137 } else { 3138 page_shift = 0; 3139 page_select = BM_PHY_PAGE_SELECT; 3140 } 3141 3142 /* Page is shifted left, PHY expects (page x 32) */ 3143 ret_val = e1000_write_phy_reg_mdic(hw, page_select, 3144 (page << page_shift)); 3145 if (ret_val) 3146 goto release; 3147 } 3148 3149 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 3150 data); 3151 3152 release: 3153 hw->phy.ops.release(hw); 3154 return ret_val; 3155 } 3156 3157 /** 3158 * e1000_read_phy_reg_bm - Read BM PHY register 3159 * @hw: pointer to the HW structure 3160 * @offset: register offset to be read 3161 * @data: pointer to the read data 3162 * 3163 * Acquires semaphore, if necessary, then reads the PHY register at offset 3164 * and storing the retrieved information in data. Release any acquired 3165 * semaphores before exiting. 3166 **/ 3167 s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data) 3168 { 3169 s32 ret_val; 3170 u32 page = offset >> IGP_PAGE_SHIFT; 3171 3172 DEBUGFUNC("e1000_read_phy_reg_bm"); 3173 3174 ret_val = hw->phy.ops.acquire(hw); 3175 if (ret_val) 3176 return ret_val; 3177 3178 /* Page 800 works differently than the rest so it has its own func */ 3179 if (page == BM_WUC_PAGE) { 3180 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, 3181 TRUE, FALSE); 3182 goto release; 3183 } 3184 3185 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); 3186 3187 if (offset > MAX_PHY_MULTI_PAGE_REG) { 3188 u32 page_shift, page_select; 3189 3190 /* Page select is register 31 for phy address 1 and 22 for 3191 * phy address 2 and 3. Page select is shifted only for 3192 * phy address 1. 3193 */ 3194 if (hw->phy.addr == 1) { 3195 page_shift = IGP_PAGE_SHIFT; 3196 page_select = IGP01E1000_PHY_PAGE_SELECT; 3197 } else { 3198 page_shift = 0; 3199 page_select = BM_PHY_PAGE_SELECT; 3200 } 3201 3202 /* Page is shifted left, PHY expects (page x 32) */ 3203 ret_val = e1000_write_phy_reg_mdic(hw, page_select, 3204 (page << page_shift)); 3205 if (ret_val) 3206 goto release; 3207 } 3208 3209 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 3210 data); 3211 release: 3212 hw->phy.ops.release(hw); 3213 return ret_val; 3214 } 3215 3216 /** 3217 * e1000_read_phy_reg_bm2 - Read BM PHY register 3218 * @hw: pointer to the HW structure 3219 * @offset: register offset to be read 3220 * @data: pointer to the read data 3221 * 3222 * Acquires semaphore, if necessary, then reads the PHY register at offset 3223 * and storing the retrieved information in data. Release any acquired 3224 * semaphores before exiting. 3225 **/ 3226 s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data) 3227 { 3228 s32 ret_val; 3229 u16 page = (u16)(offset >> IGP_PAGE_SHIFT); 3230 3231 DEBUGFUNC("e1000_read_phy_reg_bm2"); 3232 3233 ret_val = hw->phy.ops.acquire(hw); 3234 if (ret_val) 3235 return ret_val; 3236 3237 /* Page 800 works differently than the rest so it has its own func */ 3238 if (page == BM_WUC_PAGE) { 3239 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, 3240 TRUE, FALSE); 3241 goto release; 3242 } 3243 3244 hw->phy.addr = 1; 3245 3246 if (offset > MAX_PHY_MULTI_PAGE_REG) { 3247 /* Page is shifted left, PHY expects (page x 32) */ 3248 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, 3249 page); 3250 3251 if (ret_val) 3252 goto release; 3253 } 3254 3255 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 3256 data); 3257 release: 3258 hw->phy.ops.release(hw); 3259 return ret_val; 3260 } 3261 3262 /** 3263 * e1000_write_phy_reg_bm2 - Write BM PHY register 3264 * @hw: pointer to the HW structure 3265 * @offset: register offset to write to 3266 * @data: data to write at register offset 3267 * 3268 * Acquires semaphore, if necessary, then writes the data to PHY register 3269 * at the offset. Release any acquired semaphores before exiting. 3270 **/ 3271 s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data) 3272 { 3273 s32 ret_val; 3274 u16 page = (u16)(offset >> IGP_PAGE_SHIFT); 3275 3276 DEBUGFUNC("e1000_write_phy_reg_bm2"); 3277 3278 ret_val = hw->phy.ops.acquire(hw); 3279 if (ret_val) 3280 return ret_val; 3281 3282 /* Page 800 works differently than the rest so it has its own func */ 3283 if (page == BM_WUC_PAGE) { 3284 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, 3285 FALSE, FALSE); 3286 goto release; 3287 } 3288 3289 hw->phy.addr = 1; 3290 3291 if (offset > MAX_PHY_MULTI_PAGE_REG) { 3292 /* Page is shifted left, PHY expects (page x 32) */ 3293 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, 3294 page); 3295 3296 if (ret_val) 3297 goto release; 3298 } 3299 3300 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, 3301 data); 3302 3303 release: 3304 hw->phy.ops.release(hw); 3305 return ret_val; 3306 } 3307 3308 /** 3309 * e1000_enable_phy_wakeup_reg_access_bm - enable access to BM wakeup registers 3310 * @hw: pointer to the HW structure 3311 * @phy_reg: pointer to store original contents of BM_WUC_ENABLE_REG 3312 * 3313 * Assumes semaphore already acquired and phy_reg points to a valid memory 3314 * address to store contents of the BM_WUC_ENABLE_REG register. 3315 **/ 3316 s32 e1000_enable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) 3317 { 3318 s32 ret_val; 3319 u16 temp; 3320 3321 DEBUGFUNC("e1000_enable_phy_wakeup_reg_access_bm"); 3322 3323 if (!phy_reg) 3324 return -E1000_ERR_PARAM; 3325 3326 /* All page select, port ctrl and wakeup registers use phy address 1 */ 3327 hw->phy.addr = 1; 3328 3329 /* Select Port Control Registers page */ 3330 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); 3331 if (ret_val) { 3332 DEBUGOUT("Could not set Port Control page\n"); 3333 return ret_val; 3334 } 3335 3336 ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg); 3337 if (ret_val) { 3338 DEBUGOUT2("Could not read PHY register %d.%d\n", 3339 BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG); 3340 return ret_val; 3341 } 3342 3343 /* Enable both PHY wakeup mode and Wakeup register page writes. 3344 * Prevent a power state change by disabling ME and Host PHY wakeup. 3345 */ 3346 temp = *phy_reg; 3347 temp |= BM_WUC_ENABLE_BIT; 3348 temp &= ~(BM_WUC_ME_WU_BIT | BM_WUC_HOST_WU_BIT); 3349 3350 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, temp); 3351 if (ret_val) { 3352 DEBUGOUT2("Could not write PHY register %d.%d\n", 3353 BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG); 3354 return ret_val; 3355 } 3356 3357 /* Select Host Wakeup Registers page - caller now able to write 3358 * registers on the Wakeup registers page 3359 */ 3360 return e1000_set_page_igp(hw, (BM_WUC_PAGE << IGP_PAGE_SHIFT)); 3361 } 3362 3363 /** 3364 * e1000_disable_phy_wakeup_reg_access_bm - disable access to BM wakeup regs 3365 * @hw: pointer to the HW structure 3366 * @phy_reg: pointer to original contents of BM_WUC_ENABLE_REG 3367 * 3368 * Restore BM_WUC_ENABLE_REG to its original value. 3369 * 3370 * Assumes semaphore already acquired and *phy_reg is the contents of the 3371 * BM_WUC_ENABLE_REG before register(s) on BM_WUC_PAGE were accessed by 3372 * caller. 3373 **/ 3374 s32 e1000_disable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) 3375 { 3376 s32 ret_val; 3377 3378 DEBUGFUNC("e1000_disable_phy_wakeup_reg_access_bm"); 3379 3380 if (!phy_reg) 3381 return -E1000_ERR_PARAM; 3382 3383 /* Select Port Control Registers page */ 3384 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); 3385 if (ret_val) { 3386 DEBUGOUT("Could not set Port Control page\n"); 3387 return ret_val; 3388 } 3389 3390 /* Restore 769.17 to its original value */ 3391 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, *phy_reg); 3392 if (ret_val) 3393 DEBUGOUT2("Could not restore PHY register %d.%d\n", 3394 BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG); 3395 3396 return ret_val; 3397 } 3398 3399 /** 3400 * e1000_access_phy_wakeup_reg_bm - Read/write BM PHY wakeup register 3401 * @hw: pointer to the HW structure 3402 * @offset: register offset to be read or written 3403 * @data: pointer to the data to read or write 3404 * @read: determines if operation is read or write 3405 * @page_set: BM_WUC_PAGE already set and access enabled 3406 * 3407 * Read the PHY register at offset and store the retrieved information in 3408 * data, or write data to PHY register at offset. Note the procedure to 3409 * access the PHY wakeup registers is different than reading the other PHY 3410 * registers. It works as such: 3411 * 1) Set 769.17.2 (page 769, register 17, bit 2) = 1 3412 * 2) Set page to 800 for host (801 if we were manageability) 3413 * 3) Write the address using the address opcode (0x11) 3414 * 4) Read or write the data using the data opcode (0x12) 3415 * 5) Restore 769.17.2 to its original value 3416 * 3417 * Steps 1 and 2 are done by e1000_enable_phy_wakeup_reg_access_bm() and 3418 * step 5 is done by e1000_disable_phy_wakeup_reg_access_bm(). 3419 * 3420 * Assumes semaphore is already acquired. When page_set==TRUE, assumes 3421 * the PHY page is set to BM_WUC_PAGE (i.e. a function in the call stack 3422 * is responsible for calls to e1000_[enable|disable]_phy_wakeup_reg_bm()). 3423 **/ 3424 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset, 3425 u16 *data, bool read, bool page_set) 3426 { 3427 s32 ret_val; 3428 u16 reg = BM_PHY_REG_NUM(offset); 3429 u16 page = BM_PHY_REG_PAGE(offset); 3430 u16 phy_reg = 0; 3431 3432 DEBUGFUNC("e1000_access_phy_wakeup_reg_bm"); 3433 3434 /* Gig must be disabled for MDIO accesses to Host Wakeup reg page */ 3435 if ((hw->mac.type == e1000_pchlan) && 3436 (!(E1000_READ_REG(hw, E1000_PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE))) 3437 DEBUGOUT1("Attempting to access page %d while gig enabled.\n", 3438 page); 3439 3440 if (!page_set) { 3441 /* Enable access to PHY wakeup registers */ 3442 ret_val = e1000_enable_phy_wakeup_reg_access_bm(hw, &phy_reg); 3443 if (ret_val) { 3444 DEBUGOUT("Could not enable PHY wakeup reg access\n"); 3445 return ret_val; 3446 } 3447 } 3448 3449 DEBUGOUT2("Accessing PHY page %d reg 0x%x\n", page, reg); 3450 3451 /* Write the Wakeup register page offset value using opcode 0x11 */ 3452 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg); 3453 if (ret_val) { 3454 DEBUGOUT1("Could not write address opcode to page %d\n", page); 3455 return ret_val; 3456 } 3457 3458 if (read) { 3459 /* Read the Wakeup register page value using opcode 0x12 */ 3460 ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, 3461 data); 3462 } else { 3463 /* Write the Wakeup register page value using opcode 0x12 */ 3464 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, 3465 *data); 3466 } 3467 3468 if (ret_val) { 3469 DEBUGOUT2("Could not access PHY reg %d.%d\n", page, reg); 3470 return ret_val; 3471 } 3472 3473 if (!page_set) 3474 ret_val = e1000_disable_phy_wakeup_reg_access_bm(hw, &phy_reg); 3475 3476 return ret_val; 3477 } 3478 3479 /** 3480 * e1000_power_up_phy_copper - Restore copper link in case of PHY power down 3481 * @hw: pointer to the HW structure 3482 * 3483 * In the case of a PHY power down to save power, or to turn off link during a 3484 * driver unload, or wake on lan is not enabled, restore the link to previous 3485 * settings. 3486 **/ 3487 void e1000_power_up_phy_copper(struct e1000_hw *hw) 3488 { 3489 u16 mii_reg = 0; 3490 u16 power_reg = 0; 3491 3492 /* The PHY will retain its settings across a power down/up cycle */ 3493 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg); 3494 mii_reg &= ~MII_CR_POWER_DOWN; 3495 if (hw->phy.type == e1000_phy_i210) { 3496 hw->phy.ops.read_reg(hw, GS40G_COPPER_SPEC, &power_reg); 3497 power_reg &= ~GS40G_CS_POWER_DOWN; 3498 hw->phy.ops.write_reg(hw, GS40G_COPPER_SPEC, power_reg); 3499 } 3500 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); 3501 } 3502 3503 /** 3504 * e1000_power_down_phy_copper - Restore copper link in case of PHY power down 3505 * @hw: pointer to the HW structure 3506 * 3507 * In the case of a PHY power down to save power, or to turn off link during a 3508 * driver unload, or wake on lan is not enabled, restore the link to previous 3509 * settings. 3510 **/ 3511 void e1000_power_down_phy_copper(struct e1000_hw *hw) 3512 { 3513 u16 mii_reg = 0; 3514 u16 power_reg = 0; 3515 3516 /* The PHY will retain its settings across a power down/up cycle */ 3517 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg); 3518 mii_reg |= MII_CR_POWER_DOWN; 3519 /* i210 Phy requires an additional bit for power up/down */ 3520 if (hw->phy.type == e1000_phy_i210) { 3521 hw->phy.ops.read_reg(hw, GS40G_COPPER_SPEC, &power_reg); 3522 power_reg |= GS40G_CS_POWER_DOWN; 3523 hw->phy.ops.write_reg(hw, GS40G_COPPER_SPEC, power_reg); 3524 } 3525 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); 3526 msec_delay(1); 3527 } 3528 3529 /** 3530 * __e1000_read_phy_reg_hv - Read HV PHY register 3531 * @hw: pointer to the HW structure 3532 * @offset: register offset to be read 3533 * @data: pointer to the read data 3534 * @locked: semaphore has already been acquired or not 3535 * 3536 * Acquires semaphore, if necessary, then reads the PHY register at offset 3537 * and stores the retrieved information in data. Release any acquired 3538 * semaphore before exiting. 3539 **/ 3540 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data, 3541 bool locked, bool page_set) 3542 { 3543 s32 ret_val; 3544 u16 page = BM_PHY_REG_PAGE(offset); 3545 u16 reg = BM_PHY_REG_NUM(offset); 3546 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); 3547 3548 DEBUGFUNC("__e1000_read_phy_reg_hv"); 3549 3550 if (!locked) { 3551 ret_val = hw->phy.ops.acquire(hw); 3552 if (ret_val) 3553 return ret_val; 3554 } 3555 3556 /* Page 800 works differently than the rest so it has its own func */ 3557 if (page == BM_WUC_PAGE) { 3558 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, 3559 TRUE, page_set); 3560 goto out; 3561 } 3562 3563 if (page > 0 && page < HV_INTC_FC_PAGE_START) { 3564 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, 3565 data, TRUE); 3566 goto out; 3567 } 3568 3569 if (!page_set) { 3570 if (page == HV_INTC_FC_PAGE_START) 3571 page = 0; 3572 3573 if (reg > MAX_PHY_MULTI_PAGE_REG) { 3574 /* Page is shifted left, PHY expects (page x 32) */ 3575 ret_val = e1000_set_page_igp(hw, 3576 (page << IGP_PAGE_SHIFT)); 3577 3578 hw->phy.addr = phy_addr; 3579 3580 if (ret_val) 3581 goto out; 3582 } 3583 } 3584 3585 DEBUGOUT3("reading PHY page %d (or 0x%x shifted) reg 0x%x\n", page, 3586 page << IGP_PAGE_SHIFT, reg); 3587 3588 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, 3589 data); 3590 out: 3591 if (!locked) 3592 hw->phy.ops.release(hw); 3593 3594 return ret_val; 3595 } 3596 3597 /** 3598 * e1000_read_phy_reg_hv - Read HV PHY register 3599 * @hw: pointer to the HW structure 3600 * @offset: register offset to be read 3601 * @data: pointer to the read data 3602 * 3603 * Acquires semaphore then reads the PHY register at offset and stores 3604 * the retrieved information in data. Release the acquired semaphore 3605 * before exiting. 3606 **/ 3607 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data) 3608 { 3609 return __e1000_read_phy_reg_hv(hw, offset, data, FALSE, FALSE); 3610 } 3611 3612 /** 3613 * e1000_read_phy_reg_hv_locked - Read HV PHY register 3614 * @hw: pointer to the HW structure 3615 * @offset: register offset to be read 3616 * @data: pointer to the read data 3617 * 3618 * Reads the PHY register at offset and stores the retrieved information 3619 * in data. Assumes semaphore already acquired. 3620 **/ 3621 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data) 3622 { 3623 return __e1000_read_phy_reg_hv(hw, offset, data, TRUE, FALSE); 3624 } 3625 3626 /** 3627 * e1000_read_phy_reg_page_hv - Read HV PHY register 3628 * @hw: pointer to the HW structure 3629 * @offset: register offset to write to 3630 * @data: data to write at register offset 3631 * 3632 * Reads the PHY register at offset and stores the retrieved information 3633 * in data. Assumes semaphore already acquired and page already set. 3634 **/ 3635 s32 e1000_read_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 *data) 3636 { 3637 return __e1000_read_phy_reg_hv(hw, offset, data, TRUE, true); 3638 } 3639 3640 /** 3641 * __e1000_write_phy_reg_hv - Write HV PHY register 3642 * @hw: pointer to the HW structure 3643 * @offset: register offset to write to 3644 * @data: data to write at register offset 3645 * @locked: semaphore has already been acquired or not 3646 * 3647 * Acquires semaphore, if necessary, then writes the data to PHY register 3648 * at the offset. Release any acquired semaphores before exiting. 3649 **/ 3650 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data, 3651 bool locked, bool page_set) 3652 { 3653 s32 ret_val; 3654 u16 page = BM_PHY_REG_PAGE(offset); 3655 u16 reg = BM_PHY_REG_NUM(offset); 3656 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); 3657 3658 DEBUGFUNC("__e1000_write_phy_reg_hv"); 3659 3660 if (!locked) { 3661 ret_val = hw->phy.ops.acquire(hw); 3662 if (ret_val) 3663 return ret_val; 3664 } 3665 3666 /* Page 800 works differently than the rest so it has its own func */ 3667 if (page == BM_WUC_PAGE) { 3668 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, 3669 FALSE, page_set); 3670 goto out; 3671 } 3672 3673 if (page > 0 && page < HV_INTC_FC_PAGE_START) { 3674 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, 3675 &data, FALSE); 3676 goto out; 3677 } 3678 3679 if (!page_set) { 3680 if (page == HV_INTC_FC_PAGE_START) 3681 page = 0; 3682 3683 /* Workaround MDIO accesses being disabled after entering IEEE 3684 * Power Down (when bit 11 of the PHY Control register is set) 3685 */ 3686 if ((hw->phy.type == e1000_phy_82578) && 3687 (hw->phy.revision >= 1) && 3688 (hw->phy.addr == 2) && 3689 !(MAX_PHY_REG_ADDRESS & reg) && 3690 (data & (1 << 11))) { 3691 u16 data2 = 0x7EFF; 3692 ret_val = e1000_access_phy_debug_regs_hv(hw, 3693 (1 << 6) | 0x3, 3694 &data2, FALSE); 3695 if (ret_val) 3696 goto out; 3697 } 3698 3699 if (reg > MAX_PHY_MULTI_PAGE_REG) { 3700 /* Page is shifted left, PHY expects (page x 32) */ 3701 ret_val = e1000_set_page_igp(hw, 3702 (page << IGP_PAGE_SHIFT)); 3703 3704 hw->phy.addr = phy_addr; 3705 3706 if (ret_val) 3707 goto out; 3708 } 3709 } 3710 3711 DEBUGOUT3("writing PHY page %d (or 0x%x shifted) reg 0x%x\n", page, 3712 page << IGP_PAGE_SHIFT, reg); 3713 3714 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, 3715 data); 3716 3717 out: 3718 if (!locked) 3719 hw->phy.ops.release(hw); 3720 3721 return ret_val; 3722 } 3723 3724 /** 3725 * e1000_write_phy_reg_hv - Write HV PHY register 3726 * @hw: pointer to the HW structure 3727 * @offset: register offset to write to 3728 * @data: data to write at register offset 3729 * 3730 * Acquires semaphore then writes the data to PHY register at the offset. 3731 * Release the acquired semaphores before exiting. 3732 **/ 3733 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data) 3734 { 3735 return __e1000_write_phy_reg_hv(hw, offset, data, FALSE, FALSE); 3736 } 3737 3738 /** 3739 * e1000_write_phy_reg_hv_locked - Write HV PHY register 3740 * @hw: pointer to the HW structure 3741 * @offset: register offset to write to 3742 * @data: data to write at register offset 3743 * 3744 * Writes the data to PHY register at the offset. Assumes semaphore 3745 * already acquired. 3746 **/ 3747 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data) 3748 { 3749 return __e1000_write_phy_reg_hv(hw, offset, data, TRUE, FALSE); 3750 } 3751 3752 /** 3753 * e1000_write_phy_reg_page_hv - Write HV PHY register 3754 * @hw: pointer to the HW structure 3755 * @offset: register offset to write to 3756 * @data: data to write at register offset 3757 * 3758 * Writes the data to PHY register at the offset. Assumes semaphore 3759 * already acquired and page already set. 3760 **/ 3761 s32 e1000_write_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 data) 3762 { 3763 return __e1000_write_phy_reg_hv(hw, offset, data, TRUE, true); 3764 } 3765 3766 /** 3767 * e1000_get_phy_addr_for_hv_page - Get PHY adrress based on page 3768 * @page: page to be accessed 3769 **/ 3770 static u32 e1000_get_phy_addr_for_hv_page(u32 page) 3771 { 3772 u32 phy_addr = 2; 3773 3774 if (page >= HV_INTC_FC_PAGE_START) 3775 phy_addr = 1; 3776 3777 return phy_addr; 3778 } 3779 3780 /** 3781 * e1000_access_phy_debug_regs_hv - Read HV PHY vendor specific high registers 3782 * @hw: pointer to the HW structure 3783 * @offset: register offset to be read or written 3784 * @data: pointer to the data to be read or written 3785 * @read: determines if operation is read or write 3786 * 3787 * Reads the PHY register at offset and stores the retreived information 3788 * in data. Assumes semaphore already acquired. Note that the procedure 3789 * to access these regs uses the address port and data port to read/write. 3790 * These accesses done with PHY address 2 and without using pages. 3791 **/ 3792 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset, 3793 u16 *data, bool read) 3794 { 3795 s32 ret_val; 3796 u32 addr_reg; 3797 u32 data_reg; 3798 3799 DEBUGFUNC("e1000_access_phy_debug_regs_hv"); 3800 3801 /* This takes care of the difference with desktop vs mobile phy */ 3802 addr_reg = ((hw->phy.type == e1000_phy_82578) ? 3803 I82578_ADDR_REG : I82577_ADDR_REG); 3804 data_reg = addr_reg + 1; 3805 3806 /* All operations in this function are phy address 2 */ 3807 hw->phy.addr = 2; 3808 3809 /* masking with 0x3F to remove the page from offset */ 3810 ret_val = e1000_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F); 3811 if (ret_val) { 3812 DEBUGOUT("Could not write the Address Offset port register\n"); 3813 return ret_val; 3814 } 3815 3816 /* Read or write the data value next */ 3817 if (read) 3818 ret_val = e1000_read_phy_reg_mdic(hw, data_reg, data); 3819 else 3820 ret_val = e1000_write_phy_reg_mdic(hw, data_reg, *data); 3821 3822 if (ret_val) 3823 DEBUGOUT("Could not access the Data port register\n"); 3824 3825 return ret_val; 3826 } 3827 3828 /** 3829 * e1000_link_stall_workaround_hv - Si workaround 3830 * @hw: pointer to the HW structure 3831 * 3832 * This function works around a Si bug where the link partner can get 3833 * a link up indication before the PHY does. If small packets are sent 3834 * by the link partner they can be placed in the packet buffer without 3835 * being properly accounted for by the PHY and will stall preventing 3836 * further packets from being received. The workaround is to clear the 3837 * packet buffer after the PHY detects link up. 3838 **/ 3839 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw) 3840 { 3841 s32 ret_val = E1000_SUCCESS; 3842 u16 data; 3843 3844 DEBUGFUNC("e1000_link_stall_workaround_hv"); 3845 3846 if (hw->phy.type != e1000_phy_82578) 3847 return E1000_SUCCESS; 3848 3849 /* Do not apply workaround if in PHY loopback bit 14 set */ 3850 hw->phy.ops.read_reg(hw, PHY_CONTROL, &data); 3851 if (data & PHY_CONTROL_LB) 3852 return E1000_SUCCESS; 3853 3854 /* check if link is up and at 1Gbps */ 3855 ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data); 3856 if (ret_val) 3857 return ret_val; 3858 3859 data &= (BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED | 3860 BM_CS_STATUS_SPEED_MASK); 3861 3862 if (data != (BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED | 3863 BM_CS_STATUS_SPEED_1000)) 3864 return E1000_SUCCESS; 3865 3866 msec_delay(200); 3867 3868 /* flush the packets in the fifo buffer */ 3869 ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, 3870 (HV_MUX_DATA_CTRL_GEN_TO_MAC | 3871 HV_MUX_DATA_CTRL_FORCE_SPEED)); 3872 if (ret_val) 3873 return ret_val; 3874 3875 return hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, 3876 HV_MUX_DATA_CTRL_GEN_TO_MAC); 3877 } 3878 3879 /** 3880 * e1000_check_polarity_82577 - Checks the polarity. 3881 * @hw: pointer to the HW structure 3882 * 3883 * Success returns 0, Failure returns -E1000_ERR_PHY (-2) 3884 * 3885 * Polarity is determined based on the PHY specific status register. 3886 **/ 3887 s32 e1000_check_polarity_82577(struct e1000_hw *hw) 3888 { 3889 struct e1000_phy_info *phy = &hw->phy; 3890 s32 ret_val; 3891 u16 data; 3892 3893 DEBUGFUNC("e1000_check_polarity_82577"); 3894 3895 ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); 3896 3897 if (!ret_val) 3898 phy->cable_polarity = ((data & I82577_PHY_STATUS2_REV_POLARITY) 3899 ? e1000_rev_polarity_reversed 3900 : e1000_rev_polarity_normal); 3901 3902 return ret_val; 3903 } 3904 3905 /** 3906 * e1000_phy_force_speed_duplex_82577 - Force speed/duplex for I82577 PHY 3907 * @hw: pointer to the HW structure 3908 * 3909 * Calls the PHY setup function to force speed and duplex. 3910 **/ 3911 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw) 3912 { 3913 struct e1000_phy_info *phy = &hw->phy; 3914 s32 ret_val; 3915 u16 phy_data; 3916 bool link; 3917 3918 DEBUGFUNC("e1000_phy_force_speed_duplex_82577"); 3919 3920 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); 3921 if (ret_val) 3922 return ret_val; 3923 3924 e1000_phy_force_speed_duplex_setup(hw, &phy_data); 3925 3926 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); 3927 if (ret_val) 3928 return ret_val; 3929 3930 usec_delay(1); 3931 3932 if (phy->autoneg_wait_to_complete) { 3933 DEBUGOUT("Waiting for forced speed/duplex link on 82577 phy\n"); 3934 3935 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 3936 100000, &link); 3937 if (ret_val) 3938 return ret_val; 3939 3940 if (!link) 3941 DEBUGOUT("Link taking longer than expected.\n"); 3942 3943 /* Try once more */ 3944 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 3945 100000, &link); 3946 } 3947 3948 return ret_val; 3949 } 3950 3951 /** 3952 * e1000_get_phy_info_82577 - Retrieve I82577 PHY information 3953 * @hw: pointer to the HW structure 3954 * 3955 * Read PHY status to determine if link is up. If link is up, then 3956 * set/determine 10base-T extended distance and polarity correction. Read 3957 * PHY port status to determine MDI/MDIx and speed. Based on the speed, 3958 * determine on the cable length, local and remote receiver. 3959 **/ 3960 s32 e1000_get_phy_info_82577(struct e1000_hw *hw) 3961 { 3962 struct e1000_phy_info *phy = &hw->phy; 3963 s32 ret_val; 3964 u16 data; 3965 bool link; 3966 3967 DEBUGFUNC("e1000_get_phy_info_82577"); 3968 3969 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); 3970 if (ret_val) 3971 return ret_val; 3972 3973 if (!link) { 3974 DEBUGOUT("Phy info is only valid if link is up\n"); 3975 return -E1000_ERR_CONFIG; 3976 } 3977 3978 phy->polarity_correction = TRUE; 3979 3980 ret_val = e1000_check_polarity_82577(hw); 3981 if (ret_val) 3982 return ret_val; 3983 3984 ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); 3985 if (ret_val) 3986 return ret_val; 3987 3988 phy->is_mdix = !!(data & I82577_PHY_STATUS2_MDIX); 3989 3990 if ((data & I82577_PHY_STATUS2_SPEED_MASK) == 3991 I82577_PHY_STATUS2_SPEED_1000MBPS) { 3992 ret_val = hw->phy.ops.get_cable_length(hw); 3993 if (ret_val) 3994 return ret_val; 3995 3996 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); 3997 if (ret_val) 3998 return ret_val; 3999 4000 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS) 4001 ? e1000_1000t_rx_status_ok 4002 : e1000_1000t_rx_status_not_ok; 4003 4004 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS) 4005 ? e1000_1000t_rx_status_ok 4006 : e1000_1000t_rx_status_not_ok; 4007 } else { 4008 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED; 4009 phy->local_rx = e1000_1000t_rx_status_undefined; 4010 phy->remote_rx = e1000_1000t_rx_status_undefined; 4011 } 4012 4013 return E1000_SUCCESS; 4014 } 4015 4016 /** 4017 * e1000_get_cable_length_82577 - Determine cable length for 82577 PHY 4018 * @hw: pointer to the HW structure 4019 * 4020 * Reads the diagnostic status register and verifies result is valid before 4021 * placing it in the phy_cable_length field. 4022 **/ 4023 s32 e1000_get_cable_length_82577(struct e1000_hw *hw) 4024 { 4025 struct e1000_phy_info *phy = &hw->phy; 4026 s32 ret_val; 4027 u16 phy_data, length; 4028 4029 DEBUGFUNC("e1000_get_cable_length_82577"); 4030 4031 ret_val = phy->ops.read_reg(hw, I82577_PHY_DIAG_STATUS, &phy_data); 4032 if (ret_val) 4033 return ret_val; 4034 4035 length = ((phy_data & I82577_DSTATUS_CABLE_LENGTH) >> 4036 I82577_DSTATUS_CABLE_LENGTH_SHIFT); 4037 4038 if (length == E1000_CABLE_LENGTH_UNDEFINED) 4039 return -E1000_ERR_PHY; 4040 4041 phy->cable_length = length; 4042 4043 return E1000_SUCCESS; 4044 } 4045 4046 /** 4047 * e1000_write_phy_reg_gs40g - Write GS40G PHY register 4048 * @hw: pointer to the HW structure 4049 * @offset: register offset to write to 4050 * @data: data to write at register offset 4051 * 4052 * Acquires semaphore, if necessary, then writes the data to PHY register 4053 * at the offset. Release any acquired semaphores before exiting. 4054 **/ 4055 s32 e1000_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data) 4056 { 4057 s32 ret_val; 4058 u16 page = offset >> GS40G_PAGE_SHIFT; 4059 4060 DEBUGFUNC("e1000_write_phy_reg_gs40g"); 4061 4062 offset = offset & GS40G_OFFSET_MASK; 4063 ret_val = hw->phy.ops.acquire(hw); 4064 if (ret_val) 4065 return ret_val; 4066 4067 ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page); 4068 if (ret_val) 4069 goto release; 4070 ret_val = e1000_write_phy_reg_mdic(hw, offset, data); 4071 4072 release: 4073 hw->phy.ops.release(hw); 4074 return ret_val; 4075 } 4076 4077 /** 4078 * e1000_read_phy_reg_gs40g - Read GS40G PHY register 4079 * @hw: pointer to the HW structure 4080 * @offset: lower half is register offset to read to 4081 * upper half is page to use. 4082 * @data: data to read at register offset 4083 * 4084 * Acquires semaphore, if necessary, then reads the data in the PHY register 4085 * at the offset. Release any acquired semaphores before exiting. 4086 **/ 4087 s32 e1000_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data) 4088 { 4089 s32 ret_val; 4090 u16 page = offset >> GS40G_PAGE_SHIFT; 4091 4092 DEBUGFUNC("e1000_read_phy_reg_gs40g"); 4093 4094 offset = offset & GS40G_OFFSET_MASK; 4095 ret_val = hw->phy.ops.acquire(hw); 4096 if (ret_val) 4097 return ret_val; 4098 4099 ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page); 4100 if (ret_val) 4101 goto release; 4102 ret_val = e1000_read_phy_reg_mdic(hw, offset, data); 4103 4104 release: 4105 hw->phy.ops.release(hw); 4106 return ret_val; 4107 } 4108 4109 /** 4110 * e1000_read_phy_reg_mphy - Read mPHY control register 4111 * @hw: pointer to the HW structure 4112 * @address: address to be read 4113 * @data: pointer to the read data 4114 * 4115 * Reads the mPHY control register in the PHY at offset and stores the 4116 * information read to data. 4117 **/ 4118 s32 e1000_read_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 *data) 4119 { 4120 u32 mphy_ctrl = 0; 4121 bool locked = FALSE; 4122 bool ready = FALSE; 4123 4124 DEBUGFUNC("e1000_read_phy_reg_mphy"); 4125 4126 /* Check if mPHY is ready to read/write operations */ 4127 ready = e1000_is_mphy_ready(hw); 4128 if (!ready) 4129 return -E1000_ERR_PHY; 4130 4131 /* Check if mPHY access is disabled and enable it if so */ 4132 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); 4133 if (mphy_ctrl & E1000_MPHY_DIS_ACCESS) { 4134 locked = TRUE; 4135 ready = e1000_is_mphy_ready(hw); 4136 if (!ready) 4137 return -E1000_ERR_PHY; 4138 mphy_ctrl |= E1000_MPHY_ENA_ACCESS; 4139 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); 4140 } 4141 4142 /* Set the address that we want to read */ 4143 ready = e1000_is_mphy_ready(hw); 4144 if (!ready) 4145 return -E1000_ERR_PHY; 4146 4147 /* We mask address, because we want to use only current lane */ 4148 mphy_ctrl = (mphy_ctrl & ~E1000_MPHY_ADDRESS_MASK & 4149 ~E1000_MPHY_ADDRESS_FNC_OVERRIDE) | 4150 (address & E1000_MPHY_ADDRESS_MASK); 4151 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); 4152 4153 /* Read data from the address */ 4154 ready = e1000_is_mphy_ready(hw); 4155 if (!ready) 4156 return -E1000_ERR_PHY; 4157 *data = E1000_READ_REG(hw, E1000_MPHY_DATA); 4158 4159 /* Disable access to mPHY if it was originally disabled */ 4160 if (locked) 4161 ready = e1000_is_mphy_ready(hw); 4162 if (!ready) 4163 return -E1000_ERR_PHY; 4164 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, 4165 E1000_MPHY_DIS_ACCESS); 4166 4167 return E1000_SUCCESS; 4168 } 4169 4170 /** 4171 * e1000_write_phy_reg_mphy - Write mPHY control register 4172 * @hw: pointer to the HW structure 4173 * @address: address to write to 4174 * @data: data to write to register at offset 4175 * @line_override: used when we want to use different line than default one 4176 * 4177 * Writes data to mPHY control register. 4178 **/ 4179 s32 e1000_write_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 data, 4180 bool line_override) 4181 { 4182 u32 mphy_ctrl = 0; 4183 bool locked = FALSE; 4184 bool ready = FALSE; 4185 4186 DEBUGFUNC("e1000_write_phy_reg_mphy"); 4187 4188 /* Check if mPHY is ready to read/write operations */ 4189 ready = e1000_is_mphy_ready(hw); 4190 if (!ready) 4191 return -E1000_ERR_PHY; 4192 4193 /* Check if mPHY access is disabled and enable it if so */ 4194 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); 4195 if (mphy_ctrl & E1000_MPHY_DIS_ACCESS) { 4196 locked = TRUE; 4197 ready = e1000_is_mphy_ready(hw); 4198 if (!ready) 4199 return -E1000_ERR_PHY; 4200 mphy_ctrl |= E1000_MPHY_ENA_ACCESS; 4201 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); 4202 } 4203 4204 /* Set the address that we want to read */ 4205 ready = e1000_is_mphy_ready(hw); 4206 if (!ready) 4207 return -E1000_ERR_PHY; 4208 4209 /* We mask address, because we want to use only current lane */ 4210 if (line_override) 4211 mphy_ctrl |= E1000_MPHY_ADDRESS_FNC_OVERRIDE; 4212 else 4213 mphy_ctrl &= ~E1000_MPHY_ADDRESS_FNC_OVERRIDE; 4214 mphy_ctrl = (mphy_ctrl & ~E1000_MPHY_ADDRESS_MASK) | 4215 (address & E1000_MPHY_ADDRESS_MASK); 4216 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); 4217 4218 /* Read data from the address */ 4219 ready = e1000_is_mphy_ready(hw); 4220 if (!ready) 4221 return -E1000_ERR_PHY; 4222 E1000_WRITE_REG(hw, E1000_MPHY_DATA, data); 4223 4224 /* Disable access to mPHY if it was originally disabled */ 4225 if (locked) 4226 ready = e1000_is_mphy_ready(hw); 4227 if (!ready) 4228 return -E1000_ERR_PHY; 4229 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, 4230 E1000_MPHY_DIS_ACCESS); 4231 4232 return E1000_SUCCESS; 4233 } 4234 4235 /** 4236 * e1000_is_mphy_ready - Check if mPHY control register is not busy 4237 * @hw: pointer to the HW structure 4238 * 4239 * Returns mPHY control register status. 4240 **/ 4241 bool e1000_is_mphy_ready(struct e1000_hw *hw) 4242 { 4243 u16 retry_count = 0; 4244 u32 mphy_ctrl = 0; 4245 bool ready = FALSE; 4246 4247 while (retry_count < 2) { 4248 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); 4249 if (mphy_ctrl & E1000_MPHY_BUSY) { 4250 usec_delay(20); 4251 retry_count++; 4252 continue; 4253 } 4254 ready = TRUE; 4255 break; 4256 } 4257 4258 if (!ready) 4259 DEBUGOUT("ERROR READING mPHY control register, phy is busy.\n"); 4260 4261 return ready; 4262 } 4263