]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/e1000/e1000_80003es2lan.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / e1000 / e1000_80003es2lan.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2011, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD$*/
34
35 /*
36  * 80003ES2LAN Gigabit Ethernet Controller (Copper)
37  * 80003ES2LAN Gigabit Ethernet Controller (Serdes)
38  */
39
40 #include "e1000_api.h"
41
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);
79
80 /*
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".
84  */
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]))
90
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)
96 {
97         struct e1000_phy_info *phy = &hw->phy;
98         s32 ret_val = E1000_SUCCESS;
99
100         DEBUGFUNC("e1000_init_phy_params_80003es2lan");
101
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;
108         }
109
110         phy->addr               = 1;
111         phy->autoneg_mask       = AUTONEG_ADVERTISE_SPEED_DEFAULT;
112         phy->reset_delay_us     = 100;
113         phy->type               = e1000_phy_gg82563;
114
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;
124
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;
129
130         phy->ops.cfg_on_link_up = e1000_cfg_on_link_up_80003es2lan;
131
132         /* This can only be done after all function pointers are setup. */
133         ret_val = e1000_get_phy_id(hw);
134
135         /* Verify phy id */
136         if (phy->id != GG82563_E_PHY_ID) {
137                 ret_val = -E1000_ERR_PHY;
138                 goto out;
139         }
140
141 out:
142         return ret_val;
143 }
144
145 /**
146  *  e1000_init_nvm_params_80003es2lan - Init ESB2 NVM func ptrs.
147  *  @hw: pointer to the HW structure
148  **/
149 static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
150 {
151         struct e1000_nvm_info *nvm = &hw->nvm;
152         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
153         u16 size;
154
155         DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
156
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;
172         }
173
174         nvm->type = e1000_nvm_eeprom_spi;
175
176         size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
177                      E1000_EECD_SIZE_EX_SHIFT);
178
179         /*
180          * Added to a constant, "size" becomes the left-shift value
181          * for setting word_size.
182          */
183         size += NVM_WORD_SIZE_BASE_SHIFT;
184
185         /* EEPROM access above 16k is unsupported */
186         if (size > 14)
187                 size = 14;
188         nvm->word_size = 1 << size;
189
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;
198
199         return E1000_SUCCESS;
200 }
201
202 /**
203  *  e1000_init_mac_params_80003es2lan - Init ESB2 MAC func ptrs.
204  *  @hw: pointer to the HW structure
205  **/
206 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
207 {
208         struct e1000_mac_info *mac = &hw->mac;
209
210         DEBUGFUNC("e1000_init_mac_params_80003es2lan");
211
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;
226         }
227
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         /* FWSM register */
235         mac->has_fwsm = TRUE;
236         /* ARC supported; valid only if manageability features are enabled. */
237         mac->arc_subsystem_valid = (E1000_READ_REG(hw, E1000_FWSM) &
238                                     E1000_FWSM_MODE_MASK) ? TRUE : FALSE;
239         /* Adaptive IFS not supported */
240         mac->adaptive_ifs = FALSE;
241
242         /* Function pointers */
243
244         /* bus type/speed/width */
245         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
246         /* reset */
247         mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
248         /* hw initialization */
249         mac->ops.init_hw = e1000_init_hw_80003es2lan;
250         /* link setup */
251         mac->ops.setup_link = e1000_setup_link_generic;
252         /* check management mode */
253         mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
254         /* multicast address update */
255         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
256         /* writing VFTA */
257         mac->ops.write_vfta = e1000_write_vfta_generic;
258         /* clearing VFTA */
259         mac->ops.clear_vfta = e1000_clear_vfta_generic;
260         /* read mac address */
261         mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
262         /* ID LED init */
263         mac->ops.id_led_init = e1000_id_led_init_generic;
264         /* blink LED */
265         mac->ops.blink_led = e1000_blink_led_generic;
266         /* setup LED */
267         mac->ops.setup_led = e1000_setup_led_generic;
268         /* cleanup LED */
269         mac->ops.cleanup_led = e1000_cleanup_led_generic;
270         /* turn on/off LED */
271         mac->ops.led_on = e1000_led_on_generic;
272         mac->ops.led_off = e1000_led_off_generic;
273         /* clear hardware counters */
274         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_80003es2lan;
275         /* link info */
276         mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
277
278         /* set lan id for port to determine which phy lock to use */
279         hw->mac.ops.set_lan_id(hw);
280
281         return E1000_SUCCESS;
282 }
283
284 /**
285  *  e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
286  *  @hw: pointer to the HW structure
287  *
288  *  Called to initialize all function pointers and parameters.
289  **/
290 void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
291 {
292         DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
293
294         hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
295         hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
296         hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
297 }
298
299 /**
300  *  e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
301  *  @hw: pointer to the HW structure
302  *
303  *  A wrapper to acquire access rights to the correct PHY.
304  **/
305 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw)
306 {
307         u16 mask;
308
309         DEBUGFUNC("e1000_acquire_phy_80003es2lan");
310
311         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
312         return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
313 }
314
315 /**
316  *  e1000_release_phy_80003es2lan - Release rights to access PHY
317  *  @hw: pointer to the HW structure
318  *
319  *  A wrapper to release access rights to the correct PHY.
320  **/
321 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
322 {
323         u16 mask;
324
325         DEBUGFUNC("e1000_release_phy_80003es2lan");
326
327         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
328         e1000_release_swfw_sync_80003es2lan(hw, mask);
329 }
330
331 /**
332  *  e1000_acquire_mac_csr_80003es2lan - Acquire right to access Kumeran register
333  *  @hw: pointer to the HW structure
334  *
335  *  Acquire the semaphore to access the Kumeran interface.
336  *
337  **/
338 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw)
339 {
340         u16 mask;
341
342         DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
343
344         mask = E1000_SWFW_CSR_SM;
345
346         return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
347 }
348
349 /**
350  *  e1000_release_mac_csr_80003es2lan - Release right to access Kumeran Register
351  *  @hw: pointer to the HW structure
352  *
353  *  Release the semaphore used to access the Kumeran interface
354  **/
355 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw)
356 {
357         u16 mask;
358
359         DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
360
361         mask = E1000_SWFW_CSR_SM;
362
363         e1000_release_swfw_sync_80003es2lan(hw, mask);
364 }
365
366 /**
367  *  e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
368  *  @hw: pointer to the HW structure
369  *
370  *  Acquire the semaphore to access the EEPROM.
371  **/
372 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw)
373 {
374         s32 ret_val;
375
376         DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
377
378         ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
379         if (ret_val)
380                 goto out;
381
382         ret_val = e1000_acquire_nvm_generic(hw);
383
384         if (ret_val)
385                 e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
386
387 out:
388         return ret_val;
389 }
390
391 /**
392  *  e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
393  *  @hw: pointer to the HW structure
394  *
395  *  Release the semaphore used to access the EEPROM.
396  **/
397 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw)
398 {
399         DEBUGFUNC("e1000_release_nvm_80003es2lan");
400
401         e1000_release_nvm_generic(hw);
402         e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
403 }
404
405 /**
406  *  e1000_acquire_swfw_sync_80003es2lan - Acquire SW/FW semaphore
407  *  @hw: pointer to the HW structure
408  *  @mask: specifies which semaphore to acquire
409  *
410  *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
411  *  will also specify which port we're acquiring the lock for.
412  **/
413 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
414 {
415         u32 swfw_sync;
416         u32 swmask = mask;
417         u32 fwmask = mask << 16;
418         s32 ret_val = E1000_SUCCESS;
419         s32 i = 0, timeout = 50;
420
421         DEBUGFUNC("e1000_acquire_swfw_sync_80003es2lan");
422
423         while (i < timeout) {
424                 if (e1000_get_hw_semaphore_generic(hw)) {
425                         ret_val = -E1000_ERR_SWFW_SYNC;
426                         goto out;
427                 }
428
429                 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
430                 if (!(swfw_sync & (fwmask | swmask)))
431                         break;
432
433                 /*
434                  * Firmware currently using resource (fwmask)
435                  * or other software thread using resource (swmask)
436                  */
437                 e1000_put_hw_semaphore_generic(hw);
438                 msec_delay_irq(5);
439                 i++;
440         }
441
442         if (i == timeout) {
443                 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
444                 ret_val = -E1000_ERR_SWFW_SYNC;
445                 goto out;
446         }
447
448         swfw_sync |= swmask;
449         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
450
451         e1000_put_hw_semaphore_generic(hw);
452
453 out:
454         return ret_val;
455 }
456
457 /**
458  *  e1000_release_swfw_sync_80003es2lan - Release SW/FW semaphore
459  *  @hw: pointer to the HW structure
460  *  @mask: specifies which semaphore to acquire
461  *
462  *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
463  *  will also specify which port we're releasing the lock for.
464  **/
465 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
466 {
467         u32 swfw_sync;
468
469         DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
470
471         while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
472                 ; /* Empty */
473
474         swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
475         swfw_sync &= ~mask;
476         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
477
478         e1000_put_hw_semaphore_generic(hw);
479 }
480
481 /**
482  *  e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
483  *  @hw: pointer to the HW structure
484  *  @offset: offset of the register to read
485  *  @data: pointer to the data returned from the operation
486  *
487  *  Read the GG82563 PHY register.
488  **/
489 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
490                                                   u32 offset, u16 *data)
491 {
492         s32 ret_val;
493         u32 page_select;
494         u16 temp;
495
496         DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
497
498         ret_val = e1000_acquire_phy_80003es2lan(hw);
499         if (ret_val)
500                 goto out;
501
502         /* Select Configuration Page */
503         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
504                 page_select = GG82563_PHY_PAGE_SELECT;
505         } else {
506                 /*
507                  * Use Alternative Page Select register to access
508                  * registers 30 and 31
509                  */
510                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
511         }
512
513         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
514         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
515         if (ret_val) {
516                 e1000_release_phy_80003es2lan(hw);
517                 goto out;
518         }
519
520         if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
521                 /*
522                  * The "ready" bit in the MDIC register may be incorrectly set
523                  * before the device has completed the "Page Select" MDI
524                  * transaction.  So we wait 200us after each MDI command...
525                  */
526                 usec_delay(200);
527
528                 /* ...and verify the command was successful. */
529                 ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
530
531                 if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
532                         ret_val = -E1000_ERR_PHY;
533                         e1000_release_phy_80003es2lan(hw);
534                         goto out;
535                 }
536
537                 usec_delay(200);
538
539                 ret_val = e1000_read_phy_reg_mdic(hw,
540                                                   MAX_PHY_REG_ADDRESS & offset,
541                                                   data);
542
543                 usec_delay(200);
544         } else {
545                 ret_val = e1000_read_phy_reg_mdic(hw,
546                                                   MAX_PHY_REG_ADDRESS & offset,
547                                                   data);
548         }
549
550         e1000_release_phy_80003es2lan(hw);
551
552 out:
553         return ret_val;
554 }
555
556 /**
557  *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
558  *  @hw: pointer to the HW structure
559  *  @offset: offset of the register to read
560  *  @data: value to write to the register
561  *
562  *  Write to the GG82563 PHY register.
563  **/
564 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
565                                                    u32 offset, u16 data)
566 {
567         s32 ret_val;
568         u32 page_select;
569         u16 temp;
570
571         DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
572
573         ret_val = e1000_acquire_phy_80003es2lan(hw);
574         if (ret_val)
575                 goto out;
576
577         /* Select Configuration Page */
578         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
579                 page_select = GG82563_PHY_PAGE_SELECT;
580         } else {
581                 /*
582                  * Use Alternative Page Select register to access
583                  * registers 30 and 31
584                  */
585                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
586         }
587
588         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
589         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
590         if (ret_val) {
591                 e1000_release_phy_80003es2lan(hw);
592                 goto out;
593         }
594
595         if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
596                 /*
597                  * The "ready" bit in the MDIC register may be incorrectly set
598                  * before the device has completed the "Page Select" MDI
599                  * transaction.  So we wait 200us after each MDI command...
600                  */
601                 usec_delay(200);
602
603                 /* ...and verify the command was successful. */
604                 ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
605
606                 if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
607                         ret_val = -E1000_ERR_PHY;
608                         e1000_release_phy_80003es2lan(hw);
609                         goto out;
610                 }
611
612                 usec_delay(200);
613
614                 ret_val = e1000_write_phy_reg_mdic(hw,
615                                                   MAX_PHY_REG_ADDRESS & offset,
616                                                   data);
617
618                 usec_delay(200);
619         } else {
620                 ret_val = e1000_write_phy_reg_mdic(hw,
621                                                   MAX_PHY_REG_ADDRESS & offset,
622                                                   data);
623         }
624
625         e1000_release_phy_80003es2lan(hw);
626
627 out:
628         return ret_val;
629 }
630
631 /**
632  *  e1000_write_nvm_80003es2lan - Write to ESB2 NVM
633  *  @hw: pointer to the HW structure
634  *  @offset: offset of the register to read
635  *  @words: number of words to write
636  *  @data: buffer of data to write to the NVM
637  *
638  *  Write "words" of data to the ESB2 NVM.
639  **/
640 static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
641                                        u16 words, u16 *data)
642 {
643         DEBUGFUNC("e1000_write_nvm_80003es2lan");
644
645         return e1000_write_nvm_spi(hw, offset, words, data);
646 }
647
648 /**
649  *  e1000_get_cfg_done_80003es2lan - Wait for configuration to complete
650  *  @hw: pointer to the HW structure
651  *
652  *  Wait a specific amount of time for manageability processes to complete.
653  *  This is a function pointer entry point called by the phy module.
654  **/
655 static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw)
656 {
657         s32 timeout = PHY_CFG_TIMEOUT;
658         s32 ret_val = E1000_SUCCESS;
659         u32 mask = E1000_NVM_CFG_DONE_PORT_0;
660
661         DEBUGFUNC("e1000_get_cfg_done_80003es2lan");
662
663         if (hw->bus.func == 1)
664                 mask = E1000_NVM_CFG_DONE_PORT_1;
665
666         while (timeout) {
667                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
668                         break;
669                 msec_delay(1);
670                 timeout--;
671         }
672         if (!timeout) {
673                 DEBUGOUT("MNG configuration cycle has not completed.\n");
674                 ret_val = -E1000_ERR_RESET;
675                 goto out;
676         }
677
678 out:
679         return ret_val;
680 }
681
682 /**
683  *  e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex
684  *  @hw: pointer to the HW structure
685  *
686  *  Force the speed and duplex settings onto the PHY.  This is a
687  *  function pointer entry point called by the phy module.
688  **/
689 static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw)
690 {
691         s32 ret_val = E1000_SUCCESS;
692         u16 phy_data;
693         bool link;
694
695         DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
696
697         if (!(hw->phy.ops.read_reg))
698                 goto out;
699
700         /*
701          * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
702          * forced whenever speed and duplex are forced.
703          */
704         ret_val = hw->phy.ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
705         if (ret_val)
706                 goto out;
707
708         phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;
709         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
710         if (ret_val)
711                 goto out;
712
713         DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);
714
715         ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);
716         if (ret_val)
717                 goto out;
718
719         e1000_phy_force_speed_duplex_setup(hw, &phy_data);
720
721         /* Reset the phy to commit changes. */
722         phy_data |= MII_CR_RESET;
723
724         ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_data);
725         if (ret_val)
726                 goto out;
727
728         usec_delay(1);
729
730         if (hw->phy.autoneg_wait_to_complete) {
731                 DEBUGOUT("Waiting for forced speed/duplex link on GG82563 phy.\n");
732
733                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
734                                                      100000, &link);
735                 if (ret_val)
736                         goto out;
737
738                 if (!link) {
739                         /*
740                          * We didn't get link.
741                          * Reset the DSP and cross our fingers.
742                          */
743                         ret_val = e1000_phy_reset_dsp_generic(hw);
744                         if (ret_val)
745                                 goto out;
746                 }
747
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;
753         }
754
755         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
756                                        &phy_data);
757         if (ret_val)
758                 goto out;
759
760         /*
761          * Resetting the phy means we need to verify the TX_CLK corresponds
762          * to the link speed.  10Mbps -> 2.5MHz, else 25MHz.
763          */
764         phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
765         if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED)
766                 phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5;
767         else
768                 phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;
769
770         /*
771          * In addition, we must re-enable CRS on Tx for both half and full
772          * duplex.
773          */
774         phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
775         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
776                                         phy_data);
777
778 out:
779         return ret_val;
780 }
781
782 /**
783  *  e1000_get_cable_length_80003es2lan - Set approximate cable length
784  *  @hw: pointer to the HW structure
785  *
786  *  Find the approximate cable length as measured by the GG82563 PHY.
787  *  This is a function pointer entry point called by the phy module.
788  **/
789 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
790 {
791         struct e1000_phy_info *phy = &hw->phy;
792         s32 ret_val = E1000_SUCCESS;
793         u16 phy_data, index;
794
795         DEBUGFUNC("e1000_get_cable_length_80003es2lan");
796
797         if (!(hw->phy.ops.read_reg))
798                 goto out;
799
800         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
801         if (ret_val)
802                 goto out;
803
804         index = phy_data & GG82563_DSPD_CABLE_LENGTH;
805
806         if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
807                 ret_val = -E1000_ERR_PHY;
808                 goto out;
809         }
810
811         phy->min_cable_length = e1000_gg82563_cable_length_table[index];
812         phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
813
814         phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
815
816 out:
817         return ret_val;
818 }
819
820 /**
821  *  e1000_get_link_up_info_80003es2lan - Report speed and duplex
822  *  @hw: pointer to the HW structure
823  *  @speed: pointer to speed buffer
824  *  @duplex: pointer to duplex buffer
825  *
826  *  Retrieve the current speed and duplex configuration.
827  **/
828 static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
829                                               u16 *duplex)
830 {
831         s32 ret_val;
832
833         DEBUGFUNC("e1000_get_link_up_info_80003es2lan");
834
835         if (hw->phy.media_type == e1000_media_type_copper) {
836                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
837                                                                     duplex);
838                 hw->phy.ops.cfg_on_link_up(hw);
839         } else {
840                 ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,
841                                                                   speed,
842                                                                   duplex);
843         }
844
845         return ret_val;
846 }
847
848 /**
849  *  e1000_reset_hw_80003es2lan - Reset the ESB2 controller
850  *  @hw: pointer to the HW structure
851  *
852  *  Perform a global reset to the ESB2 controller.
853  **/
854 static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
855 {
856         u32 ctrl;
857         s32 ret_val;
858
859         DEBUGFUNC("e1000_reset_hw_80003es2lan");
860
861         /*
862          * Prevent the PCI-E bus from sticking if there is no TLP connection
863          * on the last TLP read/write transaction when MAC is reset.
864          */
865         ret_val = e1000_disable_pcie_master_generic(hw);
866         if (ret_val)
867                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
868
869         DEBUGOUT("Masking off all interrupts\n");
870         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
871
872         E1000_WRITE_REG(hw, E1000_RCTL, 0);
873         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
874         E1000_WRITE_FLUSH(hw);
875
876         msec_delay(10);
877
878         ctrl = E1000_READ_REG(hw, E1000_CTRL);
879
880         ret_val = e1000_acquire_phy_80003es2lan(hw);
881         DEBUGOUT("Issuing a global reset to MAC\n");
882         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
883         e1000_release_phy_80003es2lan(hw);
884
885         ret_val = e1000_get_auto_rd_done_generic(hw);
886         if (ret_val)
887                 /* We don't want to continue accessing MAC registers. */
888                 goto out;
889
890         /* Clear any pending interrupt events. */
891         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
892         E1000_READ_REG(hw, E1000_ICR);
893
894         ret_val = e1000_check_alt_mac_addr_generic(hw);
895
896 out:
897         return ret_val;
898 }
899
900 /**
901  *  e1000_init_hw_80003es2lan - Initialize the ESB2 controller
902  *  @hw: pointer to the HW structure
903  *
904  *  Initialize the hw bits, LED, VFTA, MTA, link and hw counters.
905  **/
906 static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
907 {
908         struct e1000_mac_info *mac = &hw->mac;
909         u32 reg_data;
910         s32 ret_val;
911         u16 kum_reg_data;
912         u16 i;
913
914         DEBUGFUNC("e1000_init_hw_80003es2lan");
915
916         e1000_initialize_hw_bits_80003es2lan(hw);
917
918         /* Initialize identification LED */
919         ret_val = mac->ops.id_led_init(hw);
920         if (ret_val)
921                 DEBUGOUT("Error initializing identification LED\n");
922                 /* This is not fatal and we should not stop init due to this */
923
924         /* Disabling VLAN filtering */
925         DEBUGOUT("Initializing the IEEE VLAN\n");
926         mac->ops.clear_vfta(hw);
927
928         /* Setup the receive address. */
929         e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
930
931         /* Zero out the Multicast HASH table */
932         DEBUGOUT("Zeroing the MTA\n");
933         for (i = 0; i < mac->mta_reg_count; i++)
934                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
935
936         /* Setup link and flow control */
937         ret_val = mac->ops.setup_link(hw);
938
939         /* Disable IBIST slave mode (far-end loopback) */
940         e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
941                                         &kum_reg_data);
942         kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE;
943         e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
944                                          kum_reg_data);
945
946         /* Set the transmit descriptor write-back policy */
947         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
948         reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
949                    E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
950         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
951
952         /* ...for both queues. */
953         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
954         reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
955                    E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
956         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
957
958         /* Enable retransmit on late collisions */
959         reg_data = E1000_READ_REG(hw, E1000_TCTL);
960         reg_data |= E1000_TCTL_RTLC;
961         E1000_WRITE_REG(hw, E1000_TCTL, reg_data);
962
963         /* Configure Gigabit Carry Extend Padding */
964         reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);
965         reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
966         reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;
967         E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);
968
969         /* Configure Transmit Inter-Packet Gap */
970         reg_data = E1000_READ_REG(hw, E1000_TIPG);
971         reg_data &= ~E1000_TIPG_IPGT_MASK;
972         reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
973         E1000_WRITE_REG(hw, E1000_TIPG, reg_data);
974
975         reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);
976         reg_data &= ~0x00100000;
977         E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
978
979         /* default to TRUE to enable the MDIC W/A */
980         hw->dev_spec._80003es2lan.mdic_wa_enable = TRUE;
981
982         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
983                                                  E1000_KMRNCTRLSTA_OFFSET >>
984                                                  E1000_KMRNCTRLSTA_OFFSET_SHIFT,
985                                                  &i);
986         if (!ret_val) {
987                 if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
988                      E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
989                         hw->dev_spec._80003es2lan.mdic_wa_enable = FALSE;
990         }
991
992         /*
993          * Clear all of the statistics registers (clear on read).  It is
994          * important that we do this after we have tried to establish link
995          * because the symbol error count will increment wildly if there
996          * is no link.
997          */
998         e1000_clear_hw_cntrs_80003es2lan(hw);
999
1000         return ret_val;
1001 }
1002
1003 /**
1004  *  e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
1005  *  @hw: pointer to the HW structure
1006  *
1007  *  Initializes required hardware-dependent bits needed for normal operation.
1008  **/
1009 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw)
1010 {
1011         u32 reg;
1012
1013         DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
1014
1015         /* Transmit Descriptor Control 0 */
1016         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1017         reg |= (1 << 22);
1018         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1019
1020         /* Transmit Descriptor Control 1 */
1021         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1022         reg |= (1 << 22);
1023         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1024
1025         /* Transmit Arbitration Control 0 */
1026         reg = E1000_READ_REG(hw, E1000_TARC(0));
1027         reg &= ~(0xF << 27); /* 30:27 */
1028         if (hw->phy.media_type != e1000_media_type_copper)
1029                 reg &= ~(1 << 20);
1030         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1031
1032         /* Transmit Arbitration Control 1 */
1033         reg = E1000_READ_REG(hw, E1000_TARC(1));
1034         if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1035                 reg &= ~(1 << 28);
1036         else
1037                 reg |= (1 << 28);
1038         E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1039
1040         return;
1041 }
1042
1043 /**
1044  *  e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
1045  *  @hw: pointer to the HW structure
1046  *
1047  *  Setup some GG82563 PHY registers for obtaining link
1048  **/
1049 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw)
1050 {
1051         struct e1000_phy_info *phy = &hw->phy;
1052         s32 ret_val;
1053         u32 ctrl_ext;
1054         u16 data;
1055
1056         DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1057
1058         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &data);
1059         if (ret_val)
1060                 goto out;
1061
1062         data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1063         /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
1064         data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
1065
1066         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, data);
1067         if (ret_val)
1068                 goto out;
1069
1070         /*
1071          * Options:
1072          *   MDI/MDI-X = 0 (default)
1073          *   0 - Auto for all speeds
1074          *   1 - MDI mode
1075          *   2 - MDI-X mode
1076          *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1077          */
1078         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
1079         if (ret_val)
1080                 goto out;
1081
1082         data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1083
1084         switch (phy->mdix) {
1085         case 1:
1086                 data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1087                 break;
1088         case 2:
1089                 data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1090                 break;
1091         case 0:
1092         default:
1093                 data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1094                 break;
1095         }
1096
1097         /*
1098          * Options:
1099          *   disable_polarity_correction = 0 (default)
1100          *       Automatic Correction for Reversed Cable Polarity
1101          *   0 - Disabled
1102          *   1 - Enabled
1103          */
1104         data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1105         if (phy->disable_polarity_correction)
1106                 data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1107
1108         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
1109         if (ret_val)
1110                 goto out;
1111
1112         /* SW Reset the PHY so all changes take effect */
1113         ret_val = hw->phy.ops.commit(hw);
1114         if (ret_val) {
1115                 DEBUGOUT("Error Resetting the PHY\n");
1116                 goto out;
1117         }
1118
1119         /* Bypass Rx and Tx FIFO's */
1120         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1121                                         E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
1122                                         E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
1123                                         E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
1124         if (ret_val)
1125                 goto out;
1126
1127         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1128                                 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE, &data);
1129         if (ret_val)
1130                 goto out;
1131         data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1132         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1133                                 E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE, data);
1134         if (ret_val)
1135                 goto out;
1136
1137         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1138         if (ret_val)
1139                 goto out;
1140
1141         data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1142         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1143         if (ret_val)
1144                 goto out;
1145
1146         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1147         ctrl_ext &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1148         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1149
1150         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
1151         if (ret_val)
1152                 goto out;
1153
1154         /*
1155          * Do not init these registers when the HW is in IAMT mode, since the
1156          * firmware will have already initialized them.  We only initialize
1157          * them if the HW is not in IAMT mode.
1158          */
1159         if (!(hw->mac.ops.check_mng_mode(hw))) {
1160                 /* Enable Electrical Idle on the PHY */
1161                 data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1162                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1163                                                 data);
1164                 if (ret_val)
1165                         goto out;
1166
1167                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1168                                                &data);
1169                 if (ret_val)
1170                         goto out;
1171
1172                 data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1173                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1174                                                 data);
1175                 if (ret_val)
1176                         goto out;
1177         }
1178
1179         /*
1180          * Workaround: Disable padding in Kumeran interface in the MAC
1181          * and in the PHY to avoid CRC errors.
1182          */
1183         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
1184         if (ret_val)
1185                 goto out;
1186
1187         data |= GG82563_ICR_DIS_PADDING;
1188         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1189         if (ret_val)
1190                 goto out;
1191
1192 out:
1193         return ret_val;
1194 }
1195
1196 /**
1197  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1198  *  @hw: pointer to the HW structure
1199  *
1200  *  Essentially a wrapper for setting up all things "copper" related.
1201  *  This is a function pointer entry point called by the mac module.
1202  **/
1203 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
1204 {
1205         u32 ctrl;
1206         s32 ret_val;
1207         u16 reg_data;
1208
1209         DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1210
1211         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1212         ctrl |= E1000_CTRL_SLU;
1213         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1214         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1215
1216         /*
1217          * Set the mac to wait the maximum time between each
1218          * iteration and increase the max iterations when
1219          * polling the phy; this fixes erroneous timeouts at 10Mbps.
1220          */
1221         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
1222                                                    0xFFFF);
1223         if (ret_val)
1224                 goto out;
1225         ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1226                                                   &reg_data);
1227         if (ret_val)
1228                 goto out;
1229         reg_data |= 0x3F;
1230         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1231                                                    reg_data);
1232         if (ret_val)
1233                 goto out;
1234         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1235                                 E1000_KMRNCTRLSTA_OFFSET_INB_CTRL, &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, reg_data);
1241         if (ret_val)
1242                 goto out;
1243
1244         ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1245         if (ret_val)
1246                 goto out;
1247
1248         ret_val = e1000_setup_copper_link_generic(hw);
1249
1250 out:
1251         return ret_val;
1252 }
1253
1254 /**
1255  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1256  *  @hw: pointer to the HW structure
1257  *  @duplex: current duplex setting
1258  *
1259  *  Configure the KMRN interface by applying last minute quirks for
1260  *  10/100 operation.
1261  **/
1262 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1263 {
1264         s32 ret_val = E1000_SUCCESS;
1265         u16 speed;
1266         u16 duplex;
1267
1268         DEBUGFUNC("e1000_configure_on_link_up");
1269
1270         if (hw->phy.media_type == e1000_media_type_copper) {
1271                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, &speed,
1272                                                                     &duplex);
1273                 if (ret_val)
1274                         goto out;
1275
1276                 if (speed == SPEED_1000)
1277                         ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1278                 else
1279                         ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1280         }
1281
1282 out:
1283         return ret_val;
1284 }
1285
1286 /**
1287  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1288  *  @hw: pointer to the HW structure
1289  *  @duplex: current duplex setting
1290  *
1291  *  Configure the KMRN interface by applying last minute quirks for
1292  *  10/100 operation.
1293  **/
1294 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1295 {
1296         s32 ret_val = E1000_SUCCESS;
1297         u32 tipg;
1298         u32 i = 0;
1299         u16 reg_data, reg_data2;
1300
1301         DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1302
1303         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
1304         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1305                                        E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1306                                        reg_data);
1307         if (ret_val)
1308                 goto out;
1309
1310         /* Configure Transmit Inter-Packet Gap */
1311         tipg = E1000_READ_REG(hw, E1000_TIPG);
1312         tipg &= ~E1000_TIPG_IPGT_MASK;
1313         tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
1314         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1315
1316         do {
1317                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1318                                                &reg_data);
1319                 if (ret_val)
1320                         goto out;
1321
1322                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1323                                                &reg_data2);
1324                 if (ret_val)
1325                         goto out;
1326                 i++;
1327         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1328
1329         if (duplex == HALF_DUPLEX)
1330                 reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1331         else
1332                 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1333
1334         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1335                                         reg_data);
1336
1337 out:
1338         return ret_val;
1339 }
1340
1341 /**
1342  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1343  *  @hw: pointer to the HW structure
1344  *
1345  *  Configure the KMRN interface by applying last minute quirks for
1346  *  gigabit operation.
1347  **/
1348 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
1349 {
1350         s32 ret_val = E1000_SUCCESS;
1351         u16 reg_data, reg_data2;
1352         u32 tipg;
1353         u32 i = 0;
1354
1355         DEBUGFUNC("e1000_configure_kmrn_for_1000");
1356
1357         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
1358         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1359                                 E1000_KMRNCTRLSTA_OFFSET_HD_CTRL, reg_data);
1360         if (ret_val)
1361                 goto out;
1362
1363         /* Configure Transmit Inter-Packet Gap */
1364         tipg = E1000_READ_REG(hw, E1000_TIPG);
1365         tipg &= ~E1000_TIPG_IPGT_MASK;
1366         tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
1367         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1368
1369         do {
1370                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1371                                                &reg_data);
1372                 if (ret_val)
1373                         goto out;
1374
1375                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1376                                                &reg_data2);
1377                 if (ret_val)
1378                         goto out;
1379                 i++;
1380         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1381
1382         reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1383         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1384                                         reg_data);
1385
1386 out:
1387         return ret_val;
1388 }
1389
1390 /**
1391  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1392  *  @hw: pointer to the HW structure
1393  *  @offset: register offset to be read
1394  *  @data: pointer to the read data
1395  *
1396  *  Acquire semaphore, then read the PHY register at offset
1397  *  using the kumeran interface.  The information retrieved is stored in data.
1398  *  Release the semaphore before exiting.
1399  **/
1400 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1401                                            u16 *data)
1402 {
1403         u32 kmrnctrlsta;
1404         s32 ret_val = E1000_SUCCESS;
1405
1406         DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1407
1408         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1409         if (ret_val)
1410                 goto out;
1411
1412         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1413                        E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1414         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1415         E1000_WRITE_FLUSH(hw);
1416
1417         usec_delay(2);
1418
1419         kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1420         *data = (u16)kmrnctrlsta;
1421
1422         e1000_release_mac_csr_80003es2lan(hw);
1423
1424 out:
1425         return ret_val;
1426 }
1427
1428 /**
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
1433  *
1434  *  Acquire semaphore, then write the data to PHY register
1435  *  at the offset using the kumeran interface.  Release semaphore
1436  *  before exiting.
1437  **/
1438 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1439                                             u16 data)
1440 {
1441         u32 kmrnctrlsta;
1442         s32 ret_val = E1000_SUCCESS;
1443
1444         DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1445
1446         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1447         if (ret_val)
1448                 goto out;
1449
1450         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1451                        E1000_KMRNCTRLSTA_OFFSET) | data;
1452         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1453         E1000_WRITE_FLUSH(hw);
1454
1455         usec_delay(2);
1456
1457         e1000_release_mac_csr_80003es2lan(hw);
1458
1459 out:
1460         return ret_val;
1461 }
1462
1463 /**
1464  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
1465  *  @hw: pointer to the HW structure
1466  **/
1467 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
1468 {
1469         s32 ret_val = E1000_SUCCESS;
1470
1471         DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1472
1473         /*
1474          * If there's an alternate MAC address place it in RAR0
1475          * so that it will override the Si installed default perm
1476          * address.
1477          */
1478         ret_val = e1000_check_alt_mac_addr_generic(hw);
1479         if (ret_val)
1480                 goto out;
1481
1482         ret_val = e1000_read_mac_addr_generic(hw);
1483
1484 out:
1485         return ret_val;
1486 }
1487
1488 /**
1489  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1490  * @hw: pointer to the HW structure
1491  *
1492  * In the case of a PHY power down to save power, or to turn off link during a
1493  * driver unload, or wake on lan is not enabled, remove the link.
1494  **/
1495 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1496 {
1497         /* If the management interface is not enabled, then power down */
1498         if (!(hw->mac.ops.check_mng_mode(hw) ||
1499               hw->phy.ops.check_reset_block(hw)))
1500                 e1000_power_down_phy_copper(hw);
1501
1502         return;
1503 }
1504
1505 /**
1506  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1507  *  @hw: pointer to the HW structure
1508  *
1509  *  Clears the hardware counters by reading the counter registers.
1510  **/
1511 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
1512 {
1513         DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1514
1515         e1000_clear_hw_cntrs_base_generic(hw);
1516
1517         E1000_READ_REG(hw, E1000_PRC64);
1518         E1000_READ_REG(hw, E1000_PRC127);
1519         E1000_READ_REG(hw, E1000_PRC255);
1520         E1000_READ_REG(hw, E1000_PRC511);
1521         E1000_READ_REG(hw, E1000_PRC1023);
1522         E1000_READ_REG(hw, E1000_PRC1522);
1523         E1000_READ_REG(hw, E1000_PTC64);
1524         E1000_READ_REG(hw, E1000_PTC127);
1525         E1000_READ_REG(hw, E1000_PTC255);
1526         E1000_READ_REG(hw, E1000_PTC511);
1527         E1000_READ_REG(hw, E1000_PTC1023);
1528         E1000_READ_REG(hw, E1000_PTC1522);
1529
1530         E1000_READ_REG(hw, E1000_ALGNERRC);
1531         E1000_READ_REG(hw, E1000_RXERRC);
1532         E1000_READ_REG(hw, E1000_TNCRS);
1533         E1000_READ_REG(hw, E1000_CEXTERR);
1534         E1000_READ_REG(hw, E1000_TSCTC);
1535         E1000_READ_REG(hw, E1000_TSCTFC);
1536
1537         E1000_READ_REG(hw, E1000_MGTPRC);
1538         E1000_READ_REG(hw, E1000_MGTPDC);
1539         E1000_READ_REG(hw, E1000_MGTPTC);
1540
1541         E1000_READ_REG(hw, E1000_IAC);
1542         E1000_READ_REG(hw, E1000_ICRXOC);
1543
1544         E1000_READ_REG(hw, E1000_ICRXPTC);
1545         E1000_READ_REG(hw, E1000_ICRXATC);
1546         E1000_READ_REG(hw, E1000_ICTXPTC);
1547         E1000_READ_REG(hw, E1000_ICTXATC);
1548         E1000_READ_REG(hw, E1000_ICTXQEC);
1549         E1000_READ_REG(hw, E1000_ICTXQMTC);
1550         E1000_READ_REG(hw, E1000_ICRXDMTC);
1551 }