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