cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

e1000_phy.c (69936B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright(c) 2007 - 2018 Intel Corporation. */
      3
      4#include <linux/if_ether.h>
      5#include <linux/delay.h>
      6
      7#include "e1000_mac.h"
      8#include "e1000_phy.h"
      9
     10static s32  igb_phy_setup_autoneg(struct e1000_hw *hw);
     11static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
     12					     u16 *phy_ctrl);
     13static s32  igb_wait_autoneg(struct e1000_hw *hw);
     14static s32  igb_set_master_slave_mode(struct e1000_hw *hw);
     15
     16/* Cable length tables */
     17static const u16 e1000_m88_cable_length_table[] = {
     18	0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
     19
     20static const u16 e1000_igp_2_cable_length_table[] = {
     21	0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
     22	0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
     23	6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
     24	21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
     25	40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
     26	60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
     27	83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
     28	104, 109, 114, 118, 121, 124};
     29
     30/**
     31 *  igb_check_reset_block - Check if PHY reset is blocked
     32 *  @hw: pointer to the HW structure
     33 *
     34 *  Read the PHY management control register and check whether a PHY reset
     35 *  is blocked.  If a reset is not blocked return 0, otherwise
     36 *  return E1000_BLK_PHY_RESET (12).
     37 **/
     38s32 igb_check_reset_block(struct e1000_hw *hw)
     39{
     40	u32 manc;
     41
     42	manc = rd32(E1000_MANC);
     43
     44	return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ? E1000_BLK_PHY_RESET : 0;
     45}
     46
     47/**
     48 *  igb_get_phy_id - Retrieve the PHY ID and revision
     49 *  @hw: pointer to the HW structure
     50 *
     51 *  Reads the PHY registers and stores the PHY ID and possibly the PHY
     52 *  revision in the hardware structure.
     53 **/
     54s32 igb_get_phy_id(struct e1000_hw *hw)
     55{
     56	struct e1000_phy_info *phy = &hw->phy;
     57	s32 ret_val = 0;
     58	u16 phy_id;
     59
     60	/* ensure PHY page selection to fix misconfigured i210 */
     61	if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211))
     62		phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0);
     63
     64	ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
     65	if (ret_val)
     66		goto out;
     67
     68	phy->id = (u32)(phy_id << 16);
     69	udelay(20);
     70	ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
     71	if (ret_val)
     72		goto out;
     73
     74	phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
     75	phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
     76
     77out:
     78	return ret_val;
     79}
     80
     81/**
     82 *  igb_phy_reset_dsp - Reset PHY DSP
     83 *  @hw: pointer to the HW structure
     84 *
     85 *  Reset the digital signal processor.
     86 **/
     87static s32 igb_phy_reset_dsp(struct e1000_hw *hw)
     88{
     89	s32 ret_val = 0;
     90
     91	if (!(hw->phy.ops.write_reg))
     92		goto out;
     93
     94	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
     95	if (ret_val)
     96		goto out;
     97
     98	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0);
     99
    100out:
    101	return ret_val;
    102}
    103
    104/**
    105 *  igb_read_phy_reg_mdic - Read MDI control register
    106 *  @hw: pointer to the HW structure
    107 *  @offset: register offset to be read
    108 *  @data: pointer to the read data
    109 *
    110 *  Reads the MDI control register in the PHY at offset and stores the
    111 *  information read to data.
    112 **/
    113s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
    114{
    115	struct e1000_phy_info *phy = &hw->phy;
    116	u32 i, mdic = 0;
    117	s32 ret_val = 0;
    118
    119	if (offset > MAX_PHY_REG_ADDRESS) {
    120		hw_dbg("PHY Address %d is out of range\n", offset);
    121		ret_val = -E1000_ERR_PARAM;
    122		goto out;
    123	}
    124
    125	/* Set up Op-code, Phy Address, and register offset in the MDI
    126	 * Control register.  The MAC will take care of interfacing with the
    127	 * PHY to retrieve the desired data.
    128	 */
    129	mdic = ((offset << E1000_MDIC_REG_SHIFT) |
    130		(phy->addr << E1000_MDIC_PHY_SHIFT) |
    131		(E1000_MDIC_OP_READ));
    132
    133	wr32(E1000_MDIC, mdic);
    134
    135	/* Poll the ready bit to see if the MDI read completed
    136	 * Increasing the time out as testing showed failures with
    137	 * the lower time out
    138	 */
    139	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
    140		udelay(50);
    141		mdic = rd32(E1000_MDIC);
    142		if (mdic & E1000_MDIC_READY)
    143			break;
    144	}
    145	if (!(mdic & E1000_MDIC_READY)) {
    146		hw_dbg("MDI Read did not complete\n");
    147		ret_val = -E1000_ERR_PHY;
    148		goto out;
    149	}
    150	if (mdic & E1000_MDIC_ERROR) {
    151		hw_dbg("MDI Error\n");
    152		ret_val = -E1000_ERR_PHY;
    153		goto out;
    154	}
    155	*data = (u16) mdic;
    156
    157out:
    158	return ret_val;
    159}
    160
    161/**
    162 *  igb_write_phy_reg_mdic - Write MDI control register
    163 *  @hw: pointer to the HW structure
    164 *  @offset: register offset to write to
    165 *  @data: data to write to register at offset
    166 *
    167 *  Writes data to MDI control register in the PHY at offset.
    168 **/
    169s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
    170{
    171	struct e1000_phy_info *phy = &hw->phy;
    172	u32 i, mdic = 0;
    173	s32 ret_val = 0;
    174
    175	if (offset > MAX_PHY_REG_ADDRESS) {
    176		hw_dbg("PHY Address %d is out of range\n", offset);
    177		ret_val = -E1000_ERR_PARAM;
    178		goto out;
    179	}
    180
    181	/* Set up Op-code, Phy Address, and register offset in the MDI
    182	 * Control register.  The MAC will take care of interfacing with the
    183	 * PHY to retrieve the desired data.
    184	 */
    185	mdic = (((u32)data) |
    186		(offset << E1000_MDIC_REG_SHIFT) |
    187		(phy->addr << E1000_MDIC_PHY_SHIFT) |
    188		(E1000_MDIC_OP_WRITE));
    189
    190	wr32(E1000_MDIC, mdic);
    191
    192	/* Poll the ready bit to see if the MDI read completed
    193	 * Increasing the time out as testing showed failures with
    194	 * the lower time out
    195	 */
    196	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
    197		udelay(50);
    198		mdic = rd32(E1000_MDIC);
    199		if (mdic & E1000_MDIC_READY)
    200			break;
    201	}
    202	if (!(mdic & E1000_MDIC_READY)) {
    203		hw_dbg("MDI Write did not complete\n");
    204		ret_val = -E1000_ERR_PHY;
    205		goto out;
    206	}
    207	if (mdic & E1000_MDIC_ERROR) {
    208		hw_dbg("MDI Error\n");
    209		ret_val = -E1000_ERR_PHY;
    210		goto out;
    211	}
    212
    213out:
    214	return ret_val;
    215}
    216
    217/**
    218 *  igb_read_phy_reg_i2c - Read PHY register using i2c
    219 *  @hw: pointer to the HW structure
    220 *  @offset: register offset to be read
    221 *  @data: pointer to the read data
    222 *
    223 *  Reads the PHY register at offset using the i2c interface and stores the
    224 *  retrieved information in data.
    225 **/
    226s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
    227{
    228	struct e1000_phy_info *phy = &hw->phy;
    229	u32 i, i2ccmd = 0;
    230
    231	/* Set up Op-code, Phy Address, and register address in the I2CCMD
    232	 * register.  The MAC will take care of interfacing with the
    233	 * PHY to retrieve the desired data.
    234	 */
    235	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
    236		  (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
    237		  (E1000_I2CCMD_OPCODE_READ));
    238
    239	wr32(E1000_I2CCMD, i2ccmd);
    240
    241	/* Poll the ready bit to see if the I2C read completed */
    242	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
    243		udelay(50);
    244		i2ccmd = rd32(E1000_I2CCMD);
    245		if (i2ccmd & E1000_I2CCMD_READY)
    246			break;
    247	}
    248	if (!(i2ccmd & E1000_I2CCMD_READY)) {
    249		hw_dbg("I2CCMD Read did not complete\n");
    250		return -E1000_ERR_PHY;
    251	}
    252	if (i2ccmd & E1000_I2CCMD_ERROR) {
    253		hw_dbg("I2CCMD Error bit set\n");
    254		return -E1000_ERR_PHY;
    255	}
    256
    257	/* Need to byte-swap the 16-bit value. */
    258	*data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
    259
    260	return 0;
    261}
    262
    263/**
    264 *  igb_write_phy_reg_i2c - Write PHY register using i2c
    265 *  @hw: pointer to the HW structure
    266 *  @offset: register offset to write to
    267 *  @data: data to write at register offset
    268 *
    269 *  Writes the data to PHY register at the offset using the i2c interface.
    270 **/
    271s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
    272{
    273	struct e1000_phy_info *phy = &hw->phy;
    274	u32 i, i2ccmd = 0;
    275	u16 phy_data_swapped;
    276
    277	/* Prevent overwriting SFP I2C EEPROM which is at A0 address.*/
    278	if ((hw->phy.addr == 0) || (hw->phy.addr > 7)) {
    279		hw_dbg("PHY I2C Address %d is out of range.\n",
    280			  hw->phy.addr);
    281		return -E1000_ERR_CONFIG;
    282	}
    283
    284	/* Swap the data bytes for the I2C interface */
    285	phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
    286
    287	/* Set up Op-code, Phy Address, and register address in the I2CCMD
    288	 * register.  The MAC will take care of interfacing with the
    289	 * PHY to retrieve the desired data.
    290	 */
    291	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
    292		  (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
    293		  E1000_I2CCMD_OPCODE_WRITE |
    294		  phy_data_swapped);
    295
    296	wr32(E1000_I2CCMD, i2ccmd);
    297
    298	/* Poll the ready bit to see if the I2C read completed */
    299	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
    300		udelay(50);
    301		i2ccmd = rd32(E1000_I2CCMD);
    302		if (i2ccmd & E1000_I2CCMD_READY)
    303			break;
    304	}
    305	if (!(i2ccmd & E1000_I2CCMD_READY)) {
    306		hw_dbg("I2CCMD Write did not complete\n");
    307		return -E1000_ERR_PHY;
    308	}
    309	if (i2ccmd & E1000_I2CCMD_ERROR) {
    310		hw_dbg("I2CCMD Error bit set\n");
    311		return -E1000_ERR_PHY;
    312	}
    313
    314	return 0;
    315}
    316
    317/**
    318 *  igb_read_sfp_data_byte - Reads SFP module data.
    319 *  @hw: pointer to the HW structure
    320 *  @offset: byte location offset to be read
    321 *  @data: read data buffer pointer
    322 *
    323 *  Reads one byte from SFP module data stored
    324 *  in SFP resided EEPROM memory or SFP diagnostic area.
    325 *  Function should be called with
    326 *  E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access
    327 *  E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters
    328 *  access
    329 **/
    330s32 igb_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data)
    331{
    332	u32 i = 0;
    333	u32 i2ccmd = 0;
    334	u32 data_local = 0;
    335
    336	if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) {
    337		hw_dbg("I2CCMD command address exceeds upper limit\n");
    338		return -E1000_ERR_PHY;
    339	}
    340
    341	/* Set up Op-code, EEPROM Address,in the I2CCMD
    342	 * register. The MAC will take care of interfacing with the
    343	 * EEPROM to retrieve the desired data.
    344	 */
    345	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
    346		  E1000_I2CCMD_OPCODE_READ);
    347
    348	wr32(E1000_I2CCMD, i2ccmd);
    349
    350	/* Poll the ready bit to see if the I2C read completed */
    351	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
    352		udelay(50);
    353		data_local = rd32(E1000_I2CCMD);
    354		if (data_local & E1000_I2CCMD_READY)
    355			break;
    356	}
    357	if (!(data_local & E1000_I2CCMD_READY)) {
    358		hw_dbg("I2CCMD Read did not complete\n");
    359		return -E1000_ERR_PHY;
    360	}
    361	if (data_local & E1000_I2CCMD_ERROR) {
    362		hw_dbg("I2CCMD Error bit set\n");
    363		return -E1000_ERR_PHY;
    364	}
    365	*data = (u8) data_local & 0xFF;
    366
    367	return 0;
    368}
    369
    370/**
    371 *  igb_read_phy_reg_igp - Read igp PHY register
    372 *  @hw: pointer to the HW structure
    373 *  @offset: register offset to be read
    374 *  @data: pointer to the read data
    375 *
    376 *  Acquires semaphore, if necessary, then reads the PHY register at offset
    377 *  and storing the retrieved information in data.  Release any acquired
    378 *  semaphores before exiting.
    379 **/
    380s32 igb_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
    381{
    382	s32 ret_val = 0;
    383
    384	if (!(hw->phy.ops.acquire))
    385		goto out;
    386
    387	ret_val = hw->phy.ops.acquire(hw);
    388	if (ret_val)
    389		goto out;
    390
    391	if (offset > MAX_PHY_MULTI_PAGE_REG) {
    392		ret_val = igb_write_phy_reg_mdic(hw,
    393						 IGP01E1000_PHY_PAGE_SELECT,
    394						 (u16)offset);
    395		if (ret_val) {
    396			hw->phy.ops.release(hw);
    397			goto out;
    398		}
    399	}
    400
    401	ret_val = igb_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
    402					data);
    403
    404	hw->phy.ops.release(hw);
    405
    406out:
    407	return ret_val;
    408}
    409
    410/**
    411 *  igb_write_phy_reg_igp - Write igp PHY register
    412 *  @hw: pointer to the HW structure
    413 *  @offset: register offset to write to
    414 *  @data: data to write at register offset
    415 *
    416 *  Acquires semaphore, if necessary, then writes the data to PHY register
    417 *  at the offset.  Release any acquired semaphores before exiting.
    418 **/
    419s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
    420{
    421	s32 ret_val = 0;
    422
    423	if (!(hw->phy.ops.acquire))
    424		goto out;
    425
    426	ret_val = hw->phy.ops.acquire(hw);
    427	if (ret_val)
    428		goto out;
    429
    430	if (offset > MAX_PHY_MULTI_PAGE_REG) {
    431		ret_val = igb_write_phy_reg_mdic(hw,
    432						 IGP01E1000_PHY_PAGE_SELECT,
    433						 (u16)offset);
    434		if (ret_val) {
    435			hw->phy.ops.release(hw);
    436			goto out;
    437		}
    438	}
    439
    440	ret_val = igb_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
    441					 data);
    442
    443	hw->phy.ops.release(hw);
    444
    445out:
    446	return ret_val;
    447}
    448
    449/**
    450 *  igb_copper_link_setup_82580 - Setup 82580 PHY for copper link
    451 *  @hw: pointer to the HW structure
    452 *
    453 *  Sets up Carrier-sense on Transmit and downshift values.
    454 **/
    455s32 igb_copper_link_setup_82580(struct e1000_hw *hw)
    456{
    457	struct e1000_phy_info *phy = &hw->phy;
    458	s32 ret_val;
    459	u16 phy_data;
    460
    461	if (phy->reset_disable) {
    462		ret_val = 0;
    463		goto out;
    464	}
    465
    466	if (phy->type == e1000_phy_82580) {
    467		ret_val = hw->phy.ops.reset(hw);
    468		if (ret_val) {
    469			hw_dbg("Error resetting the PHY.\n");
    470			goto out;
    471		}
    472	}
    473
    474	/* Enable CRS on TX. This must be set for half-duplex operation. */
    475	ret_val = phy->ops.read_reg(hw, I82580_CFG_REG, &phy_data);
    476	if (ret_val)
    477		goto out;
    478
    479	phy_data |= I82580_CFG_ASSERT_CRS_ON_TX;
    480
    481	/* Enable downshift */
    482	phy_data |= I82580_CFG_ENABLE_DOWNSHIFT;
    483
    484	ret_val = phy->ops.write_reg(hw, I82580_CFG_REG, phy_data);
    485	if (ret_val)
    486		goto out;
    487
    488	/* Set MDI/MDIX mode */
    489	ret_val = phy->ops.read_reg(hw, I82580_PHY_CTRL_2, &phy_data);
    490	if (ret_val)
    491		goto out;
    492	phy_data &= ~I82580_PHY_CTRL2_MDIX_CFG_MASK;
    493	/* Options:
    494	 *   0 - Auto (default)
    495	 *   1 - MDI mode
    496	 *   2 - MDI-X mode
    497	 */
    498	switch (hw->phy.mdix) {
    499	case 1:
    500		break;
    501	case 2:
    502		phy_data |= I82580_PHY_CTRL2_MANUAL_MDIX;
    503		break;
    504	case 0:
    505	default:
    506		phy_data |= I82580_PHY_CTRL2_AUTO_MDI_MDIX;
    507		break;
    508	}
    509	ret_val = hw->phy.ops.write_reg(hw, I82580_PHY_CTRL_2, phy_data);
    510
    511out:
    512	return ret_val;
    513}
    514
    515/**
    516 *  igb_copper_link_setup_m88 - Setup m88 PHY's for copper link
    517 *  @hw: pointer to the HW structure
    518 *
    519 *  Sets up MDI/MDI-X and polarity for m88 PHY's.  If necessary, transmit clock
    520 *  and downshift values are set also.
    521 **/
    522s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
    523{
    524	struct e1000_phy_info *phy = &hw->phy;
    525	s32 ret_val;
    526	u16 phy_data;
    527
    528	if (phy->reset_disable) {
    529		ret_val = 0;
    530		goto out;
    531	}
    532
    533	/* Enable CRS on TX. This must be set for half-duplex operation. */
    534	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
    535	if (ret_val)
    536		goto out;
    537
    538	phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
    539
    540	/* Options:
    541	 *   MDI/MDI-X = 0 (default)
    542	 *   0 - Auto for all speeds
    543	 *   1 - MDI mode
    544	 *   2 - MDI-X mode
    545	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
    546	 */
    547	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
    548
    549	switch (phy->mdix) {
    550	case 1:
    551		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
    552		break;
    553	case 2:
    554		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
    555		break;
    556	case 3:
    557		phy_data |= M88E1000_PSCR_AUTO_X_1000T;
    558		break;
    559	case 0:
    560	default:
    561		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
    562		break;
    563	}
    564
    565	/* Options:
    566	 *   disable_polarity_correction = 0 (default)
    567	 *       Automatic Correction for Reversed Cable Polarity
    568	 *   0 - Disabled
    569	 *   1 - Enabled
    570	 */
    571	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
    572	if (phy->disable_polarity_correction == 1)
    573		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
    574
    575	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
    576	if (ret_val)
    577		goto out;
    578
    579	if (phy->revision < E1000_REVISION_4) {
    580		/* Force TX_CLK in the Extended PHY Specific Control Register
    581		 * to 25MHz clock.
    582		 */
    583		ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
    584					    &phy_data);
    585		if (ret_val)
    586			goto out;
    587
    588		phy_data |= M88E1000_EPSCR_TX_CLK_25;
    589
    590		if ((phy->revision == E1000_REVISION_2) &&
    591		    (phy->id == M88E1111_I_PHY_ID)) {
    592			/* 82573L PHY - set the downshift counter to 5x. */
    593			phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
    594			phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
    595		} else {
    596			/* Configure Master and Slave downshift values */
    597			phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
    598				      M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
    599			phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
    600				     M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
    601		}
    602		ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
    603					     phy_data);
    604		if (ret_val)
    605			goto out;
    606	}
    607
    608	/* Commit the changes. */
    609	ret_val = igb_phy_sw_reset(hw);
    610	if (ret_val) {
    611		hw_dbg("Error committing the PHY changes\n");
    612		goto out;
    613	}
    614
    615out:
    616	return ret_val;
    617}
    618
    619/**
    620 *  igb_copper_link_setup_m88_gen2 - Setup m88 PHY's for copper link
    621 *  @hw: pointer to the HW structure
    622 *
    623 *  Sets up MDI/MDI-X and polarity for i347-AT4, m88e1322 and m88e1112 PHY's.
    624 *  Also enables and sets the downshift parameters.
    625 **/
    626s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
    627{
    628	struct e1000_phy_info *phy = &hw->phy;
    629	s32 ret_val;
    630	u16 phy_data;
    631
    632	if (phy->reset_disable)
    633		return 0;
    634
    635	/* Enable CRS on Tx. This must be set for half-duplex operation. */
    636	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
    637	if (ret_val)
    638		return ret_val;
    639
    640	/* Options:
    641	 *   MDI/MDI-X = 0 (default)
    642	 *   0 - Auto for all speeds
    643	 *   1 - MDI mode
    644	 *   2 - MDI-X mode
    645	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
    646	 */
    647	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
    648
    649	switch (phy->mdix) {
    650	case 1:
    651		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
    652		break;
    653	case 2:
    654		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
    655		break;
    656	case 3:
    657		/* M88E1112 does not support this mode) */
    658		if (phy->id != M88E1112_E_PHY_ID) {
    659			phy_data |= M88E1000_PSCR_AUTO_X_1000T;
    660			break;
    661		}
    662		fallthrough;
    663	case 0:
    664	default:
    665		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
    666		break;
    667	}
    668
    669	/* Options:
    670	 *   disable_polarity_correction = 0 (default)
    671	 *       Automatic Correction for Reversed Cable Polarity
    672	 *   0 - Disabled
    673	 *   1 - Enabled
    674	 */
    675	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
    676	if (phy->disable_polarity_correction == 1)
    677		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
    678
    679	/* Enable downshift and setting it to X6 */
    680	if (phy->id == M88E1543_E_PHY_ID) {
    681		phy_data &= ~I347AT4_PSCR_DOWNSHIFT_ENABLE;
    682		ret_val =
    683		    phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
    684		if (ret_val)
    685			return ret_val;
    686
    687		ret_val = igb_phy_sw_reset(hw);
    688		if (ret_val) {
    689			hw_dbg("Error committing the PHY changes\n");
    690			return ret_val;
    691		}
    692	}
    693
    694	phy_data &= ~I347AT4_PSCR_DOWNSHIFT_MASK;
    695	phy_data |= I347AT4_PSCR_DOWNSHIFT_6X;
    696	phy_data |= I347AT4_PSCR_DOWNSHIFT_ENABLE;
    697
    698	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
    699	if (ret_val)
    700		return ret_val;
    701
    702	/* Commit the changes. */
    703	ret_val = igb_phy_sw_reset(hw);
    704	if (ret_val) {
    705		hw_dbg("Error committing the PHY changes\n");
    706		return ret_val;
    707	}
    708	ret_val = igb_set_master_slave_mode(hw);
    709	if (ret_val)
    710		return ret_val;
    711
    712	return 0;
    713}
    714
    715/**
    716 *  igb_copper_link_setup_igp - Setup igp PHY's for copper link
    717 *  @hw: pointer to the HW structure
    718 *
    719 *  Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
    720 *  igp PHY's.
    721 **/
    722s32 igb_copper_link_setup_igp(struct e1000_hw *hw)
    723{
    724	struct e1000_phy_info *phy = &hw->phy;
    725	s32 ret_val;
    726	u16 data;
    727
    728	if (phy->reset_disable) {
    729		ret_val = 0;
    730		goto out;
    731	}
    732
    733	ret_val = phy->ops.reset(hw);
    734	if (ret_val) {
    735		hw_dbg("Error resetting the PHY.\n");
    736		goto out;
    737	}
    738
    739	/* Wait 100ms for MAC to configure PHY from NVM settings, to avoid
    740	 * timeout issues when LFS is enabled.
    741	 */
    742	msleep(100);
    743
    744	/* The NVM settings will configure LPLU in D3 for
    745	 * non-IGP1 PHYs.
    746	 */
    747	if (phy->type == e1000_phy_igp) {
    748		/* disable lplu d3 during driver init */
    749		if (phy->ops.set_d3_lplu_state)
    750			ret_val = phy->ops.set_d3_lplu_state(hw, false);
    751		if (ret_val) {
    752			hw_dbg("Error Disabling LPLU D3\n");
    753			goto out;
    754		}
    755	}
    756
    757	/* disable lplu d0 during driver init */
    758	ret_val = phy->ops.set_d0_lplu_state(hw, false);
    759	if (ret_val) {
    760		hw_dbg("Error Disabling LPLU D0\n");
    761		goto out;
    762	}
    763	/* Configure mdi-mdix settings */
    764	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data);
    765	if (ret_val)
    766		goto out;
    767
    768	data &= ~IGP01E1000_PSCR_AUTO_MDIX;
    769
    770	switch (phy->mdix) {
    771	case 1:
    772		data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
    773		break;
    774	case 2:
    775		data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
    776		break;
    777	case 0:
    778	default:
    779		data |= IGP01E1000_PSCR_AUTO_MDIX;
    780		break;
    781	}
    782	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data);
    783	if (ret_val)
    784		goto out;
    785
    786	/* set auto-master slave resolution settings */
    787	if (hw->mac.autoneg) {
    788		/* when autonegotiation advertisement is only 1000Mbps then we
    789		 * should disable SmartSpeed and enable Auto MasterSlave
    790		 * resolution as hardware default.
    791		 */
    792		if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
    793			/* Disable SmartSpeed */
    794			ret_val = phy->ops.read_reg(hw,
    795						    IGP01E1000_PHY_PORT_CONFIG,
    796						    &data);
    797			if (ret_val)
    798				goto out;
    799
    800			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
    801			ret_val = phy->ops.write_reg(hw,
    802						     IGP01E1000_PHY_PORT_CONFIG,
    803						     data);
    804			if (ret_val)
    805				goto out;
    806
    807			/* Set auto Master/Slave resolution process */
    808			ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
    809			if (ret_val)
    810				goto out;
    811
    812			data &= ~CR_1000T_MS_ENABLE;
    813			ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
    814			if (ret_val)
    815				goto out;
    816		}
    817
    818		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
    819		if (ret_val)
    820			goto out;
    821
    822		/* load defaults for future use */
    823		phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
    824			((data & CR_1000T_MS_VALUE) ?
    825			e1000_ms_force_master :
    826			e1000_ms_force_slave) :
    827			e1000_ms_auto;
    828
    829		switch (phy->ms_type) {
    830		case e1000_ms_force_master:
    831			data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
    832			break;
    833		case e1000_ms_force_slave:
    834			data |= CR_1000T_MS_ENABLE;
    835			data &= ~(CR_1000T_MS_VALUE);
    836			break;
    837		case e1000_ms_auto:
    838			data &= ~CR_1000T_MS_ENABLE;
    839			break;
    840		default:
    841			break;
    842		}
    843		ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
    844		if (ret_val)
    845			goto out;
    846	}
    847
    848out:
    849	return ret_val;
    850}
    851
    852/**
    853 *  igb_copper_link_autoneg - Setup/Enable autoneg for copper link
    854 *  @hw: pointer to the HW structure
    855 *
    856 *  Performs initial bounds checking on autoneg advertisement parameter, then
    857 *  configure to advertise the full capability.  Setup the PHY to autoneg
    858 *  and restart the negotiation process between the link partner.  If
    859 *  autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
    860 **/
    861static s32 igb_copper_link_autoneg(struct e1000_hw *hw)
    862{
    863	struct e1000_phy_info *phy = &hw->phy;
    864	s32 ret_val;
    865	u16 phy_ctrl;
    866
    867	/* Perform some bounds checking on the autoneg advertisement
    868	 * parameter.
    869	 */
    870	phy->autoneg_advertised &= phy->autoneg_mask;
    871
    872	/* If autoneg_advertised is zero, we assume it was not defaulted
    873	 * by the calling code so we set to advertise full capability.
    874	 */
    875	if (phy->autoneg_advertised == 0)
    876		phy->autoneg_advertised = phy->autoneg_mask;
    877
    878	hw_dbg("Reconfiguring auto-neg advertisement params\n");
    879	ret_val = igb_phy_setup_autoneg(hw);
    880	if (ret_val) {
    881		hw_dbg("Error Setting up Auto-Negotiation\n");
    882		goto out;
    883	}
    884	hw_dbg("Restarting Auto-Neg\n");
    885
    886	/* Restart auto-negotiation by setting the Auto Neg Enable bit and
    887	 * the Auto Neg Restart bit in the PHY control register.
    888	 */
    889	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
    890	if (ret_val)
    891		goto out;
    892
    893	phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
    894	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
    895	if (ret_val)
    896		goto out;
    897
    898	/* Does the user want to wait for Auto-Neg to complete here, or
    899	 * check at a later time (for example, callback routine).
    900	 */
    901	if (phy->autoneg_wait_to_complete) {
    902		ret_val = igb_wait_autoneg(hw);
    903		if (ret_val) {
    904			hw_dbg("Error while waiting for autoneg to complete\n");
    905			goto out;
    906		}
    907	}
    908
    909	hw->mac.get_link_status = true;
    910
    911out:
    912	return ret_val;
    913}
    914
    915/**
    916 *  igb_phy_setup_autoneg - Configure PHY for auto-negotiation
    917 *  @hw: pointer to the HW structure
    918 *
    919 *  Reads the MII auto-neg advertisement register and/or the 1000T control
    920 *  register and if the PHY is already setup for auto-negotiation, then
    921 *  return successful.  Otherwise, setup advertisement and flow control to
    922 *  the appropriate values for the wanted auto-negotiation.
    923 **/
    924static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
    925{
    926	struct e1000_phy_info *phy = &hw->phy;
    927	s32 ret_val;
    928	u16 mii_autoneg_adv_reg;
    929	u16 mii_1000t_ctrl_reg = 0;
    930
    931	phy->autoneg_advertised &= phy->autoneg_mask;
    932
    933	/* Read the MII Auto-Neg Advertisement Register (Address 4). */
    934	ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
    935	if (ret_val)
    936		goto out;
    937
    938	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
    939		/* Read the MII 1000Base-T Control Register (Address 9). */
    940		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL,
    941					    &mii_1000t_ctrl_reg);
    942		if (ret_val)
    943			goto out;
    944	}
    945
    946	/* Need to parse both autoneg_advertised and fc and set up
    947	 * the appropriate PHY registers.  First we will parse for
    948	 * autoneg_advertised software override.  Since we can advertise
    949	 * a plethora of combinations, we need to check each bit
    950	 * individually.
    951	 */
    952
    953	/* First we clear all the 10/100 mb speed bits in the Auto-Neg
    954	 * Advertisement Register (Address 4) and the 1000 mb speed bits in
    955	 * the  1000Base-T Control Register (Address 9).
    956	 */
    957	mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
    958				 NWAY_AR_100TX_HD_CAPS |
    959				 NWAY_AR_10T_FD_CAPS   |
    960				 NWAY_AR_10T_HD_CAPS);
    961	mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
    962
    963	hw_dbg("autoneg_advertised %x\n", phy->autoneg_advertised);
    964
    965	/* Do we want to advertise 10 Mb Half Duplex? */
    966	if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
    967		hw_dbg("Advertise 10mb Half duplex\n");
    968		mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
    969	}
    970
    971	/* Do we want to advertise 10 Mb Full Duplex? */
    972	if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
    973		hw_dbg("Advertise 10mb Full duplex\n");
    974		mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
    975	}
    976
    977	/* Do we want to advertise 100 Mb Half Duplex? */
    978	if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
    979		hw_dbg("Advertise 100mb Half duplex\n");
    980		mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
    981	}
    982
    983	/* Do we want to advertise 100 Mb Full Duplex? */
    984	if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
    985		hw_dbg("Advertise 100mb Full duplex\n");
    986		mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
    987	}
    988
    989	/* We do not allow the Phy to advertise 1000 Mb Half Duplex */
    990	if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
    991		hw_dbg("Advertise 1000mb Half duplex request denied!\n");
    992
    993	/* Do we want to advertise 1000 Mb Full Duplex? */
    994	if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
    995		hw_dbg("Advertise 1000mb Full duplex\n");
    996		mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
    997	}
    998
    999	/* Check for a software override of the flow control settings, and
   1000	 * setup the PHY advertisement registers accordingly.  If
   1001	 * auto-negotiation is enabled, then software will have to set the
   1002	 * "PAUSE" bits to the correct value in the Auto-Negotiation
   1003	 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
   1004	 * negotiation.
   1005	 *
   1006	 * The possible values of the "fc" parameter are:
   1007	 *      0:  Flow control is completely disabled
   1008	 *      1:  Rx flow control is enabled (we can receive pause frames
   1009	 *          but not send pause frames).
   1010	 *      2:  Tx flow control is enabled (we can send pause frames
   1011	 *          but we do not support receiving pause frames).
   1012	 *      3:  Both Rx and TX flow control (symmetric) are enabled.
   1013	 *  other:  No software override.  The flow control configuration
   1014	 *          in the EEPROM is used.
   1015	 */
   1016	switch (hw->fc.current_mode) {
   1017	case e1000_fc_none:
   1018		/* Flow control (RX & TX) is completely disabled by a
   1019		 * software over-ride.
   1020		 */
   1021		mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1022		break;
   1023	case e1000_fc_rx_pause:
   1024		/* RX Flow control is enabled, and TX Flow control is
   1025		 * disabled, by a software over-ride.
   1026		 *
   1027		 * Since there really isn't a way to advertise that we are
   1028		 * capable of RX Pause ONLY, we will advertise that we
   1029		 * support both symmetric and asymmetric RX PAUSE.  Later
   1030		 * (in e1000_config_fc_after_link_up) we will disable the
   1031		 * hw's ability to send PAUSE frames.
   1032		 */
   1033		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1034		break;
   1035	case e1000_fc_tx_pause:
   1036		/* TX Flow control is enabled, and RX Flow control is
   1037		 * disabled, by a software over-ride.
   1038		 */
   1039		mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
   1040		mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
   1041		break;
   1042	case e1000_fc_full:
   1043		/* Flow control (both RX and TX) is enabled by a software
   1044		 * over-ride.
   1045		 */
   1046		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1047		break;
   1048	default:
   1049		hw_dbg("Flow control param set incorrectly\n");
   1050		ret_val = -E1000_ERR_CONFIG;
   1051		goto out;
   1052	}
   1053
   1054	ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
   1055	if (ret_val)
   1056		goto out;
   1057
   1058	hw_dbg("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
   1059
   1060	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
   1061		ret_val = phy->ops.write_reg(hw,
   1062					     PHY_1000T_CTRL,
   1063					     mii_1000t_ctrl_reg);
   1064		if (ret_val)
   1065			goto out;
   1066	}
   1067
   1068out:
   1069	return ret_val;
   1070}
   1071
   1072/**
   1073 *  igb_setup_copper_link - Configure copper link settings
   1074 *  @hw: pointer to the HW structure
   1075 *
   1076 *  Calls the appropriate function to configure the link for auto-neg or forced
   1077 *  speed and duplex.  Then we check for link, once link is established calls
   1078 *  to configure collision distance and flow control are called.  If link is
   1079 *  not established, we return -E1000_ERR_PHY (-2).
   1080 **/
   1081s32 igb_setup_copper_link(struct e1000_hw *hw)
   1082{
   1083	s32 ret_val;
   1084	bool link;
   1085
   1086	if (hw->mac.autoneg) {
   1087		/* Setup autoneg and flow control advertisement and perform
   1088		 * autonegotiation.
   1089		 */
   1090		ret_val = igb_copper_link_autoneg(hw);
   1091		if (ret_val)
   1092			goto out;
   1093	} else {
   1094		/* PHY will be set to 10H, 10F, 100H or 100F
   1095		 * depending on user settings.
   1096		 */
   1097		hw_dbg("Forcing Speed and Duplex\n");
   1098		ret_val = hw->phy.ops.force_speed_duplex(hw);
   1099		if (ret_val) {
   1100			hw_dbg("Error Forcing Speed and Duplex\n");
   1101			goto out;
   1102		}
   1103	}
   1104
   1105	/* Check link status. Wait up to 100 microseconds for link to become
   1106	 * valid.
   1107	 */
   1108	ret_val = igb_phy_has_link(hw, COPPER_LINK_UP_LIMIT, 10, &link);
   1109	if (ret_val)
   1110		goto out;
   1111
   1112	if (link) {
   1113		hw_dbg("Valid link established!!!\n");
   1114		igb_config_collision_dist(hw);
   1115		ret_val = igb_config_fc_after_link_up(hw);
   1116	} else {
   1117		hw_dbg("Unable to establish link!!!\n");
   1118	}
   1119
   1120out:
   1121	return ret_val;
   1122}
   1123
   1124/**
   1125 *  igb_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
   1126 *  @hw: pointer to the HW structure
   1127 *
   1128 *  Calls the PHY setup function to force speed and duplex.  Clears the
   1129 *  auto-crossover to force MDI manually.  Waits for link and returns
   1130 *  successful if link up is successful, else -E1000_ERR_PHY (-2).
   1131 **/
   1132s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw)
   1133{
   1134	struct e1000_phy_info *phy = &hw->phy;
   1135	s32 ret_val;
   1136	u16 phy_data;
   1137	bool link;
   1138
   1139	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
   1140	if (ret_val)
   1141		goto out;
   1142
   1143	igb_phy_force_speed_duplex_setup(hw, &phy_data);
   1144
   1145	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
   1146	if (ret_val)
   1147		goto out;
   1148
   1149	/* Clear Auto-Crossover to force MDI manually.  IGP requires MDI
   1150	 * forced whenever speed and duplex are forced.
   1151	 */
   1152	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
   1153	if (ret_val)
   1154		goto out;
   1155
   1156	phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
   1157	phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
   1158
   1159	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
   1160	if (ret_val)
   1161		goto out;
   1162
   1163	hw_dbg("IGP PSCR: %X\n", phy_data);
   1164
   1165	udelay(1);
   1166
   1167	if (phy->autoneg_wait_to_complete) {
   1168		hw_dbg("Waiting for forced speed/duplex link on IGP phy.\n");
   1169
   1170		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 10000, &link);
   1171		if (ret_val)
   1172			goto out;
   1173
   1174		if (!link)
   1175			hw_dbg("Link taking longer than expected.\n");
   1176
   1177		/* Try once more */
   1178		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 10000, &link);
   1179		if (ret_val)
   1180			goto out;
   1181	}
   1182
   1183out:
   1184	return ret_val;
   1185}
   1186
   1187/**
   1188 *  igb_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
   1189 *  @hw: pointer to the HW structure
   1190 *
   1191 *  Calls the PHY setup function to force speed and duplex.  Clears the
   1192 *  auto-crossover to force MDI manually.  Resets the PHY to commit the
   1193 *  changes.  If time expires while waiting for link up, we reset the DSP.
   1194 *  After reset, TX_CLK and CRS on TX must be set.  Return successful upon
   1195 *  successful completion, else return corresponding error code.
   1196 **/
   1197s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
   1198{
   1199	struct e1000_phy_info *phy = &hw->phy;
   1200	s32 ret_val;
   1201	u16 phy_data;
   1202	bool link;
   1203
   1204	/* I210 and I211 devices support Auto-Crossover in forced operation. */
   1205	if (phy->type != e1000_phy_i210) {
   1206		/* Clear Auto-Crossover to force MDI manually.  M88E1000
   1207		 * requires MDI forced whenever speed and duplex are forced.
   1208		 */
   1209		ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL,
   1210					    &phy_data);
   1211		if (ret_val)
   1212			goto out;
   1213
   1214		phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
   1215		ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL,
   1216					     phy_data);
   1217		if (ret_val)
   1218			goto out;
   1219
   1220		hw_dbg("M88E1000 PSCR: %X\n", phy_data);
   1221	}
   1222
   1223	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
   1224	if (ret_val)
   1225		goto out;
   1226
   1227	igb_phy_force_speed_duplex_setup(hw, &phy_data);
   1228
   1229	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
   1230	if (ret_val)
   1231		goto out;
   1232
   1233	/* Reset the phy to commit changes. */
   1234	ret_val = igb_phy_sw_reset(hw);
   1235	if (ret_val)
   1236		goto out;
   1237
   1238	if (phy->autoneg_wait_to_complete) {
   1239		hw_dbg("Waiting for forced speed/duplex link on M88 phy.\n");
   1240
   1241		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
   1242		if (ret_val)
   1243			goto out;
   1244
   1245		if (!link) {
   1246			bool reset_dsp = true;
   1247
   1248			switch (hw->phy.id) {
   1249			case I347AT4_E_PHY_ID:
   1250			case M88E1112_E_PHY_ID:
   1251			case M88E1543_E_PHY_ID:
   1252			case M88E1512_E_PHY_ID:
   1253			case I210_I_PHY_ID:
   1254				reset_dsp = false;
   1255				break;
   1256			default:
   1257				if (hw->phy.type != e1000_phy_m88)
   1258					reset_dsp = false;
   1259				break;
   1260			}
   1261			if (!reset_dsp) {
   1262				hw_dbg("Link taking longer than expected.\n");
   1263			} else {
   1264				/* We didn't get link.
   1265				 * Reset the DSP and cross our fingers.
   1266				 */
   1267				ret_val = phy->ops.write_reg(hw,
   1268						M88E1000_PHY_PAGE_SELECT,
   1269						0x001d);
   1270				if (ret_val)
   1271					goto out;
   1272				ret_val = igb_phy_reset_dsp(hw);
   1273				if (ret_val)
   1274					goto out;
   1275			}
   1276		}
   1277
   1278		/* Try once more */
   1279		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT,
   1280					   100000, &link);
   1281		if (ret_val)
   1282			goto out;
   1283	}
   1284
   1285	if (hw->phy.type != e1000_phy_m88 ||
   1286	    hw->phy.id == I347AT4_E_PHY_ID ||
   1287	    hw->phy.id == M88E1112_E_PHY_ID ||
   1288	    hw->phy.id == M88E1543_E_PHY_ID ||
   1289	    hw->phy.id == M88E1512_E_PHY_ID ||
   1290	    hw->phy.id == I210_I_PHY_ID)
   1291		goto out;
   1292
   1293	ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
   1294	if (ret_val)
   1295		goto out;
   1296
   1297	/* Resetting the phy means we need to re-force TX_CLK in the
   1298	 * Extended PHY Specific Control Register to 25MHz clock from
   1299	 * the reset value of 2.5MHz.
   1300	 */
   1301	phy_data |= M88E1000_EPSCR_TX_CLK_25;
   1302	ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
   1303	if (ret_val)
   1304		goto out;
   1305
   1306	/* In addition, we must re-enable CRS on Tx for both half and full
   1307	 * duplex.
   1308	 */
   1309	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1310	if (ret_val)
   1311		goto out;
   1312
   1313	phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
   1314	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
   1315
   1316out:
   1317	return ret_val;
   1318}
   1319
   1320/**
   1321 *  igb_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
   1322 *  @hw: pointer to the HW structure
   1323 *  @phy_ctrl: pointer to current value of PHY_CONTROL
   1324 *
   1325 *  Forces speed and duplex on the PHY by doing the following: disable flow
   1326 *  control, force speed/duplex on the MAC, disable auto speed detection,
   1327 *  disable auto-negotiation, configure duplex, configure speed, configure
   1328 *  the collision distance, write configuration to CTRL register.  The
   1329 *  caller must write to the PHY_CONTROL register for these settings to
   1330 *  take affect.
   1331 **/
   1332static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
   1333					     u16 *phy_ctrl)
   1334{
   1335	struct e1000_mac_info *mac = &hw->mac;
   1336	u32 ctrl;
   1337
   1338	/* Turn off flow control when forcing speed/duplex */
   1339	hw->fc.current_mode = e1000_fc_none;
   1340
   1341	/* Force speed/duplex on the mac */
   1342	ctrl = rd32(E1000_CTRL);
   1343	ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
   1344	ctrl &= ~E1000_CTRL_SPD_SEL;
   1345
   1346	/* Disable Auto Speed Detection */
   1347	ctrl &= ~E1000_CTRL_ASDE;
   1348
   1349	/* Disable autoneg on the phy */
   1350	*phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
   1351
   1352	/* Forcing Full or Half Duplex? */
   1353	if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
   1354		ctrl &= ~E1000_CTRL_FD;
   1355		*phy_ctrl &= ~MII_CR_FULL_DUPLEX;
   1356		hw_dbg("Half Duplex\n");
   1357	} else {
   1358		ctrl |= E1000_CTRL_FD;
   1359		*phy_ctrl |= MII_CR_FULL_DUPLEX;
   1360		hw_dbg("Full Duplex\n");
   1361	}
   1362
   1363	/* Forcing 10mb or 100mb? */
   1364	if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
   1365		ctrl |= E1000_CTRL_SPD_100;
   1366		*phy_ctrl |= MII_CR_SPEED_100;
   1367		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
   1368		hw_dbg("Forcing 100mb\n");
   1369	} else {
   1370		ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
   1371		*phy_ctrl |= MII_CR_SPEED_10;
   1372		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
   1373		hw_dbg("Forcing 10mb\n");
   1374	}
   1375
   1376	igb_config_collision_dist(hw);
   1377
   1378	wr32(E1000_CTRL, ctrl);
   1379}
   1380
   1381/**
   1382 *  igb_set_d3_lplu_state - Sets low power link up state for D3
   1383 *  @hw: pointer to the HW structure
   1384 *  @active: boolean used to enable/disable lplu
   1385 *
   1386 *  Success returns 0, Failure returns 1
   1387 *
   1388 *  The low power link up (lplu) state is set to the power management level D3
   1389 *  and SmartSpeed is disabled when active is true, else clear lplu for D3
   1390 *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
   1391 *  is used during Dx states where the power conservation is most important.
   1392 *  During driver activity, SmartSpeed should be enabled so performance is
   1393 *  maintained.
   1394 **/
   1395s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active)
   1396{
   1397	struct e1000_phy_info *phy = &hw->phy;
   1398	s32 ret_val = 0;
   1399	u16 data;
   1400
   1401	if (!(hw->phy.ops.read_reg))
   1402		goto out;
   1403
   1404	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
   1405	if (ret_val)
   1406		goto out;
   1407
   1408	if (!active) {
   1409		data &= ~IGP02E1000_PM_D3_LPLU;
   1410		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
   1411					     data);
   1412		if (ret_val)
   1413			goto out;
   1414		/* LPLU and SmartSpeed are mutually exclusive.  LPLU is used
   1415		 * during Dx states where the power conservation is most
   1416		 * important.  During driver activity we should enable
   1417		 * SmartSpeed, so performance is maintained.
   1418		 */
   1419		if (phy->smart_speed == e1000_smart_speed_on) {
   1420			ret_val = phy->ops.read_reg(hw,
   1421						    IGP01E1000_PHY_PORT_CONFIG,
   1422						    &data);
   1423			if (ret_val)
   1424				goto out;
   1425
   1426			data |= IGP01E1000_PSCFR_SMART_SPEED;
   1427			ret_val = phy->ops.write_reg(hw,
   1428						     IGP01E1000_PHY_PORT_CONFIG,
   1429						     data);
   1430			if (ret_val)
   1431				goto out;
   1432		} else if (phy->smart_speed == e1000_smart_speed_off) {
   1433			ret_val = phy->ops.read_reg(hw,
   1434						     IGP01E1000_PHY_PORT_CONFIG,
   1435						     &data);
   1436			if (ret_val)
   1437				goto out;
   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				goto out;
   1445		}
   1446	} else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
   1447		   (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
   1448		   (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
   1449		data |= IGP02E1000_PM_D3_LPLU;
   1450		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
   1451					      data);
   1452		if (ret_val)
   1453			goto out;
   1454
   1455		/* When LPLU is enabled, we should disable SmartSpeed */
   1456		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   1457					    &data);
   1458		if (ret_val)
   1459			goto out;
   1460
   1461		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
   1462		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   1463					     data);
   1464	}
   1465
   1466out:
   1467	return ret_val;
   1468}
   1469
   1470/**
   1471 *  igb_check_downshift - Checks whether a downshift in speed occurred
   1472 *  @hw: pointer to the HW structure
   1473 *
   1474 *  Success returns 0, Failure returns 1
   1475 *
   1476 *  A downshift is detected by querying the PHY link health.
   1477 **/
   1478s32 igb_check_downshift(struct e1000_hw *hw)
   1479{
   1480	struct e1000_phy_info *phy = &hw->phy;
   1481	s32 ret_val;
   1482	u16 phy_data, offset, mask;
   1483
   1484	switch (phy->type) {
   1485	case e1000_phy_i210:
   1486	case e1000_phy_m88:
   1487	case e1000_phy_gg82563:
   1488		offset	= M88E1000_PHY_SPEC_STATUS;
   1489		mask	= M88E1000_PSSR_DOWNSHIFT;
   1490		break;
   1491	case e1000_phy_igp_2:
   1492	case e1000_phy_igp:
   1493	case e1000_phy_igp_3:
   1494		offset	= IGP01E1000_PHY_LINK_HEALTH;
   1495		mask	= IGP01E1000_PLHR_SS_DOWNGRADE;
   1496		break;
   1497	default:
   1498		/* speed downshift not supported */
   1499		phy->speed_downgraded = false;
   1500		ret_val = 0;
   1501		goto out;
   1502	}
   1503
   1504	ret_val = phy->ops.read_reg(hw, offset, &phy_data);
   1505
   1506	if (!ret_val)
   1507		phy->speed_downgraded = (phy_data & mask) ? true : false;
   1508
   1509out:
   1510	return ret_val;
   1511}
   1512
   1513/**
   1514 *  igb_check_polarity_m88 - Checks the polarity.
   1515 *  @hw: pointer to the HW structure
   1516 *
   1517 *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
   1518 *
   1519 *  Polarity is determined based on the PHY specific status register.
   1520 **/
   1521s32 igb_check_polarity_m88(struct e1000_hw *hw)
   1522{
   1523	struct e1000_phy_info *phy = &hw->phy;
   1524	s32 ret_val;
   1525	u16 data;
   1526
   1527	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data);
   1528
   1529	if (!ret_val)
   1530		phy->cable_polarity = (data & M88E1000_PSSR_REV_POLARITY)
   1531				      ? e1000_rev_polarity_reversed
   1532				      : e1000_rev_polarity_normal;
   1533
   1534	return ret_val;
   1535}
   1536
   1537/**
   1538 *  igb_check_polarity_igp - Checks the polarity.
   1539 *  @hw: pointer to the HW structure
   1540 *
   1541 *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
   1542 *
   1543 *  Polarity is determined based on the PHY port status register, and the
   1544 *  current speed (since there is no polarity at 100Mbps).
   1545 **/
   1546static s32 igb_check_polarity_igp(struct e1000_hw *hw)
   1547{
   1548	struct e1000_phy_info *phy = &hw->phy;
   1549	s32 ret_val;
   1550	u16 data, offset, mask;
   1551
   1552	/* Polarity is determined based on the speed of
   1553	 * our connection.
   1554	 */
   1555	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
   1556	if (ret_val)
   1557		goto out;
   1558
   1559	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
   1560	    IGP01E1000_PSSR_SPEED_1000MBPS) {
   1561		offset	= IGP01E1000_PHY_PCS_INIT_REG;
   1562		mask	= IGP01E1000_PHY_POLARITY_MASK;
   1563	} else {
   1564		/* This really only applies to 10Mbps since
   1565		 * there is no polarity for 100Mbps (always 0).
   1566		 */
   1567		offset	= IGP01E1000_PHY_PORT_STATUS;
   1568		mask	= IGP01E1000_PSSR_POLARITY_REVERSED;
   1569	}
   1570
   1571	ret_val = phy->ops.read_reg(hw, offset, &data);
   1572
   1573	if (!ret_val)
   1574		phy->cable_polarity = (data & mask)
   1575				      ? e1000_rev_polarity_reversed
   1576				      : e1000_rev_polarity_normal;
   1577
   1578out:
   1579	return ret_val;
   1580}
   1581
   1582/**
   1583 *  igb_wait_autoneg - Wait for auto-neg completion
   1584 *  @hw: pointer to the HW structure
   1585 *
   1586 *  Waits for auto-negotiation to complete or for the auto-negotiation time
   1587 *  limit to expire, which ever happens first.
   1588 **/
   1589static s32 igb_wait_autoneg(struct e1000_hw *hw)
   1590{
   1591	s32 ret_val = 0;
   1592	u16 i, phy_status;
   1593
   1594	/* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
   1595	for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
   1596		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
   1597		if (ret_val)
   1598			break;
   1599		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
   1600		if (ret_val)
   1601			break;
   1602		if (phy_status & MII_SR_AUTONEG_COMPLETE)
   1603			break;
   1604		msleep(100);
   1605	}
   1606
   1607	/* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
   1608	 * has completed.
   1609	 */
   1610	return ret_val;
   1611}
   1612
   1613/**
   1614 *  igb_phy_has_link - Polls PHY for link
   1615 *  @hw: pointer to the HW structure
   1616 *  @iterations: number of times to poll for link
   1617 *  @usec_interval: delay between polling attempts
   1618 *  @success: pointer to whether polling was successful or not
   1619 *
   1620 *  Polls the PHY status register for link, 'iterations' number of times.
   1621 **/
   1622s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations,
   1623		     u32 usec_interval, bool *success)
   1624{
   1625	s32 ret_val = 0;
   1626	u16 i, phy_status;
   1627
   1628	for (i = 0; i < iterations; i++) {
   1629		/* Some PHYs require the PHY_STATUS register to be read
   1630		 * twice due to the link bit being sticky.  No harm doing
   1631		 * it across the board.
   1632		 */
   1633		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
   1634		if (ret_val && usec_interval > 0) {
   1635			/* If the first read fails, another entity may have
   1636			 * ownership of the resources, wait and try again to
   1637			 * see if they have relinquished the resources yet.
   1638			 */
   1639			if (usec_interval >= 1000)
   1640				mdelay(usec_interval/1000);
   1641			else
   1642				udelay(usec_interval);
   1643		}
   1644		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
   1645		if (ret_val)
   1646			break;
   1647		if (phy_status & MII_SR_LINK_STATUS)
   1648			break;
   1649		if (usec_interval >= 1000)
   1650			mdelay(usec_interval/1000);
   1651		else
   1652			udelay(usec_interval);
   1653	}
   1654
   1655	*success = (i < iterations) ? true : false;
   1656
   1657	return ret_val;
   1658}
   1659
   1660/**
   1661 *  igb_get_cable_length_m88 - Determine cable length for m88 PHY
   1662 *  @hw: pointer to the HW structure
   1663 *
   1664 *  Reads the PHY specific status register to retrieve the cable length
   1665 *  information.  The cable length is determined by averaging the minimum and
   1666 *  maximum values to get the "average" cable length.  The m88 PHY has four
   1667 *  possible cable length values, which are:
   1668 *	Register Value		Cable Length
   1669 *	0			< 50 meters
   1670 *	1			50 - 80 meters
   1671 *	2			80 - 110 meters
   1672 *	3			110 - 140 meters
   1673 *	4			> 140 meters
   1674 **/
   1675s32 igb_get_cable_length_m88(struct e1000_hw *hw)
   1676{
   1677	struct e1000_phy_info *phy = &hw->phy;
   1678	s32 ret_val;
   1679	u16 phy_data, index;
   1680
   1681	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
   1682	if (ret_val)
   1683		goto out;
   1684
   1685	index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
   1686		M88E1000_PSSR_CABLE_LENGTH_SHIFT;
   1687	if (index >= ARRAY_SIZE(e1000_m88_cable_length_table) - 1) {
   1688		ret_val = -E1000_ERR_PHY;
   1689		goto out;
   1690	}
   1691
   1692	phy->min_cable_length = e1000_m88_cable_length_table[index];
   1693	phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
   1694
   1695	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
   1696
   1697out:
   1698	return ret_val;
   1699}
   1700
   1701s32 igb_get_cable_length_m88_gen2(struct e1000_hw *hw)
   1702{
   1703	struct e1000_phy_info *phy = &hw->phy;
   1704	s32 ret_val;
   1705	u16 phy_data, phy_data2, index, default_page, is_cm;
   1706	int len_tot = 0;
   1707	u16 len_min;
   1708	u16 len_max;
   1709
   1710	switch (hw->phy.id) {
   1711	case M88E1543_E_PHY_ID:
   1712	case M88E1512_E_PHY_ID:
   1713	case I347AT4_E_PHY_ID:
   1714	case I210_I_PHY_ID:
   1715		/* Remember the original page select and set it to 7 */
   1716		ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
   1717					    &default_page);
   1718		if (ret_val)
   1719			goto out;
   1720
   1721		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07);
   1722		if (ret_val)
   1723			goto out;
   1724
   1725		/* Check if the unit of cable length is meters or cm */
   1726		ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2);
   1727		if (ret_val)
   1728			goto out;
   1729
   1730		is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT);
   1731
   1732		/* Get cable length from Pair 0 length Regs */
   1733		ret_val = phy->ops.read_reg(hw, I347AT4_PCDL0, &phy_data);
   1734		if (ret_val)
   1735			goto out;
   1736
   1737		phy->pair_length[0] = phy_data / (is_cm ? 100 : 1);
   1738		len_tot = phy->pair_length[0];
   1739		len_min = phy->pair_length[0];
   1740		len_max = phy->pair_length[0];
   1741
   1742		/* Get cable length from Pair 1 length Regs */
   1743		ret_val = phy->ops.read_reg(hw, I347AT4_PCDL1, &phy_data);
   1744		if (ret_val)
   1745			goto out;
   1746
   1747		phy->pair_length[1] = phy_data / (is_cm ? 100 : 1);
   1748		len_tot += phy->pair_length[1];
   1749		len_min = min(len_min, phy->pair_length[1]);
   1750		len_max = max(len_max, phy->pair_length[1]);
   1751
   1752		/* Get cable length from Pair 2 length Regs */
   1753		ret_val = phy->ops.read_reg(hw, I347AT4_PCDL2, &phy_data);
   1754		if (ret_val)
   1755			goto out;
   1756
   1757		phy->pair_length[2] = phy_data / (is_cm ? 100 : 1);
   1758		len_tot += phy->pair_length[2];
   1759		len_min = min(len_min, phy->pair_length[2]);
   1760		len_max = max(len_max, phy->pair_length[2]);
   1761
   1762		/* Get cable length from Pair 3 length Regs */
   1763		ret_val = phy->ops.read_reg(hw, I347AT4_PCDL3, &phy_data);
   1764		if (ret_val)
   1765			goto out;
   1766
   1767		phy->pair_length[3] = phy_data / (is_cm ? 100 : 1);
   1768		len_tot += phy->pair_length[3];
   1769		len_min = min(len_min, phy->pair_length[3]);
   1770		len_max = max(len_max, phy->pair_length[3]);
   1771
   1772		/* Populate the phy structure with cable length in meters */
   1773		phy->min_cable_length = len_min;
   1774		phy->max_cable_length = len_max;
   1775		phy->cable_length = len_tot / 4;
   1776
   1777		/* Reset the page selec to its original value */
   1778		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
   1779					     default_page);
   1780		if (ret_val)
   1781			goto out;
   1782		break;
   1783	case M88E1112_E_PHY_ID:
   1784		/* Remember the original page select and set it to 5 */
   1785		ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
   1786					    &default_page);
   1787		if (ret_val)
   1788			goto out;
   1789
   1790		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05);
   1791		if (ret_val)
   1792			goto out;
   1793
   1794		ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE,
   1795					    &phy_data);
   1796		if (ret_val)
   1797			goto out;
   1798
   1799		index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
   1800			M88E1000_PSSR_CABLE_LENGTH_SHIFT;
   1801		if (index >= ARRAY_SIZE(e1000_m88_cable_length_table) - 1) {
   1802			ret_val = -E1000_ERR_PHY;
   1803			goto out;
   1804		}
   1805
   1806		phy->min_cable_length = e1000_m88_cable_length_table[index];
   1807		phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
   1808
   1809		phy->cable_length = (phy->min_cable_length +
   1810				     phy->max_cable_length) / 2;
   1811
   1812		/* Reset the page select to its original value */
   1813		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
   1814					     default_page);
   1815		if (ret_val)
   1816			goto out;
   1817
   1818		break;
   1819	default:
   1820		ret_val = -E1000_ERR_PHY;
   1821		goto out;
   1822	}
   1823
   1824out:
   1825	return ret_val;
   1826}
   1827
   1828/**
   1829 *  igb_get_cable_length_igp_2 - Determine cable length for igp2 PHY
   1830 *  @hw: pointer to the HW structure
   1831 *
   1832 *  The automatic gain control (agc) normalizes the amplitude of the
   1833 *  received signal, adjusting for the attenuation produced by the
   1834 *  cable.  By reading the AGC registers, which represent the
   1835 *  combination of coarse and fine gain value, the value can be put
   1836 *  into a lookup table to obtain the approximate cable length
   1837 *  for each channel.
   1838 **/
   1839s32 igb_get_cable_length_igp_2(struct e1000_hw *hw)
   1840{
   1841	struct e1000_phy_info *phy = &hw->phy;
   1842	s32 ret_val = 0;
   1843	u16 phy_data, i, agc_value = 0;
   1844	u16 cur_agc_index, max_agc_index = 0;
   1845	u16 min_agc_index = ARRAY_SIZE(e1000_igp_2_cable_length_table) - 1;
   1846	static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
   1847		IGP02E1000_PHY_AGC_A,
   1848		IGP02E1000_PHY_AGC_B,
   1849		IGP02E1000_PHY_AGC_C,
   1850		IGP02E1000_PHY_AGC_D
   1851	};
   1852
   1853	/* Read the AGC registers for all channels */
   1854	for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
   1855		ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data);
   1856		if (ret_val)
   1857			goto out;
   1858
   1859		/* Getting bits 15:9, which represent the combination of
   1860		 * coarse and fine gain values.  The result is a number
   1861		 * that can be put into the lookup table to obtain the
   1862		 * approximate cable length.
   1863		 */
   1864		cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
   1865				IGP02E1000_AGC_LENGTH_MASK;
   1866
   1867		/* Array index bound check. */
   1868		if ((cur_agc_index >= ARRAY_SIZE(e1000_igp_2_cable_length_table)) ||
   1869		    (cur_agc_index == 0)) {
   1870			ret_val = -E1000_ERR_PHY;
   1871			goto out;
   1872		}
   1873
   1874		/* Remove min & max AGC values from calculation. */
   1875		if (e1000_igp_2_cable_length_table[min_agc_index] >
   1876		    e1000_igp_2_cable_length_table[cur_agc_index])
   1877			min_agc_index = cur_agc_index;
   1878		if (e1000_igp_2_cable_length_table[max_agc_index] <
   1879		    e1000_igp_2_cable_length_table[cur_agc_index])
   1880			max_agc_index = cur_agc_index;
   1881
   1882		agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
   1883	}
   1884
   1885	agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
   1886		      e1000_igp_2_cable_length_table[max_agc_index]);
   1887	agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
   1888
   1889	/* Calculate cable length with the error range of +/- 10 meters. */
   1890	phy->min_cable_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
   1891				 (agc_value - IGP02E1000_AGC_RANGE) : 0;
   1892	phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
   1893
   1894	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
   1895
   1896out:
   1897	return ret_val;
   1898}
   1899
   1900/**
   1901 *  igb_get_phy_info_m88 - Retrieve PHY information
   1902 *  @hw: pointer to the HW structure
   1903 *
   1904 *  Valid for only copper links.  Read the PHY status register (sticky read)
   1905 *  to verify that link is up.  Read the PHY special control register to
   1906 *  determine the polarity and 10base-T extended distance.  Read the PHY
   1907 *  special status register to determine MDI/MDIx and current speed.  If
   1908 *  speed is 1000, then determine cable length, local and remote receiver.
   1909 **/
   1910s32 igb_get_phy_info_m88(struct e1000_hw *hw)
   1911{
   1912	struct e1000_phy_info *phy = &hw->phy;
   1913	s32  ret_val;
   1914	u16 phy_data;
   1915	bool link;
   1916
   1917	if (phy->media_type != e1000_media_type_copper) {
   1918		hw_dbg("Phy info is only valid for copper media\n");
   1919		ret_val = -E1000_ERR_CONFIG;
   1920		goto out;
   1921	}
   1922
   1923	ret_val = igb_phy_has_link(hw, 1, 0, &link);
   1924	if (ret_val)
   1925		goto out;
   1926
   1927	if (!link) {
   1928		hw_dbg("Phy info is only valid if link is up\n");
   1929		ret_val = -E1000_ERR_CONFIG;
   1930		goto out;
   1931	}
   1932
   1933	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1934	if (ret_val)
   1935		goto out;
   1936
   1937	phy->polarity_correction = (phy_data & M88E1000_PSCR_POLARITY_REVERSAL)
   1938				   ? true : false;
   1939
   1940	ret_val = igb_check_polarity_m88(hw);
   1941	if (ret_val)
   1942		goto out;
   1943
   1944	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
   1945	if (ret_val)
   1946		goto out;
   1947
   1948	phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX) ? true : false;
   1949
   1950	if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
   1951		ret_val = phy->ops.get_cable_length(hw);
   1952		if (ret_val)
   1953			goto out;
   1954
   1955		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
   1956		if (ret_val)
   1957			goto out;
   1958
   1959		phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
   1960				? e1000_1000t_rx_status_ok
   1961				: e1000_1000t_rx_status_not_ok;
   1962
   1963		phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
   1964				 ? e1000_1000t_rx_status_ok
   1965				 : e1000_1000t_rx_status_not_ok;
   1966	} else {
   1967		/* Set values to "undefined" */
   1968		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
   1969		phy->local_rx = e1000_1000t_rx_status_undefined;
   1970		phy->remote_rx = e1000_1000t_rx_status_undefined;
   1971	}
   1972
   1973out:
   1974	return ret_val;
   1975}
   1976
   1977/**
   1978 *  igb_get_phy_info_igp - Retrieve igp PHY information
   1979 *  @hw: pointer to the HW structure
   1980 *
   1981 *  Read PHY status to determine if link is up.  If link is up, then
   1982 *  set/determine 10base-T extended distance and polarity correction.  Read
   1983 *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
   1984 *  determine on the cable length, local and remote receiver.
   1985 **/
   1986s32 igb_get_phy_info_igp(struct e1000_hw *hw)
   1987{
   1988	struct e1000_phy_info *phy = &hw->phy;
   1989	s32 ret_val;
   1990	u16 data;
   1991	bool link;
   1992
   1993	ret_val = igb_phy_has_link(hw, 1, 0, &link);
   1994	if (ret_val)
   1995		goto out;
   1996
   1997	if (!link) {
   1998		hw_dbg("Phy info is only valid if link is up\n");
   1999		ret_val = -E1000_ERR_CONFIG;
   2000		goto out;
   2001	}
   2002
   2003	phy->polarity_correction = true;
   2004
   2005	ret_val = igb_check_polarity_igp(hw);
   2006	if (ret_val)
   2007		goto out;
   2008
   2009	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
   2010	if (ret_val)
   2011		goto out;
   2012
   2013	phy->is_mdix = (data & IGP01E1000_PSSR_MDIX) ? true : false;
   2014
   2015	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
   2016	    IGP01E1000_PSSR_SPEED_1000MBPS) {
   2017		ret_val = phy->ops.get_cable_length(hw);
   2018		if (ret_val)
   2019			goto out;
   2020
   2021		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
   2022		if (ret_val)
   2023			goto out;
   2024
   2025		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
   2026				? e1000_1000t_rx_status_ok
   2027				: e1000_1000t_rx_status_not_ok;
   2028
   2029		phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
   2030				 ? e1000_1000t_rx_status_ok
   2031				 : e1000_1000t_rx_status_not_ok;
   2032	} else {
   2033		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
   2034		phy->local_rx = e1000_1000t_rx_status_undefined;
   2035		phy->remote_rx = e1000_1000t_rx_status_undefined;
   2036	}
   2037
   2038out:
   2039	return ret_val;
   2040}
   2041
   2042/**
   2043 *  igb_phy_sw_reset - PHY software reset
   2044 *  @hw: pointer to the HW structure
   2045 *
   2046 *  Does a software reset of the PHY by reading the PHY control register and
   2047 *  setting/write the control register reset bit to the PHY.
   2048 **/
   2049s32 igb_phy_sw_reset(struct e1000_hw *hw)
   2050{
   2051	s32 ret_val = 0;
   2052	u16 phy_ctrl;
   2053
   2054	if (!(hw->phy.ops.read_reg))
   2055		goto out;
   2056
   2057	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
   2058	if (ret_val)
   2059		goto out;
   2060
   2061	phy_ctrl |= MII_CR_RESET;
   2062	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
   2063	if (ret_val)
   2064		goto out;
   2065
   2066	udelay(1);
   2067
   2068out:
   2069	return ret_val;
   2070}
   2071
   2072/**
   2073 *  igb_phy_hw_reset - PHY hardware reset
   2074 *  @hw: pointer to the HW structure
   2075 *
   2076 *  Verify the reset block is not blocking us from resetting.  Acquire
   2077 *  semaphore (if necessary) and read/set/write the device control reset
   2078 *  bit in the PHY.  Wait the appropriate delay time for the device to
   2079 *  reset and release the semaphore (if necessary).
   2080 **/
   2081s32 igb_phy_hw_reset(struct e1000_hw *hw)
   2082{
   2083	struct e1000_phy_info *phy = &hw->phy;
   2084	s32  ret_val;
   2085	u32 ctrl;
   2086
   2087	ret_val = igb_check_reset_block(hw);
   2088	if (ret_val) {
   2089		ret_val = 0;
   2090		goto out;
   2091	}
   2092
   2093	ret_val = phy->ops.acquire(hw);
   2094	if (ret_val)
   2095		goto out;
   2096
   2097	ctrl = rd32(E1000_CTRL);
   2098	wr32(E1000_CTRL, ctrl | E1000_CTRL_PHY_RST);
   2099	wrfl();
   2100
   2101	udelay(phy->reset_delay_us);
   2102
   2103	wr32(E1000_CTRL, ctrl);
   2104	wrfl();
   2105
   2106	udelay(150);
   2107
   2108	phy->ops.release(hw);
   2109
   2110	ret_val = phy->ops.get_cfg_done(hw);
   2111
   2112out:
   2113	return ret_val;
   2114}
   2115
   2116/**
   2117 *  igb_phy_init_script_igp3 - Inits the IGP3 PHY
   2118 *  @hw: pointer to the HW structure
   2119 *
   2120 *  Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
   2121 **/
   2122s32 igb_phy_init_script_igp3(struct e1000_hw *hw)
   2123{
   2124	hw_dbg("Running IGP 3 PHY init script\n");
   2125
   2126	/* PHY init IGP 3 */
   2127	/* Enable rise/fall, 10-mode work in class-A */
   2128	hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018);
   2129	/* Remove all caps from Replica path filter */
   2130	hw->phy.ops.write_reg(hw, 0x2F52, 0x0000);
   2131	/* Bias trimming for ADC, AFE and Driver (Default) */
   2132	hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24);
   2133	/* Increase Hybrid poly bias */
   2134	hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0);
   2135	/* Add 4% to TX amplitude in Giga mode */
   2136	hw->phy.ops.write_reg(hw, 0x2010, 0x10B0);
   2137	/* Disable trimming (TTT) */
   2138	hw->phy.ops.write_reg(hw, 0x2011, 0x0000);
   2139	/* Poly DC correction to 94.6% + 2% for all channels */
   2140	hw->phy.ops.write_reg(hw, 0x20DD, 0x249A);
   2141	/* ABS DC correction to 95.9% */
   2142	hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3);
   2143	/* BG temp curve trim */
   2144	hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE);
   2145	/* Increasing ADC OPAMP stage 1 currents to max */
   2146	hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4);
   2147	/* Force 1000 ( required for enabling PHY regs configuration) */
   2148	hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
   2149	/* Set upd_freq to 6 */
   2150	hw->phy.ops.write_reg(hw, 0x1F30, 0x1606);
   2151	/* Disable NPDFE */
   2152	hw->phy.ops.write_reg(hw, 0x1F31, 0xB814);
   2153	/* Disable adaptive fixed FFE (Default) */
   2154	hw->phy.ops.write_reg(hw, 0x1F35, 0x002A);
   2155	/* Enable FFE hysteresis */
   2156	hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067);
   2157	/* Fixed FFE for short cable lengths */
   2158	hw->phy.ops.write_reg(hw, 0x1F54, 0x0065);
   2159	/* Fixed FFE for medium cable lengths */
   2160	hw->phy.ops.write_reg(hw, 0x1F55, 0x002A);
   2161	/* Fixed FFE for long cable lengths */
   2162	hw->phy.ops.write_reg(hw, 0x1F56, 0x002A);
   2163	/* Enable Adaptive Clip Threshold */
   2164	hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0);
   2165	/* AHT reset limit to 1 */
   2166	hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF);
   2167	/* Set AHT master delay to 127 msec */
   2168	hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC);
   2169	/* Set scan bits for AHT */
   2170	hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF);
   2171	/* Set AHT Preset bits */
   2172	hw->phy.ops.write_reg(hw, 0x1F79, 0x0210);
   2173	/* Change integ_factor of channel A to 3 */
   2174	hw->phy.ops.write_reg(hw, 0x1895, 0x0003);
   2175	/* Change prop_factor of channels BCD to 8 */
   2176	hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
   2177	/* Change cg_icount + enable integbp for channels BCD */
   2178	hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
   2179	/* Change cg_icount + enable integbp + change prop_factor_master
   2180	 * to 8 for channel A
   2181	 */
   2182	hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
   2183	/* Disable AHT in Slave mode on channel A */
   2184	hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
   2185	/* Enable LPLU and disable AN to 1000 in non-D0a states,
   2186	 * Enable SPD+B2B
   2187	 */
   2188	hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
   2189	/* Enable restart AN on an1000_dis change */
   2190	hw->phy.ops.write_reg(hw, 0x001B, 0x2080);
   2191	/* Enable wh_fifo read clock in 10/100 modes */
   2192	hw->phy.ops.write_reg(hw, 0x0014, 0x0045);
   2193	/* Restart AN, Speed selection is 1000 */
   2194	hw->phy.ops.write_reg(hw, 0x0000, 0x1340);
   2195
   2196	return 0;
   2197}
   2198
   2199/**
   2200 *  igb_initialize_M88E1512_phy - Initialize M88E1512 PHY
   2201 *  @hw: pointer to the HW structure
   2202 *
   2203 *  Initialize Marvel 1512 to work correctly with Avoton.
   2204 **/
   2205s32 igb_initialize_M88E1512_phy(struct e1000_hw *hw)
   2206{
   2207	struct e1000_phy_info *phy = &hw->phy;
   2208	s32 ret_val = 0;
   2209
   2210	/* Switch to PHY page 0xFF. */
   2211	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
   2212	if (ret_val)
   2213		goto out;
   2214
   2215	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
   2216	if (ret_val)
   2217		goto out;
   2218
   2219	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
   2220	if (ret_val)
   2221		goto out;
   2222
   2223	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
   2224	if (ret_val)
   2225		goto out;
   2226
   2227	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
   2228	if (ret_val)
   2229		goto out;
   2230
   2231	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
   2232	if (ret_val)
   2233		goto out;
   2234
   2235	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
   2236	if (ret_val)
   2237		goto out;
   2238
   2239	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xCC0C);
   2240	if (ret_val)
   2241		goto out;
   2242
   2243	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
   2244	if (ret_val)
   2245		goto out;
   2246
   2247	/* Switch to PHY page 0xFB. */
   2248	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
   2249	if (ret_val)
   2250		goto out;
   2251
   2252	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x000D);
   2253	if (ret_val)
   2254		goto out;
   2255
   2256	/* Switch to PHY page 0x12. */
   2257	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
   2258	if (ret_val)
   2259		goto out;
   2260
   2261	/* Change mode to SGMII-to-Copper */
   2262	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
   2263	if (ret_val)
   2264		goto out;
   2265
   2266	/* Return the PHY to page 0. */
   2267	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
   2268	if (ret_val)
   2269		goto out;
   2270
   2271	ret_val = igb_phy_sw_reset(hw);
   2272	if (ret_val) {
   2273		hw_dbg("Error committing the PHY changes\n");
   2274		return ret_val;
   2275	}
   2276
   2277	/* msec_delay(1000); */
   2278	usleep_range(1000, 2000);
   2279out:
   2280	return ret_val;
   2281}
   2282
   2283/**
   2284 *  igb_initialize_M88E1543_phy - Initialize M88E1512 PHY
   2285 *  @hw: pointer to the HW structure
   2286 *
   2287 *  Initialize Marvell 1543 to work correctly with Avoton.
   2288 **/
   2289s32 igb_initialize_M88E1543_phy(struct e1000_hw *hw)
   2290{
   2291	struct e1000_phy_info *phy = &hw->phy;
   2292	s32 ret_val = 0;
   2293
   2294	/* Switch to PHY page 0xFF. */
   2295	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
   2296	if (ret_val)
   2297		goto out;
   2298
   2299	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
   2300	if (ret_val)
   2301		goto out;
   2302
   2303	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
   2304	if (ret_val)
   2305		goto out;
   2306
   2307	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
   2308	if (ret_val)
   2309		goto out;
   2310
   2311	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
   2312	if (ret_val)
   2313		goto out;
   2314
   2315	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
   2316	if (ret_val)
   2317		goto out;
   2318
   2319	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
   2320	if (ret_val)
   2321		goto out;
   2322
   2323	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xDC0C);
   2324	if (ret_val)
   2325		goto out;
   2326
   2327	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
   2328	if (ret_val)
   2329		goto out;
   2330
   2331	/* Switch to PHY page 0xFB. */
   2332	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
   2333	if (ret_val)
   2334		goto out;
   2335
   2336	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x0C0D);
   2337	if (ret_val)
   2338		goto out;
   2339
   2340	/* Switch to PHY page 0x12. */
   2341	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
   2342	if (ret_val)
   2343		goto out;
   2344
   2345	/* Change mode to SGMII-to-Copper */
   2346	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
   2347	if (ret_val)
   2348		goto out;
   2349
   2350	/* Switch to PHY page 1. */
   2351	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x1);
   2352	if (ret_val)
   2353		goto out;
   2354
   2355	/* Change mode to 1000BASE-X/SGMII and autoneg enable */
   2356	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_FIBER_CTRL, 0x9140);
   2357	if (ret_val)
   2358		goto out;
   2359
   2360	/* Return the PHY to page 0. */
   2361	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
   2362	if (ret_val)
   2363		goto out;
   2364
   2365	ret_val = igb_phy_sw_reset(hw);
   2366	if (ret_val) {
   2367		hw_dbg("Error committing the PHY changes\n");
   2368		return ret_val;
   2369	}
   2370
   2371	/* msec_delay(1000); */
   2372	usleep_range(1000, 2000);
   2373out:
   2374	return ret_val;
   2375}
   2376
   2377/**
   2378 * igb_power_up_phy_copper - Restore copper link in case of PHY power down
   2379 * @hw: pointer to the HW structure
   2380 *
   2381 * In the case of a PHY power down to save power, or to turn off link during a
   2382 * driver unload, restore the link to previous settings.
   2383 **/
   2384void igb_power_up_phy_copper(struct e1000_hw *hw)
   2385{
   2386	u16 mii_reg = 0;
   2387
   2388	/* The PHY will retain its settings across a power down/up cycle */
   2389	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
   2390	mii_reg &= ~MII_CR_POWER_DOWN;
   2391	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
   2392}
   2393
   2394/**
   2395 * igb_power_down_phy_copper - Power down copper PHY
   2396 * @hw: pointer to the HW structure
   2397 *
   2398 * Power down PHY to save power when interface is down and wake on lan
   2399 * is not enabled.
   2400 **/
   2401void igb_power_down_phy_copper(struct e1000_hw *hw)
   2402{
   2403	u16 mii_reg = 0;
   2404
   2405	/* The PHY will retain its settings across a power down/up cycle */
   2406	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
   2407	mii_reg |= MII_CR_POWER_DOWN;
   2408	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
   2409	usleep_range(1000, 2000);
   2410}
   2411
   2412/**
   2413 *  igb_check_polarity_82580 - Checks the polarity.
   2414 *  @hw: pointer to the HW structure
   2415 *
   2416 *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
   2417 *
   2418 *  Polarity is determined based on the PHY specific status register.
   2419 **/
   2420static s32 igb_check_polarity_82580(struct e1000_hw *hw)
   2421{
   2422	struct e1000_phy_info *phy = &hw->phy;
   2423	s32 ret_val;
   2424	u16 data;
   2425
   2426
   2427	ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data);
   2428
   2429	if (!ret_val)
   2430		phy->cable_polarity = (data & I82580_PHY_STATUS2_REV_POLARITY)
   2431				      ? e1000_rev_polarity_reversed
   2432				      : e1000_rev_polarity_normal;
   2433
   2434	return ret_val;
   2435}
   2436
   2437/**
   2438 *  igb_phy_force_speed_duplex_82580 - Force speed/duplex for I82580 PHY
   2439 *  @hw: pointer to the HW structure
   2440 *
   2441 *  Calls the PHY setup function to force speed and duplex.  Clears the
   2442 *  auto-crossover to force MDI manually.  Waits for link and returns
   2443 *  successful if link up is successful, else -E1000_ERR_PHY (-2).
   2444 **/
   2445s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
   2446{
   2447	struct e1000_phy_info *phy = &hw->phy;
   2448	s32 ret_val;
   2449	u16 phy_data;
   2450	bool link;
   2451
   2452	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
   2453	if (ret_val)
   2454		goto out;
   2455
   2456	igb_phy_force_speed_duplex_setup(hw, &phy_data);
   2457
   2458	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
   2459	if (ret_val)
   2460		goto out;
   2461
   2462	/* Clear Auto-Crossover to force MDI manually.  82580 requires MDI
   2463	 * forced whenever speed and duplex are forced.
   2464	 */
   2465	ret_val = phy->ops.read_reg(hw, I82580_PHY_CTRL_2, &phy_data);
   2466	if (ret_val)
   2467		goto out;
   2468
   2469	phy_data &= ~I82580_PHY_CTRL2_MDIX_CFG_MASK;
   2470
   2471	ret_val = phy->ops.write_reg(hw, I82580_PHY_CTRL_2, phy_data);
   2472	if (ret_val)
   2473		goto out;
   2474
   2475	hw_dbg("I82580_PHY_CTRL_2: %X\n", phy_data);
   2476
   2477	udelay(1);
   2478
   2479	if (phy->autoneg_wait_to_complete) {
   2480		hw_dbg("Waiting for forced speed/duplex link on 82580 phy\n");
   2481
   2482		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
   2483		if (ret_val)
   2484			goto out;
   2485
   2486		if (!link)
   2487			hw_dbg("Link taking longer than expected.\n");
   2488
   2489		/* Try once more */
   2490		ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
   2491		if (ret_val)
   2492			goto out;
   2493	}
   2494
   2495out:
   2496	return ret_val;
   2497}
   2498
   2499/**
   2500 *  igb_get_phy_info_82580 - Retrieve I82580 PHY information
   2501 *  @hw: pointer to the HW structure
   2502 *
   2503 *  Read PHY status to determine if link is up.  If link is up, then
   2504 *  set/determine 10base-T extended distance and polarity correction.  Read
   2505 *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
   2506 *  determine on the cable length, local and remote receiver.
   2507 **/
   2508s32 igb_get_phy_info_82580(struct e1000_hw *hw)
   2509{
   2510	struct e1000_phy_info *phy = &hw->phy;
   2511	s32 ret_val;
   2512	u16 data;
   2513	bool link;
   2514
   2515	ret_val = igb_phy_has_link(hw, 1, 0, &link);
   2516	if (ret_val)
   2517		goto out;
   2518
   2519	if (!link) {
   2520		hw_dbg("Phy info is only valid if link is up\n");
   2521		ret_val = -E1000_ERR_CONFIG;
   2522		goto out;
   2523	}
   2524
   2525	phy->polarity_correction = true;
   2526
   2527	ret_val = igb_check_polarity_82580(hw);
   2528	if (ret_val)
   2529		goto out;
   2530
   2531	ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data);
   2532	if (ret_val)
   2533		goto out;
   2534
   2535	phy->is_mdix = (data & I82580_PHY_STATUS2_MDIX) ? true : false;
   2536
   2537	if ((data & I82580_PHY_STATUS2_SPEED_MASK) ==
   2538	    I82580_PHY_STATUS2_SPEED_1000MBPS) {
   2539		ret_val = hw->phy.ops.get_cable_length(hw);
   2540		if (ret_val)
   2541			goto out;
   2542
   2543		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
   2544		if (ret_val)
   2545			goto out;
   2546
   2547		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
   2548				? e1000_1000t_rx_status_ok
   2549				: e1000_1000t_rx_status_not_ok;
   2550
   2551		phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
   2552				 ? e1000_1000t_rx_status_ok
   2553				 : e1000_1000t_rx_status_not_ok;
   2554	} else {
   2555		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
   2556		phy->local_rx = e1000_1000t_rx_status_undefined;
   2557		phy->remote_rx = e1000_1000t_rx_status_undefined;
   2558	}
   2559
   2560out:
   2561	return ret_val;
   2562}
   2563
   2564/**
   2565 *  igb_get_cable_length_82580 - Determine cable length for 82580 PHY
   2566 *  @hw: pointer to the HW structure
   2567 *
   2568 * Reads the diagnostic status register and verifies result is valid before
   2569 * placing it in the phy_cable_length field.
   2570 **/
   2571s32 igb_get_cable_length_82580(struct e1000_hw *hw)
   2572{
   2573	struct e1000_phy_info *phy = &hw->phy;
   2574	s32 ret_val;
   2575	u16 phy_data, length;
   2576
   2577	ret_val = phy->ops.read_reg(hw, I82580_PHY_DIAG_STATUS, &phy_data);
   2578	if (ret_val)
   2579		goto out;
   2580
   2581	length = (phy_data & I82580_DSTATUS_CABLE_LENGTH) >>
   2582		 I82580_DSTATUS_CABLE_LENGTH_SHIFT;
   2583
   2584	if (length == E1000_CABLE_LENGTH_UNDEFINED)
   2585		ret_val = -E1000_ERR_PHY;
   2586
   2587	phy->cable_length = length;
   2588
   2589out:
   2590	return ret_val;
   2591}
   2592
   2593/**
   2594 *  igb_set_master_slave_mode - Setup PHY for Master/slave mode
   2595 *  @hw: pointer to the HW structure
   2596 *
   2597 *  Sets up Master/slave mode
   2598 **/
   2599static s32 igb_set_master_slave_mode(struct e1000_hw *hw)
   2600{
   2601	s32 ret_val;
   2602	u16 phy_data;
   2603
   2604	/* Resolve Master/Slave mode */
   2605	ret_val = hw->phy.ops.read_reg(hw, PHY_1000T_CTRL, &phy_data);
   2606	if (ret_val)
   2607		return ret_val;
   2608
   2609	/* load defaults for future use */
   2610	hw->phy.original_ms_type = (phy_data & CR_1000T_MS_ENABLE) ?
   2611				   ((phy_data & CR_1000T_MS_VALUE) ?
   2612				    e1000_ms_force_master :
   2613				    e1000_ms_force_slave) : e1000_ms_auto;
   2614
   2615	switch (hw->phy.ms_type) {
   2616	case e1000_ms_force_master:
   2617		phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
   2618		break;
   2619	case e1000_ms_force_slave:
   2620		phy_data |= CR_1000T_MS_ENABLE;
   2621		phy_data &= ~(CR_1000T_MS_VALUE);
   2622		break;
   2623	case e1000_ms_auto:
   2624		phy_data &= ~CR_1000T_MS_ENABLE;
   2625		fallthrough;
   2626	default:
   2627		break;
   2628	}
   2629
   2630	return hw->phy.ops.write_reg(hw, PHY_1000T_CTRL, phy_data);
   2631}