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