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