1 /******************************************************************************
3 Copyright (c) 2001-2010, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
32 ******************************************************************************/
36 * 80003ES2LAN Gigabit Ethernet Controller (Copper)
37 * 80003ES2LAN Gigabit Ethernet Controller (Serdes)
40 #include "e1000_api.h"
42 static s32
e1000_init_phy_params_80003es2lan(struct e1000_hw
*hw
);
43 static s32
e1000_init_nvm_params_80003es2lan(struct e1000_hw
*hw
);
44 static s32
e1000_init_mac_params_80003es2lan(struct e1000_hw
*hw
);
45 static s32
e1000_acquire_phy_80003es2lan(struct e1000_hw
*hw
);
46 static void e1000_release_phy_80003es2lan(struct e1000_hw
*hw
);
47 static s32
e1000_acquire_nvm_80003es2lan(struct e1000_hw
*hw
);
48 static void e1000_release_nvm_80003es2lan(struct e1000_hw
*hw
);
49 static s32
e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw
*hw
,
52 static s32
e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw
*hw
,
55 static s32
e1000_write_nvm_80003es2lan(struct e1000_hw
*hw
, u16 offset
,
56 u16 words
, u16
*data
);
57 static s32
e1000_get_cfg_done_80003es2lan(struct e1000_hw
*hw
);
58 static s32
e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw
*hw
);
59 static s32
e1000_get_cable_length_80003es2lan(struct e1000_hw
*hw
);
60 static s32
e1000_get_link_up_info_80003es2lan(struct e1000_hw
*hw
, u16
*speed
,
62 static s32
e1000_reset_hw_80003es2lan(struct e1000_hw
*hw
);
63 static s32
e1000_init_hw_80003es2lan(struct e1000_hw
*hw
);
64 static s32
e1000_setup_copper_link_80003es2lan(struct e1000_hw
*hw
);
65 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw
*hw
);
66 static s32
e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw
*hw
, u16 mask
);
67 static s32
e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw
*hw
, u16 duplex
);
68 static s32
e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw
*hw
);
69 static s32
e1000_cfg_on_link_up_80003es2lan(struct e1000_hw
*hw
);
70 static s32
e1000_read_kmrn_reg_80003es2lan(struct e1000_hw
*hw
, u32 offset
,
72 static s32
e1000_write_kmrn_reg_80003es2lan(struct e1000_hw
*hw
, u32 offset
,
74 static s32
e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw
*hw
);
75 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw
*hw
);
76 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw
*hw
, u16 mask
);
77 static s32
e1000_read_mac_addr_80003es2lan(struct e1000_hw
*hw
);
78 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw
*hw
);
81 * A table for the GG82563 cable length where the range is defined
82 * with a lower bound at "index" and the upper bound at
85 static const u16 e1000_gg82563_cable_length_table
[] =
86 { 0, 60, 115, 150, 150, 60, 115, 150, 180, 180, 0xFF };
87 #define GG82563_CABLE_LENGTH_TABLE_SIZE \
88 (sizeof(e1000_gg82563_cable_length_table) / \
89 sizeof(e1000_gg82563_cable_length_table[0]))
92 * e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
93 * @hw: pointer to the HW structure
95 static s32
e1000_init_phy_params_80003es2lan(struct e1000_hw
*hw
)
97 struct e1000_phy_info
*phy
= &hw
->phy
;
98 s32 ret_val
= E1000_SUCCESS
;
100 DEBUGFUNC("e1000_init_phy_params_80003es2lan");
102 if (hw
->phy
.media_type
!= e1000_media_type_copper
) {
103 phy
->type
= e1000_phy_none
;
106 phy
->ops
.power_up
= e1000_power_up_phy_copper
;
107 phy
->ops
.power_down
= e1000_power_down_phy_copper_80003es2lan
;
111 phy
->autoneg_mask
= AUTONEG_ADVERTISE_SPEED_DEFAULT
;
112 phy
->reset_delay_us
= 100;
113 phy
->type
= e1000_phy_gg82563
;
115 phy
->ops
.acquire
= e1000_acquire_phy_80003es2lan
;
116 phy
->ops
.check_polarity
= e1000_check_polarity_m88
;
117 phy
->ops
.check_reset_block
= e1000_check_reset_block_generic
;
118 phy
->ops
.commit
= e1000_phy_sw_reset_generic
;
119 phy
->ops
.get_cfg_done
= e1000_get_cfg_done_80003es2lan
;
120 phy
->ops
.get_info
= e1000_get_phy_info_m88
;
121 phy
->ops
.release
= e1000_release_phy_80003es2lan
;
122 phy
->ops
.reset
= e1000_phy_hw_reset_generic
;
123 phy
->ops
.set_d3_lplu_state
= e1000_set_d3_lplu_state_generic
;
125 phy
->ops
.force_speed_duplex
= e1000_phy_force_speed_duplex_80003es2lan
;
126 phy
->ops
.get_cable_length
= e1000_get_cable_length_80003es2lan
;
127 phy
->ops
.read_reg
= e1000_read_phy_reg_gg82563_80003es2lan
;
128 phy
->ops
.write_reg
= e1000_write_phy_reg_gg82563_80003es2lan
;
130 phy
->ops
.cfg_on_link_up
= e1000_cfg_on_link_up_80003es2lan
;
132 /* This can only be done after all function pointers are setup. */
133 ret_val
= e1000_get_phy_id(hw
);
136 if (phy
->id
!= GG82563_E_PHY_ID
) {
137 ret_val
= -E1000_ERR_PHY
;
146 * e1000_init_nvm_params_80003es2lan - Init ESB2 NVM func ptrs.
147 * @hw: pointer to the HW structure
149 static s32
e1000_init_nvm_params_80003es2lan(struct e1000_hw
*hw
)
151 struct e1000_nvm_info
*nvm
= &hw
->nvm
;
152 u32 eecd
= E1000_READ_REG(hw
, E1000_EECD
);
155 DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
157 nvm
->opcode_bits
= 8;
159 switch (nvm
->override
) {
160 case e1000_nvm_override_spi_large
:
162 nvm
->address_bits
= 16;
164 case e1000_nvm_override_spi_small
:
166 nvm
->address_bits
= 8;
169 nvm
->page_size
= eecd
& E1000_EECD_ADDR_BITS
? 32 : 8;
170 nvm
->address_bits
= eecd
& E1000_EECD_ADDR_BITS
? 16 : 8;
174 nvm
->type
= e1000_nvm_eeprom_spi
;
176 size
= (u16
)((eecd
& E1000_EECD_SIZE_EX_MASK
) >>
177 E1000_EECD_SIZE_EX_SHIFT
);
180 * Added to a constant, "size" becomes the left-shift value
181 * for setting word_size.
183 size
+= NVM_WORD_SIZE_BASE_SHIFT
;
185 /* EEPROM access above 16k is unsupported */
188 nvm
->word_size
= 1 << size
;
190 /* Function Pointers */
191 nvm
->ops
.acquire
= e1000_acquire_nvm_80003es2lan
;
192 nvm
->ops
.read
= e1000_read_nvm_eerd
;
193 nvm
->ops
.release
= e1000_release_nvm_80003es2lan
;
194 nvm
->ops
.update
= e1000_update_nvm_checksum_generic
;
195 nvm
->ops
.valid_led_default
= e1000_valid_led_default_generic
;
196 nvm
->ops
.validate
= e1000_validate_nvm_checksum_generic
;
197 nvm
->ops
.write
= e1000_write_nvm_80003es2lan
;
199 return E1000_SUCCESS
;
203 * e1000_init_mac_params_80003es2lan - Init ESB2 MAC func ptrs.
204 * @hw: pointer to the HW structure
206 static s32
e1000_init_mac_params_80003es2lan(struct e1000_hw
*hw
)
208 struct e1000_mac_info
*mac
= &hw
->mac
;
210 DEBUGFUNC("e1000_init_mac_params_80003es2lan");
212 /* Set media type and media-dependent function pointers */
213 switch (hw
->device_id
) {
214 case E1000_DEV_ID_80003ES2LAN_SERDES_DPT
:
215 hw
->phy
.media_type
= e1000_media_type_internal_serdes
;
216 mac
->ops
.check_for_link
= e1000_check_for_serdes_link_generic
;
217 mac
->ops
.setup_physical_interface
=
218 e1000_setup_fiber_serdes_link_generic
;
221 hw
->phy
.media_type
= e1000_media_type_copper
;
222 mac
->ops
.check_for_link
= e1000_check_for_copper_link_generic
;
223 mac
->ops
.setup_physical_interface
=
224 e1000_setup_copper_link_80003es2lan
;
228 /* Set mta register count */
229 mac
->mta_reg_count
= 128;
230 /* Set rar entry count */
231 mac
->rar_entry_count
= E1000_RAR_ENTRIES
;
232 /* Set if part includes ASF firmware */
233 mac
->asf_firmware_present
= TRUE
;
234 /* Set if manageability features are enabled. */
235 mac
->arc_subsystem_valid
=
236 (E1000_READ_REG(hw
, E1000_FWSM
) & E1000_FWSM_MODE_MASK
)
238 /* Adaptive IFS not supported */
239 mac
->adaptive_ifs
= FALSE
;
241 /* Function pointers */
243 /* bus type/speed/width */
244 mac
->ops
.get_bus_info
= e1000_get_bus_info_pcie_generic
;
246 mac
->ops
.reset_hw
= e1000_reset_hw_80003es2lan
;
247 /* hw initialization */
248 mac
->ops
.init_hw
= e1000_init_hw_80003es2lan
;
250 mac
->ops
.setup_link
= e1000_setup_link_generic
;
251 /* check management mode */
252 mac
->ops
.check_mng_mode
= e1000_check_mng_mode_generic
;
253 /* multicast address update */
254 mac
->ops
.update_mc_addr_list
= e1000_update_mc_addr_list_generic
;
256 mac
->ops
.write_vfta
= e1000_write_vfta_generic
;
258 mac
->ops
.clear_vfta
= e1000_clear_vfta_generic
;
259 /* read mac address */
260 mac
->ops
.read_mac_addr
= e1000_read_mac_addr_80003es2lan
;
262 mac
->ops
.id_led_init
= e1000_id_led_init_generic
;
264 mac
->ops
.blink_led
= e1000_blink_led_generic
;
266 mac
->ops
.setup_led
= e1000_setup_led_generic
;
268 mac
->ops
.cleanup_led
= e1000_cleanup_led_generic
;
269 /* turn on/off LED */
270 mac
->ops
.led_on
= e1000_led_on_generic
;
271 mac
->ops
.led_off
= e1000_led_off_generic
;
272 /* clear hardware counters */
273 mac
->ops
.clear_hw_cntrs
= e1000_clear_hw_cntrs_80003es2lan
;
275 mac
->ops
.get_link_up_info
= e1000_get_link_up_info_80003es2lan
;
277 /* set lan id for port to determine which phy lock to use */
278 hw
->mac
.ops
.set_lan_id(hw
);
280 return E1000_SUCCESS
;
284 * e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
285 * @hw: pointer to the HW structure
287 * Called to initialize all function pointers and parameters.
289 void e1000_init_function_pointers_80003es2lan(struct e1000_hw
*hw
)
291 DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
293 hw
->mac
.ops
.init_params
= e1000_init_mac_params_80003es2lan
;
294 hw
->nvm
.ops
.init_params
= e1000_init_nvm_params_80003es2lan
;
295 hw
->phy
.ops
.init_params
= e1000_init_phy_params_80003es2lan
;
299 * e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
300 * @hw: pointer to the HW structure
302 * A wrapper to acquire access rights to the correct PHY.
304 static s32
e1000_acquire_phy_80003es2lan(struct e1000_hw
*hw
)
308 DEBUGFUNC("e1000_acquire_phy_80003es2lan");
310 mask
= hw
->bus
.func
? E1000_SWFW_PHY1_SM
: E1000_SWFW_PHY0_SM
;
311 return e1000_acquire_swfw_sync_80003es2lan(hw
, mask
);
315 * e1000_release_phy_80003es2lan - Release rights to access PHY
316 * @hw: pointer to the HW structure
318 * A wrapper to release access rights to the correct PHY.
320 static void e1000_release_phy_80003es2lan(struct e1000_hw
*hw
)
324 DEBUGFUNC("e1000_release_phy_80003es2lan");
326 mask
= hw
->bus
.func
? E1000_SWFW_PHY1_SM
: E1000_SWFW_PHY0_SM
;
327 e1000_release_swfw_sync_80003es2lan(hw
, mask
);
331 * e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran register
332 * @hw: pointer to the HW structure
334 * Acquire the semaphore to access the Kumeran interface.
337 static s32
e1000_acquire_mac_csr_80003es2lan(struct e1000_hw
*hw
)
341 DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
343 mask
= E1000_SWFW_CSR_SM
;
345 return e1000_acquire_swfw_sync_80003es2lan(hw
, mask
);
349 * e1000_release_mac_csr_80003es2lan - Release rights to access Kumeran Register
350 * @hw: pointer to the HW structure
352 * Release the semaphore used to access the Kumeran interface
354 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw
*hw
)
358 DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
360 mask
= E1000_SWFW_CSR_SM
;
362 e1000_release_swfw_sync_80003es2lan(hw
, mask
);
366 * e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
367 * @hw: pointer to the HW structure
369 * Acquire the semaphore to access the EEPROM.
371 static s32
e1000_acquire_nvm_80003es2lan(struct e1000_hw
*hw
)
375 DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
377 ret_val
= e1000_acquire_swfw_sync_80003es2lan(hw
, E1000_SWFW_EEP_SM
);
381 ret_val
= e1000_acquire_nvm_generic(hw
);
384 e1000_release_swfw_sync_80003es2lan(hw
, E1000_SWFW_EEP_SM
);
391 * e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
392 * @hw: pointer to the HW structure
394 * Release the semaphore used to access the EEPROM.
396 static void e1000_release_nvm_80003es2lan(struct e1000_hw
*hw
)
398 DEBUGFUNC("e1000_release_nvm_80003es2lan");
400 e1000_release_nvm_generic(hw
);
401 e1000_release_swfw_sync_80003es2lan(hw
, E1000_SWFW_EEP_SM
);
405 * e1000_acquire_swfw_sync_80003es2lan - Acquire SW/FW semaphore
406 * @hw: pointer to the HW structure
407 * @mask: specifies which semaphore to acquire
409 * Acquire the SW/FW semaphore to access the PHY or NVM. The mask
410 * will also specify which port we're acquiring the lock for.
412 static s32
e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw
*hw
, u16 mask
)
416 u32 fwmask
= mask
<< 16;
417 s32 ret_val
= E1000_SUCCESS
;
418 s32 i
= 0, timeout
= 50;
420 DEBUGFUNC("e1000_acquire_swfw_sync_80003es2lan");
422 while (i
< timeout
) {
423 if (e1000_get_hw_semaphore_generic(hw
)) {
424 ret_val
= -E1000_ERR_SWFW_SYNC
;
428 swfw_sync
= E1000_READ_REG(hw
, E1000_SW_FW_SYNC
);
429 if (!(swfw_sync
& (fwmask
| swmask
)))
433 * Firmware currently using resource (fwmask)
434 * or other software thread using resource (swmask)
436 e1000_put_hw_semaphore_generic(hw
);
442 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
443 ret_val
= -E1000_ERR_SWFW_SYNC
;
448 E1000_WRITE_REG(hw
, E1000_SW_FW_SYNC
, swfw_sync
);
450 e1000_put_hw_semaphore_generic(hw
);
457 * e1000_release_swfw_sync_80003es2lan - Release SW/FW semaphore
458 * @hw: pointer to the HW structure
459 * @mask: specifies which semaphore to acquire
461 * Release the SW/FW semaphore used to access the PHY or NVM. The mask
462 * will also specify which port we're releasing the lock for.
464 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw
*hw
, u16 mask
)
468 DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
470 while (e1000_get_hw_semaphore_generic(hw
) != E1000_SUCCESS
)
473 swfw_sync
= E1000_READ_REG(hw
, E1000_SW_FW_SYNC
);
475 E1000_WRITE_REG(hw
, E1000_SW_FW_SYNC
, swfw_sync
);
477 e1000_put_hw_semaphore_generic(hw
);
481 * e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
482 * @hw: pointer to the HW structure
483 * @offset: offset of the register to read
484 * @data: pointer to the data returned from the operation
486 * Read the GG82563 PHY register.
488 static s32
e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw
*hw
,
489 u32 offset
, u16
*data
)
495 DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
497 ret_val
= e1000_acquire_phy_80003es2lan(hw
);
501 /* Select Configuration Page */
502 if ((offset
& MAX_PHY_REG_ADDRESS
) < GG82563_MIN_ALT_REG
) {
503 page_select
= GG82563_PHY_PAGE_SELECT
;
506 * Use Alternative Page Select register to access
507 * registers 30 and 31
509 page_select
= GG82563_PHY_PAGE_SELECT_ALT
;
512 temp
= (u16
)((u16
)offset
>> GG82563_PAGE_SHIFT
);
513 ret_val
= e1000_write_phy_reg_mdic(hw
, page_select
, temp
);
515 e1000_release_phy_80003es2lan(hw
);
519 if (hw
->dev_spec
._80003es2lan
.mdic_wa_enable
== TRUE
) {
521 * The "ready" bit in the MDIC register may be incorrectly set
522 * before the device has completed the "Page Select" MDI
523 * transaction. So we wait 200us after each MDI command...
527 /* ...and verify the command was successful. */
528 ret_val
= e1000_read_phy_reg_mdic(hw
, page_select
, &temp
);
530 if (((u16
)offset
>> GG82563_PAGE_SHIFT
) != temp
) {
531 ret_val
= -E1000_ERR_PHY
;
532 e1000_release_phy_80003es2lan(hw
);
538 ret_val
= e1000_read_phy_reg_mdic(hw
,
539 MAX_PHY_REG_ADDRESS
& offset
,
544 ret_val
= e1000_read_phy_reg_mdic(hw
,
545 MAX_PHY_REG_ADDRESS
& offset
,
549 e1000_release_phy_80003es2lan(hw
);
556 * e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
557 * @hw: pointer to the HW structure
558 * @offset: offset of the register to read
559 * @data: value to write to the register
561 * Write to the GG82563 PHY register.
563 static s32
e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw
*hw
,
564 u32 offset
, u16 data
)
570 DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
572 ret_val
= e1000_acquire_phy_80003es2lan(hw
);
576 /* Select Configuration Page */
577 if ((offset
& MAX_PHY_REG_ADDRESS
) < GG82563_MIN_ALT_REG
) {
578 page_select
= GG82563_PHY_PAGE_SELECT
;
581 * Use Alternative Page Select register to access
582 * registers 30 and 31
584 page_select
= GG82563_PHY_PAGE_SELECT_ALT
;
587 temp
= (u16
)((u16
)offset
>> GG82563_PAGE_SHIFT
);
588 ret_val
= e1000_write_phy_reg_mdic(hw
, page_select
, temp
);
590 e1000_release_phy_80003es2lan(hw
);
594 if (hw
->dev_spec
._80003es2lan
.mdic_wa_enable
== TRUE
) {
596 * The "ready" bit in the MDIC register may be incorrectly set
597 * before the device has completed the "Page Select" MDI
598 * transaction. So we wait 200us after each MDI command...
602 /* ...and verify the command was successful. */
603 ret_val
= e1000_read_phy_reg_mdic(hw
, page_select
, &temp
);
605 if (((u16
)offset
>> GG82563_PAGE_SHIFT
) != temp
) {
606 ret_val
= -E1000_ERR_PHY
;
607 e1000_release_phy_80003es2lan(hw
);
613 ret_val
= e1000_write_phy_reg_mdic(hw
,
614 MAX_PHY_REG_ADDRESS
& offset
,
619 ret_val
= e1000_write_phy_reg_mdic(hw
,
620 MAX_PHY_REG_ADDRESS
& offset
,
624 e1000_release_phy_80003es2lan(hw
);
631 * e1000_write_nvm_80003es2lan - Write to ESB2 NVM
632 * @hw: pointer to the HW structure
633 * @offset: offset of the register to read
634 * @words: number of words to write
635 * @data: buffer of data to write to the NVM
637 * Write "words" of data to the ESB2 NVM.
639 static s32
e1000_write_nvm_80003es2lan(struct e1000_hw
*hw
, u16 offset
,
640 u16 words
, u16
*data
)
642 DEBUGFUNC("e1000_write_nvm_80003es2lan");
644 return e1000_write_nvm_spi(hw
, offset
, words
, data
);
648 * e1000_get_cfg_done_80003es2lan - Wait for configuration to complete
649 * @hw: pointer to the HW structure
651 * Wait a specific amount of time for manageability processes to complete.
652 * This is a function pointer entry point called by the phy module.
654 static s32
e1000_get_cfg_done_80003es2lan(struct e1000_hw
*hw
)
656 s32 timeout
= PHY_CFG_TIMEOUT
;
657 s32 ret_val
= E1000_SUCCESS
;
658 u32 mask
= E1000_NVM_CFG_DONE_PORT_0
;
660 DEBUGFUNC("e1000_get_cfg_done_80003es2lan");
662 if (hw
->bus
.func
== 1)
663 mask
= E1000_NVM_CFG_DONE_PORT_1
;
666 if (E1000_READ_REG(hw
, E1000_EEMNGCTL
) & mask
)
672 DEBUGOUT("MNG configuration cycle has not completed.\n");
673 ret_val
= -E1000_ERR_RESET
;
682 * e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex
683 * @hw: pointer to the HW structure
685 * Force the speed and duplex settings onto the PHY. This is a
686 * function pointer entry point called by the phy module.
688 static s32
e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw
*hw
)
690 s32 ret_val
= E1000_SUCCESS
;
694 DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
696 if (!(hw
->phy
.ops
.read_reg
))
700 * Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
701 * forced whenever speed and duplex are forced.
703 ret_val
= hw
->phy
.ops
.read_reg(hw
, M88E1000_PHY_SPEC_CTRL
, &phy_data
);
707 phy_data
&= ~GG82563_PSCR_CROSSOVER_MODE_AUTO
;
708 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_SPEC_CTRL
, phy_data
);
712 DEBUGOUT1("GG82563 PSCR: %X\n", phy_data
);
714 ret_val
= hw
->phy
.ops
.read_reg(hw
, PHY_CONTROL
, &phy_data
);
718 e1000_phy_force_speed_duplex_setup(hw
, &phy_data
);
720 /* Reset the phy to commit changes. */
721 phy_data
|= MII_CR_RESET
;
723 ret_val
= hw
->phy
.ops
.write_reg(hw
, PHY_CONTROL
, phy_data
);
729 if (hw
->phy
.autoneg_wait_to_complete
) {
730 DEBUGOUT("Waiting for forced speed/duplex link "
731 "on GG82563 phy.\n");
733 ret_val
= e1000_phy_has_link_generic(hw
, PHY_FORCE_LIMIT
,
740 * We didn't get link.
741 * Reset the DSP and cross our fingers.
743 ret_val
= e1000_phy_reset_dsp_generic(hw
);
749 ret_val
= e1000_phy_has_link_generic(hw
, PHY_FORCE_LIMIT
,
755 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_MAC_SPEC_CTRL
, &phy_data
);
760 * Resetting the phy means we need to verify the TX_CLK corresponds
761 * to the link speed. 10Mbps -> 2.5MHz, else 25MHz.
763 phy_data
&= ~GG82563_MSCR_TX_CLK_MASK
;
764 if (hw
->mac
.forced_speed_duplex
& E1000_ALL_10_SPEED
)
765 phy_data
|= GG82563_MSCR_TX_CLK_10MBPS_2_5
;
767 phy_data
|= GG82563_MSCR_TX_CLK_100MBPS_25
;
770 * In addition, we must re-enable CRS on Tx for both half and full
773 phy_data
|= GG82563_MSCR_ASSERT_CRS_ON_TX
;
774 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_MAC_SPEC_CTRL
, phy_data
);
781 * e1000_get_cable_length_80003es2lan - Set approximate cable length
782 * @hw: pointer to the HW structure
784 * Find the approximate cable length as measured by the GG82563 PHY.
785 * This is a function pointer entry point called by the phy module.
787 static s32
e1000_get_cable_length_80003es2lan(struct e1000_hw
*hw
)
789 struct e1000_phy_info
*phy
= &hw
->phy
;
790 s32 ret_val
= E1000_SUCCESS
;
793 DEBUGFUNC("e1000_get_cable_length_80003es2lan");
795 if (!(hw
->phy
.ops
.read_reg
))
798 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_DSP_DISTANCE
, &phy_data
);
802 index
= phy_data
& GG82563_DSPD_CABLE_LENGTH
;
804 if (index
>= GG82563_CABLE_LENGTH_TABLE_SIZE
- 5) {
805 ret_val
= -E1000_ERR_PHY
;
809 phy
->min_cable_length
= e1000_gg82563_cable_length_table
[index
];
810 phy
->max_cable_length
= e1000_gg82563_cable_length_table
[index
+ 5];
812 phy
->cable_length
= (phy
->min_cable_length
+ phy
->max_cable_length
) / 2;
819 * e1000_get_link_up_info_80003es2lan - Report speed and duplex
820 * @hw: pointer to the HW structure
821 * @speed: pointer to speed buffer
822 * @duplex: pointer to duplex buffer
824 * Retrieve the current speed and duplex configuration.
826 static s32
e1000_get_link_up_info_80003es2lan(struct e1000_hw
*hw
, u16
*speed
,
831 DEBUGFUNC("e1000_get_link_up_info_80003es2lan");
833 if (hw
->phy
.media_type
== e1000_media_type_copper
) {
834 ret_val
= e1000_get_speed_and_duplex_copper_generic(hw
,
837 hw
->phy
.ops
.cfg_on_link_up(hw
);
839 ret_val
= e1000_get_speed_and_duplex_fiber_serdes_generic(hw
,
848 * e1000_reset_hw_80003es2lan - Reset the ESB2 controller
849 * @hw: pointer to the HW structure
851 * Perform a global reset to the ESB2 controller.
853 static s32
e1000_reset_hw_80003es2lan(struct e1000_hw
*hw
)
858 DEBUGFUNC("e1000_reset_hw_80003es2lan");
861 * Prevent the PCI-E bus from sticking if there is no TLP connection
862 * on the last TLP read/write transaction when MAC is reset.
864 ret_val
= e1000_disable_pcie_master_generic(hw
);
866 DEBUGOUT("PCI-E Master disable polling has failed.\n");
868 DEBUGOUT("Masking off all interrupts\n");
869 E1000_WRITE_REG(hw
, E1000_IMC
, 0xffffffff);
871 E1000_WRITE_REG(hw
, E1000_RCTL
, 0);
872 E1000_WRITE_REG(hw
, E1000_TCTL
, E1000_TCTL_PSP
);
873 E1000_WRITE_FLUSH(hw
);
877 ctrl
= E1000_READ_REG(hw
, E1000_CTRL
);
879 ret_val
= e1000_acquire_phy_80003es2lan(hw
);
880 DEBUGOUT("Issuing a global reset to MAC\n");
881 E1000_WRITE_REG(hw
, E1000_CTRL
, ctrl
| E1000_CTRL_RST
);
882 e1000_release_phy_80003es2lan(hw
);
884 ret_val
= e1000_get_auto_rd_done_generic(hw
);
886 /* We don't want to continue accessing MAC registers. */
889 /* Clear any pending interrupt events. */
890 E1000_WRITE_REG(hw
, E1000_IMC
, 0xffffffff);
891 icr
= E1000_READ_REG(hw
, E1000_ICR
);
893 ret_val
= e1000_check_alt_mac_addr_generic(hw
);
900 * e1000_init_hw_80003es2lan - Initialize the ESB2 controller
901 * @hw: pointer to the HW structure
903 * Initialize the hw bits, LED, VFTA, MTA, link and hw counters.
905 static s32
e1000_init_hw_80003es2lan(struct e1000_hw
*hw
)
907 struct e1000_mac_info
*mac
= &hw
->mac
;
912 DEBUGFUNC("e1000_init_hw_80003es2lan");
914 e1000_initialize_hw_bits_80003es2lan(hw
);
916 /* Initialize identification LED */
917 ret_val
= mac
->ops
.id_led_init(hw
);
919 DEBUGOUT("Error initializing identification LED\n");
920 /* This is not fatal and we should not stop init due to this */
922 /* Disabling VLAN filtering */
923 DEBUGOUT("Initializing the IEEE VLAN\n");
924 mac
->ops
.clear_vfta(hw
);
926 /* Setup the receive address. */
927 e1000_init_rx_addrs_generic(hw
, mac
->rar_entry_count
);
929 /* Zero out the Multicast HASH table */
930 DEBUGOUT("Zeroing the MTA\n");
931 for (i
= 0; i
< mac
->mta_reg_count
; i
++)
932 E1000_WRITE_REG_ARRAY(hw
, E1000_MTA
, i
, 0);
934 /* Setup link and flow control */
935 ret_val
= mac
->ops
.setup_link(hw
);
937 /* Set the transmit descriptor write-back policy */
938 reg_data
= E1000_READ_REG(hw
, E1000_TXDCTL(0));
939 reg_data
= (reg_data
& ~E1000_TXDCTL_WTHRESH
) |
940 E1000_TXDCTL_FULL_TX_DESC_WB
| E1000_TXDCTL_COUNT_DESC
;
941 E1000_WRITE_REG(hw
, E1000_TXDCTL(0), reg_data
);
943 /* ...for both queues. */
944 reg_data
= E1000_READ_REG(hw
, E1000_TXDCTL(1));
945 reg_data
= (reg_data
& ~E1000_TXDCTL_WTHRESH
) |
946 E1000_TXDCTL_FULL_TX_DESC_WB
| E1000_TXDCTL_COUNT_DESC
;
947 E1000_WRITE_REG(hw
, E1000_TXDCTL(1), reg_data
);
949 /* Enable retransmit on late collisions */
950 reg_data
= E1000_READ_REG(hw
, E1000_TCTL
);
951 reg_data
|= E1000_TCTL_RTLC
;
952 E1000_WRITE_REG(hw
, E1000_TCTL
, reg_data
);
954 /* Configure Gigabit Carry Extend Padding */
955 reg_data
= E1000_READ_REG(hw
, E1000_TCTL_EXT
);
956 reg_data
&= ~E1000_TCTL_EXT_GCEX_MASK
;
957 reg_data
|= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN
;
958 E1000_WRITE_REG(hw
, E1000_TCTL_EXT
, reg_data
);
960 /* Configure Transmit Inter-Packet Gap */
961 reg_data
= E1000_READ_REG(hw
, E1000_TIPG
);
962 reg_data
&= ~E1000_TIPG_IPGT_MASK
;
963 reg_data
|= DEFAULT_TIPG_IPGT_1000_80003ES2LAN
;
964 E1000_WRITE_REG(hw
, E1000_TIPG
, reg_data
);
966 reg_data
= E1000_READ_REG_ARRAY(hw
, E1000_FFLT
, 0x0001);
967 reg_data
&= ~0x00100000;
968 E1000_WRITE_REG_ARRAY(hw
, E1000_FFLT
, 0x0001, reg_data
);
970 /* default to TRUE to enable the MDIC W/A */
971 hw
->dev_spec
._80003es2lan
.mdic_wa_enable
= TRUE
;
973 ret_val
= e1000_read_kmrn_reg_80003es2lan(hw
,
974 E1000_KMRNCTRLSTA_OFFSET
>>
975 E1000_KMRNCTRLSTA_OFFSET_SHIFT
,
978 if ((i
& E1000_KMRNCTRLSTA_OPMODE_MASK
) ==
979 E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO
)
980 hw
->dev_spec
._80003es2lan
.mdic_wa_enable
= FALSE
;
984 * Clear all of the statistics registers (clear on read). It is
985 * important that we do this after we have tried to establish link
986 * because the symbol error count will increment wildly if there
989 e1000_clear_hw_cntrs_80003es2lan(hw
);
995 * e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
996 * @hw: pointer to the HW structure
998 * Initializes required hardware-dependent bits needed for normal operation.
1000 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw
*hw
)
1004 DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
1006 /* Transmit Descriptor Control 0 */
1007 reg
= E1000_READ_REG(hw
, E1000_TXDCTL(0));
1009 E1000_WRITE_REG(hw
, E1000_TXDCTL(0), reg
);
1011 /* Transmit Descriptor Control 1 */
1012 reg
= E1000_READ_REG(hw
, E1000_TXDCTL(1));
1014 E1000_WRITE_REG(hw
, E1000_TXDCTL(1), reg
);
1016 /* Transmit Arbitration Control 0 */
1017 reg
= E1000_READ_REG(hw
, E1000_TARC(0));
1018 reg
&= ~(0xF << 27); /* 30:27 */
1019 if (hw
->phy
.media_type
!= e1000_media_type_copper
)
1021 E1000_WRITE_REG(hw
, E1000_TARC(0), reg
);
1023 /* Transmit Arbitration Control 1 */
1024 reg
= E1000_READ_REG(hw
, E1000_TARC(1));
1025 if (E1000_READ_REG(hw
, E1000_TCTL
) & E1000_TCTL_MULR
)
1029 E1000_WRITE_REG(hw
, E1000_TARC(1), reg
);
1035 * e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
1036 * @hw: pointer to the HW structure
1038 * Setup some GG82563 PHY registers for obtaining link
1040 static s32
e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw
*hw
)
1042 struct e1000_phy_info
*phy
= &hw
->phy
;
1047 DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1049 if (phy
->reset_disable
)
1052 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_MAC_SPEC_CTRL
,
1057 data
|= GG82563_MSCR_ASSERT_CRS_ON_TX
;
1058 /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
1059 data
|= GG82563_MSCR_TX_CLK_1000MBPS_25
;
1061 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_MAC_SPEC_CTRL
,
1068 * MDI/MDI-X = 0 (default)
1069 * 0 - Auto for all speeds
1072 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1074 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_SPEC_CTRL
, &data
);
1078 data
&= ~GG82563_PSCR_CROSSOVER_MODE_MASK
;
1080 switch (phy
->mdix
) {
1082 data
|= GG82563_PSCR_CROSSOVER_MODE_MDI
;
1085 data
|= GG82563_PSCR_CROSSOVER_MODE_MDIX
;
1089 data
|= GG82563_PSCR_CROSSOVER_MODE_AUTO
;
1095 * disable_polarity_correction = 0 (default)
1096 * Automatic Correction for Reversed Cable Polarity
1100 data
&= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE
;
1101 if (phy
->disable_polarity_correction
)
1102 data
|= GG82563_PSCR_POLARITY_REVERSAL_DISABLE
;
1104 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_SPEC_CTRL
, data
);
1108 /* SW Reset the PHY so all changes take effect */
1109 ret_val
= hw
->phy
.ops
.commit(hw
);
1111 DEBUGOUT("Error Resetting the PHY\n");
1116 /* Bypass Rx and Tx FIFO's */
1117 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
,
1118 E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL
,
1119 E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS
|
1120 E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS
);
1124 ret_val
= e1000_read_kmrn_reg_80003es2lan(hw
,
1125 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE
,
1129 data
|= E1000_KMRNCTRLSTA_OPMODE_E_IDLE
;
1130 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
,
1131 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE
,
1136 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_SPEC_CTRL_2
, &data
);
1140 data
&= ~GG82563_PSCR2_REVERSE_AUTO_NEG
;
1141 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_SPEC_CTRL_2
, data
);
1145 ctrl_ext
= E1000_READ_REG(hw
, E1000_CTRL_EXT
);
1146 ctrl_ext
&= ~(E1000_CTRL_EXT_LINK_MODE_MASK
);
1147 E1000_WRITE_REG(hw
, E1000_CTRL_EXT
, ctrl_ext
);
1149 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_PWR_MGMT_CTRL
, &data
);
1154 * Do not init these registers when the HW is in IAMT mode, since the
1155 * firmware will have already initialized them. We only initialize
1156 * them if the HW is not in IAMT mode.
1158 if (!(hw
->mac
.ops
.check_mng_mode(hw
))) {
1159 /* Enable Electrical Idle on the PHY */
1160 data
|= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE
;
1161 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_PWR_MGMT_CTRL
,
1166 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1171 data
&= ~GG82563_KMCR_PASS_FALSE_CARRIER
;
1172 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1179 * Workaround: Disable padding in Kumeran interface in the MAC
1180 * and in the PHY to avoid CRC errors.
1182 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_INBAND_CTRL
, &data
);
1186 data
|= GG82563_ICR_DIS_PADDING
;
1187 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_INBAND_CTRL
, data
);
1196 * e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1197 * @hw: pointer to the HW structure
1199 * Essentially a wrapper for setting up all things "copper" related.
1200 * This is a function pointer entry point called by the mac module.
1202 static s32
e1000_setup_copper_link_80003es2lan(struct e1000_hw
*hw
)
1208 DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1210 ctrl
= E1000_READ_REG(hw
, E1000_CTRL
);
1211 ctrl
|= E1000_CTRL_SLU
;
1212 ctrl
&= ~(E1000_CTRL_FRCSPD
| E1000_CTRL_FRCDPX
);
1213 E1000_WRITE_REG(hw
, E1000_CTRL
, ctrl
);
1216 * Set the mac to wait the maximum time between each
1217 * iteration and increase the max iterations when
1218 * polling the phy; this fixes erroneous timeouts at 10Mbps.
1220 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
, GG82563_REG(0x34, 4),
1224 ret_val
= e1000_read_kmrn_reg_80003es2lan(hw
, GG82563_REG(0x34, 9),
1229 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
, GG82563_REG(0x34, 9),
1233 ret_val
= e1000_read_kmrn_reg_80003es2lan(hw
,
1234 E1000_KMRNCTRLSTA_OFFSET_INB_CTRL
,
1238 reg_data
|= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING
;
1239 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
,
1240 E1000_KMRNCTRLSTA_OFFSET_INB_CTRL
,
1245 ret_val
= e1000_copper_link_setup_gg82563_80003es2lan(hw
);
1249 ret_val
= e1000_setup_copper_link_generic(hw
);
1256 * e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1257 * @hw: pointer to the HW structure
1258 * @duplex: current duplex setting
1260 * Configure the KMRN interface by applying last minute quirks for
1263 static s32
e1000_cfg_on_link_up_80003es2lan(struct e1000_hw
*hw
)
1265 s32 ret_val
= E1000_SUCCESS
;
1269 DEBUGFUNC("e1000_configure_on_link_up");
1271 if (hw
->phy
.media_type
== e1000_media_type_copper
) {
1272 ret_val
= e1000_get_speed_and_duplex_copper_generic(hw
,
1278 if (speed
== SPEED_1000
)
1279 ret_val
= e1000_cfg_kmrn_1000_80003es2lan(hw
);
1281 ret_val
= e1000_cfg_kmrn_10_100_80003es2lan(hw
, duplex
);
1289 * e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1290 * @hw: pointer to the HW structure
1291 * @duplex: current duplex setting
1293 * Configure the KMRN interface by applying last minute quirks for
1296 static s32
e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw
*hw
, u16 duplex
)
1298 s32 ret_val
= E1000_SUCCESS
;
1301 u16 reg_data
, reg_data2
;
1303 DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1305 reg_data
= E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT
;
1306 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
,
1307 E1000_KMRNCTRLSTA_OFFSET_HD_CTRL
,
1312 /* Configure Transmit Inter-Packet Gap */
1313 tipg
= E1000_READ_REG(hw
, E1000_TIPG
);
1314 tipg
&= ~E1000_TIPG_IPGT_MASK
;
1315 tipg
|= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN
;
1316 E1000_WRITE_REG(hw
, E1000_TIPG
, tipg
);
1319 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1324 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1329 } while ((reg_data
!= reg_data2
) && (i
< GG82563_MAX_KMRN_RETRY
));
1331 if (duplex
== HALF_DUPLEX
)
1332 reg_data
|= GG82563_KMCR_PASS_FALSE_CARRIER
;
1334 reg_data
&= ~GG82563_KMCR_PASS_FALSE_CARRIER
;
1336 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
, reg_data
);
1343 * e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1344 * @hw: pointer to the HW structure
1346 * Configure the KMRN interface by applying last minute quirks for
1347 * gigabit operation.
1349 static s32
e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw
*hw
)
1351 s32 ret_val
= E1000_SUCCESS
;
1352 u16 reg_data
, reg_data2
;
1356 DEBUGFUNC("e1000_configure_kmrn_for_1000");
1358 reg_data
= E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT
;
1359 ret_val
= e1000_write_kmrn_reg_80003es2lan(hw
,
1360 E1000_KMRNCTRLSTA_OFFSET_HD_CTRL
,
1365 /* Configure Transmit Inter-Packet Gap */
1366 tipg
= E1000_READ_REG(hw
, E1000_TIPG
);
1367 tipg
&= ~E1000_TIPG_IPGT_MASK
;
1368 tipg
|= DEFAULT_TIPG_IPGT_1000_80003ES2LAN
;
1369 E1000_WRITE_REG(hw
, E1000_TIPG
, tipg
);
1372 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1377 ret_val
= hw
->phy
.ops
.read_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
,
1382 } while ((reg_data
!= reg_data2
) && (i
< GG82563_MAX_KMRN_RETRY
));
1384 reg_data
&= ~GG82563_KMCR_PASS_FALSE_CARRIER
;
1385 ret_val
= hw
->phy
.ops
.write_reg(hw
, GG82563_PHY_KMRN_MODE_CTRL
, reg_data
);
1392 * e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1393 * @hw: pointer to the HW structure
1394 * @offset: register offset to be read
1395 * @data: pointer to the read data
1397 * Acquire semaphore, then read the PHY register at offset
1398 * using the kumeran interface. The information retrieved is stored in data.
1399 * Release the semaphore before exiting.
1401 static s32
e1000_read_kmrn_reg_80003es2lan(struct e1000_hw
*hw
, u32 offset
,
1405 s32 ret_val
= E1000_SUCCESS
;
1407 DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1409 ret_val
= e1000_acquire_mac_csr_80003es2lan(hw
);
1413 kmrnctrlsta
= ((offset
<< E1000_KMRNCTRLSTA_OFFSET_SHIFT
) &
1414 E1000_KMRNCTRLSTA_OFFSET
) | E1000_KMRNCTRLSTA_REN
;
1415 E1000_WRITE_REG(hw
, E1000_KMRNCTRLSTA
, kmrnctrlsta
);
1419 kmrnctrlsta
= E1000_READ_REG(hw
, E1000_KMRNCTRLSTA
);
1420 *data
= (u16
)kmrnctrlsta
;
1422 e1000_release_mac_csr_80003es2lan(hw
);
1429 * e1000_write_kmrn_reg_80003es2lan - Write kumeran register
1430 * @hw: pointer to the HW structure
1431 * @offset: register offset to write to
1432 * @data: data to write at register offset
1434 * Acquire semaphore, then write the data to PHY register
1435 * at the offset using the kumeran interface. Release semaphore
1438 static s32
e1000_write_kmrn_reg_80003es2lan(struct e1000_hw
*hw
, u32 offset
,
1442 s32 ret_val
= E1000_SUCCESS
;
1444 DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1446 ret_val
= e1000_acquire_mac_csr_80003es2lan(hw
);
1450 kmrnctrlsta
= ((offset
<< E1000_KMRNCTRLSTA_OFFSET_SHIFT
) &
1451 E1000_KMRNCTRLSTA_OFFSET
) | data
;
1452 E1000_WRITE_REG(hw
, E1000_KMRNCTRLSTA
, kmrnctrlsta
);
1456 e1000_release_mac_csr_80003es2lan(hw
);
1463 * e1000_read_mac_addr_80003es2lan - Read device MAC address
1464 * @hw: pointer to the HW structure
1466 static s32
e1000_read_mac_addr_80003es2lan(struct e1000_hw
*hw
)
1468 s32 ret_val
= E1000_SUCCESS
;
1470 DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1473 * If there's an alternate MAC address place it in RAR0
1474 * so that it will override the Si installed default perm
1477 ret_val
= e1000_check_alt_mac_addr_generic(hw
);
1481 ret_val
= e1000_read_mac_addr_generic(hw
);
1488 * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1489 * @hw: pointer to the HW structure
1491 * In the case of a PHY power down to save power, or to turn off link during a
1492 * driver unload, or wake on lan is not enabled, remove the link.
1494 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw
*hw
)
1496 /* If the management interface is not enabled, then power down */
1497 if (!(hw
->mac
.ops
.check_mng_mode(hw
) ||
1498 hw
->phy
.ops
.check_reset_block(hw
)))
1499 e1000_power_down_phy_copper(hw
);
1505 * e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1506 * @hw: pointer to the HW structure
1508 * Clears the hardware counters by reading the counter registers.
1510 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw
*hw
)
1512 DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1514 e1000_clear_hw_cntrs_base_generic(hw
);
1516 E1000_READ_REG(hw
, E1000_PRC64
);
1517 E1000_READ_REG(hw
, E1000_PRC127
);
1518 E1000_READ_REG(hw
, E1000_PRC255
);
1519 E1000_READ_REG(hw
, E1000_PRC511
);
1520 E1000_READ_REG(hw
, E1000_PRC1023
);
1521 E1000_READ_REG(hw
, E1000_PRC1522
);
1522 E1000_READ_REG(hw
, E1000_PTC64
);
1523 E1000_READ_REG(hw
, E1000_PTC127
);
1524 E1000_READ_REG(hw
, E1000_PTC255
);
1525 E1000_READ_REG(hw
, E1000_PTC511
);
1526 E1000_READ_REG(hw
, E1000_PTC1023
);
1527 E1000_READ_REG(hw
, E1000_PTC1522
);
1529 E1000_READ_REG(hw
, E1000_ALGNERRC
);
1530 E1000_READ_REG(hw
, E1000_RXERRC
);
1531 E1000_READ_REG(hw
, E1000_TNCRS
);
1532 E1000_READ_REG(hw
, E1000_CEXTERR
);
1533 E1000_READ_REG(hw
, E1000_TSCTC
);
1534 E1000_READ_REG(hw
, E1000_TSCTFC
);
1536 E1000_READ_REG(hw
, E1000_MGTPRC
);
1537 E1000_READ_REG(hw
, E1000_MGTPDC
);
1538 E1000_READ_REG(hw
, E1000_MGTPTC
);
1540 E1000_READ_REG(hw
, E1000_IAC
);
1541 E1000_READ_REG(hw
, E1000_ICRXOC
);
1543 E1000_READ_REG(hw
, E1000_ICRXPTC
);
1544 E1000_READ_REG(hw
, E1000_ICRXATC
);
1545 E1000_READ_REG(hw
, E1000_ICTXPTC
);
1546 E1000_READ_REG(hw
, E1000_ICTXATC
);
1547 E1000_READ_REG(hw
, E1000_ICTXQEC
);
1548 E1000_READ_REG(hw
, E1000_ICTXQMTC
);
1549 E1000_READ_REG(hw
, E1000_ICRXDMTC
);