e1000 - Literally import e1000 driver from FreeBSD
[dragonfly.git] / sys / dev / netif / e1000 / e1000_80003es2lan.c
blobdb32f8cbe363e404f0a10880739df9f3aef12c57
1 /******************************************************************************
3 Copyright (c) 2001-2010, Intel Corporation
4 All rights reserved.
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 ******************************************************************************/
33 /*$FreeBSD$*/
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,
50 u32 offset,
51 u16 *data);
52 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
53 u32 offset,
54 u16 data);
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,
61 u16 *duplex);
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,
71 u16 *data);
72 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
73 u16 data);
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
83 * "index + 5".
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]))
91 /**
92 * e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
93 * @hw: pointer to the HW structure
94 **/
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;
104 goto out;
105 } else {
106 phy->ops.power_up = e1000_power_up_phy_copper;
107 phy->ops.power_down = e1000_power_down_phy_copper_80003es2lan;
110 phy->addr = 1;
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);
135 /* Verify phy id */
136 if (phy->id != GG82563_E_PHY_ID) {
137 ret_val = -E1000_ERR_PHY;
138 goto out;
141 out:
142 return ret_val;
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);
153 u16 size;
155 DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
157 nvm->opcode_bits = 8;
158 nvm->delay_usec = 1;
159 switch (nvm->override) {
160 case e1000_nvm_override_spi_large:
161 nvm->page_size = 32;
162 nvm->address_bits = 16;
163 break;
164 case e1000_nvm_override_spi_small:
165 nvm->page_size = 8;
166 nvm->address_bits = 8;
167 break;
168 default:
169 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
170 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
171 break;
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 */
186 if (size > 14)
187 size = 14;
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;
219 break;
220 default:
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;
225 break;
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)
237 ? TRUE : FALSE;
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;
245 /* reset */
246 mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
247 /* hw initialization */
248 mac->ops.init_hw = e1000_init_hw_80003es2lan;
249 /* link setup */
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;
255 /* writing VFTA */
256 mac->ops.write_vfta = e1000_write_vfta_generic;
257 /* clearing VFTA */
258 mac->ops.clear_vfta = e1000_clear_vfta_generic;
259 /* read mac address */
260 mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
261 /* ID LED init */
262 mac->ops.id_led_init = e1000_id_led_init_generic;
263 /* blink LED */
264 mac->ops.blink_led = e1000_blink_led_generic;
265 /* setup LED */
266 mac->ops.setup_led = e1000_setup_led_generic;
267 /* cleanup LED */
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;
274 /* link info */
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)
306 u16 mask;
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)
322 u16 mask;
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)
339 u16 mask;
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)
356 u16 mask;
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)
373 s32 ret_val;
375 DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
377 ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
378 if (ret_val)
379 goto out;
381 ret_val = e1000_acquire_nvm_generic(hw);
383 if (ret_val)
384 e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
386 out:
387 return ret_val;
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)
414 u32 swfw_sync;
415 u32 swmask = 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;
425 goto out;
428 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
429 if (!(swfw_sync & (fwmask | swmask)))
430 break;
433 * Firmware currently using resource (fwmask)
434 * or other software thread using resource (swmask)
436 e1000_put_hw_semaphore_generic(hw);
437 msec_delay_irq(5);
438 i++;
441 if (i == timeout) {
442 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
443 ret_val = -E1000_ERR_SWFW_SYNC;
444 goto out;
447 swfw_sync |= swmask;
448 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
450 e1000_put_hw_semaphore_generic(hw);
452 out:
453 return ret_val;
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)
466 u32 swfw_sync;
468 DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
470 while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
471 ; /* Empty */
473 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
474 swfw_sync &= ~mask;
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)
491 s32 ret_val;
492 u32 page_select;
493 u16 temp;
495 DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
497 ret_val = e1000_acquire_phy_80003es2lan(hw);
498 if (ret_val)
499 goto out;
501 /* Select Configuration Page */
502 if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
503 page_select = GG82563_PHY_PAGE_SELECT;
504 } else {
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);
514 if (ret_val) {
515 e1000_release_phy_80003es2lan(hw);
516 goto out;
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...
525 usec_delay(200);
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);
533 goto out;
536 usec_delay(200);
538 ret_val = e1000_read_phy_reg_mdic(hw,
539 MAX_PHY_REG_ADDRESS & offset,
540 data);
542 usec_delay(200);
543 } else {
544 ret_val = e1000_read_phy_reg_mdic(hw,
545 MAX_PHY_REG_ADDRESS & offset,
546 data);
549 e1000_release_phy_80003es2lan(hw);
551 out:
552 return ret_val;
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)
566 s32 ret_val;
567 u32 page_select;
568 u16 temp;
570 DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
572 ret_val = e1000_acquire_phy_80003es2lan(hw);
573 if (ret_val)
574 goto out;
576 /* Select Configuration Page */
577 if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
578 page_select = GG82563_PHY_PAGE_SELECT;
579 } else {
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);
589 if (ret_val) {
590 e1000_release_phy_80003es2lan(hw);
591 goto out;
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...
600 usec_delay(200);
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);
608 goto out;
611 usec_delay(200);
613 ret_val = e1000_write_phy_reg_mdic(hw,
614 MAX_PHY_REG_ADDRESS & offset,
615 data);
617 usec_delay(200);
618 } else {
619 ret_val = e1000_write_phy_reg_mdic(hw,
620 MAX_PHY_REG_ADDRESS & offset,
621 data);
624 e1000_release_phy_80003es2lan(hw);
626 out:
627 return ret_val;
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;
665 while (timeout) {
666 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
667 break;
668 msec_delay(1);
669 timeout--;
671 if (!timeout) {
672 DEBUGOUT("MNG configuration cycle has not completed.\n");
673 ret_val = -E1000_ERR_RESET;
674 goto out;
677 out:
678 return ret_val;
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;
691 u16 phy_data;
692 bool link;
694 DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
696 if (!(hw->phy.ops.read_reg))
697 goto out;
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);
704 if (ret_val)
705 goto out;
707 phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;
708 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
709 if (ret_val)
710 goto out;
712 DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);
714 ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);
715 if (ret_val)
716 goto out;
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);
724 if (ret_val)
725 goto out;
727 usec_delay(1);
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,
734 100000, &link);
735 if (ret_val)
736 goto out;
738 if (!link) {
740 * We didn't get link.
741 * Reset the DSP and cross our fingers.
743 ret_val = e1000_phy_reset_dsp_generic(hw);
744 if (ret_val)
745 goto out;
748 /* Try once more */
749 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
750 100000, &link);
751 if (ret_val)
752 goto out;
755 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);
756 if (ret_val)
757 goto out;
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;
766 else
767 phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;
770 * In addition, we must re-enable CRS on Tx for both half and full
771 * duplex.
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);
776 out:
777 return ret_val;
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;
791 u16 phy_data, index;
793 DEBUGFUNC("e1000_get_cable_length_80003es2lan");
795 if (!(hw->phy.ops.read_reg))
796 goto out;
798 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
799 if (ret_val)
800 goto out;
802 index = phy_data & GG82563_DSPD_CABLE_LENGTH;
804 if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
805 ret_val = -E1000_ERR_PHY;
806 goto out;
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;
814 out:
815 return ret_val;
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,
827 u16 *duplex)
829 s32 ret_val;
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,
835 speed,
836 duplex);
837 hw->phy.ops.cfg_on_link_up(hw);
838 } else {
839 ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,
840 speed,
841 duplex);
844 return ret_val;
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)
855 u32 ctrl, icr;
856 s32 ret_val;
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);
865 if (ret_val)
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);
875 msec_delay(10);
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);
885 if (ret_val)
886 /* We don't want to continue accessing MAC registers. */
887 goto out;
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);
895 out:
896 return ret_val;
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;
908 u32 reg_data;
909 s32 ret_val;
910 u16 i;
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);
918 if (ret_val)
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,
976 &i);
977 if (!ret_val) {
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
987 * is no link.
989 e1000_clear_hw_cntrs_80003es2lan(hw);
991 return ret_val;
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)
1002 u32 reg;
1004 DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
1006 /* Transmit Descriptor Control 0 */
1007 reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1008 reg |= (1 << 22);
1009 E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1011 /* Transmit Descriptor Control 1 */
1012 reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1013 reg |= (1 << 22);
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)
1020 reg &= ~(1 << 20);
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)
1026 reg &= ~(1 << 28);
1027 else
1028 reg |= (1 << 28);
1029 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1031 return;
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;
1043 s32 ret_val;
1044 u32 ctrl_ext;
1045 u16 data;
1047 DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1049 if (phy->reset_disable)
1050 goto skip_reset;
1052 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1053 &data);
1054 if (ret_val)
1055 goto out;
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,
1062 data);
1063 if (ret_val)
1064 goto out;
1067 * Options:
1068 * MDI/MDI-X = 0 (default)
1069 * 0 - Auto for all speeds
1070 * 1 - MDI mode
1071 * 2 - MDI-X mode
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);
1075 if (ret_val)
1076 goto out;
1078 data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1080 switch (phy->mdix) {
1081 case 1:
1082 data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1083 break;
1084 case 2:
1085 data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1086 break;
1087 case 0:
1088 default:
1089 data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1090 break;
1094 * Options:
1095 * disable_polarity_correction = 0 (default)
1096 * Automatic Correction for Reversed Cable Polarity
1097 * 0 - Disabled
1098 * 1 - Enabled
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);
1105 if (ret_val)
1106 goto out;
1108 /* SW Reset the PHY so all changes take effect */
1109 ret_val = hw->phy.ops.commit(hw);
1110 if (ret_val) {
1111 DEBUGOUT("Error Resetting the PHY\n");
1112 goto out;
1115 skip_reset:
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);
1121 if (ret_val)
1122 goto out;
1124 ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1125 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1126 &data);
1127 if (ret_val)
1128 goto out;
1129 data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1130 ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1131 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1132 data);
1133 if (ret_val)
1134 goto out;
1136 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1137 if (ret_val)
1138 goto out;
1140 data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1141 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1142 if (ret_val)
1143 goto out;
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);
1150 if (ret_val)
1151 goto out;
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,
1162 data);
1163 if (ret_val)
1164 goto out;
1166 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1167 &data);
1168 if (ret_val)
1169 goto out;
1171 data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1172 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1173 data);
1174 if (ret_val)
1175 goto out;
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);
1183 if (ret_val)
1184 goto out;
1186 data |= GG82563_ICR_DIS_PADDING;
1187 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1188 if (ret_val)
1189 goto out;
1191 out:
1192 return ret_val;
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)
1204 u32 ctrl;
1205 s32 ret_val;
1206 u16 reg_data;
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),
1221 0xFFFF);
1222 if (ret_val)
1223 goto out;
1224 ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1225 &reg_data);
1226 if (ret_val)
1227 goto out;
1228 reg_data |= 0x3F;
1229 ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1230 reg_data);
1231 if (ret_val)
1232 goto out;
1233 ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1234 E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1235 &reg_data);
1236 if (ret_val)
1237 goto out;
1238 reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
1239 ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1240 E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1241 reg_data);
1242 if (ret_val)
1243 goto out;
1245 ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1246 if (ret_val)
1247 goto out;
1249 ret_val = e1000_setup_copper_link_generic(hw);
1251 out:
1252 return ret_val;
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
1261 * 10/100 operation.
1263 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1265 s32 ret_val = E1000_SUCCESS;
1266 u16 speed;
1267 u16 duplex;
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,
1273 &speed,
1274 &duplex);
1275 if (ret_val)
1276 goto out;
1278 if (speed == SPEED_1000)
1279 ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1280 else
1281 ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1284 out:
1285 return ret_val;
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
1294 * 10/100 operation.
1296 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1298 s32 ret_val = E1000_SUCCESS;
1299 u32 tipg;
1300 u32 i = 0;
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,
1308 reg_data);
1309 if (ret_val)
1310 goto out;
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);
1318 do {
1319 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1320 &reg_data);
1321 if (ret_val)
1322 goto out;
1324 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1325 &reg_data2);
1326 if (ret_val)
1327 goto out;
1328 i++;
1329 } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1331 if (duplex == HALF_DUPLEX)
1332 reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1333 else
1334 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1336 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1338 out:
1339 return ret_val;
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;
1353 u32 tipg;
1354 u32 i = 0;
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,
1361 reg_data);
1362 if (ret_val)
1363 goto out;
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);
1371 do {
1372 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1373 &reg_data);
1374 if (ret_val)
1375 goto out;
1377 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1378 &reg_data2);
1379 if (ret_val)
1380 goto out;
1381 i++;
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);
1387 out:
1388 return ret_val;
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,
1402 u16 *data)
1404 u32 kmrnctrlsta;
1405 s32 ret_val = E1000_SUCCESS;
1407 DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1409 ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1410 if (ret_val)
1411 goto out;
1413 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1414 E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1415 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1417 usec_delay(2);
1419 kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1420 *data = (u16)kmrnctrlsta;
1422 e1000_release_mac_csr_80003es2lan(hw);
1424 out:
1425 return ret_val;
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
1436 * before exiting.
1438 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1439 u16 data)
1441 u32 kmrnctrlsta;
1442 s32 ret_val = E1000_SUCCESS;
1444 DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1446 ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1447 if (ret_val)
1448 goto out;
1450 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1451 E1000_KMRNCTRLSTA_OFFSET) | data;
1452 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1454 usec_delay(2);
1456 e1000_release_mac_csr_80003es2lan(hw);
1458 out:
1459 return ret_val;
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
1475 * address.
1477 ret_val = e1000_check_alt_mac_addr_generic(hw);
1478 if (ret_val)
1479 goto out;
1481 ret_val = e1000_read_mac_addr_generic(hw);
1483 out:
1484 return ret_val;
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);
1501 return;
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);