em(4): Sync with Intel's em-6.9.6(FreeBSD)
[dragonfly.git] / sys / dev / netif / ig_hal / e1000_80003es2lan.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2008, 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 s32  e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw);
47 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw);
48 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw);
49 static s32  e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw);
50 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw);
51 static s32  e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
52                                                    u32 offset,
53                                                    u16 *data);
54 static s32  e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
55                                                     u32 offset,
56                                                     u16 data);
57 static s32  e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
58                                         u16 words, u16 *data);
59 static s32  e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw);
60 static s32  e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw);
61 static s32  e1000_get_cable_length_80003es2lan(struct e1000_hw *hw);
62 static s32  e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
63                                                u16 *duplex);
64 static s32  e1000_reset_hw_80003es2lan(struct e1000_hw *hw);
65 static s32  e1000_init_hw_80003es2lan(struct e1000_hw *hw);
66 static s32  e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw);
67 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw);
68 static s32  e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
69 static s32  e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex);
70 static s32  e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw);
71 static s32  e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw);
72 static s32  e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
73                                             u16 *data);
74 static s32  e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
75                                              u16 data);
76 static s32  e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw);
77 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw);
78 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
79 static s32  e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw);
80 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw);
81
82 /*
83  * A table for the GG82563 cable length where the range is defined
84  * with a lower bound at "index" and the upper bound at
85  * "index + 5".
86  */
87 static const u16 e1000_gg82563_cable_length_table[] =
88          { 0, 60, 115, 150, 150, 60, 115, 150, 180, 180, 0xFF };
89 #define GG82563_CABLE_LENGTH_TABLE_SIZE \
90                 (sizeof(e1000_gg82563_cable_length_table) / \
91                  sizeof(e1000_gg82563_cable_length_table[0]))
92
93 /**
94  *  e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
95  *  @hw: pointer to the HW structure
96  **/
97 static s32 e1000_init_phy_params_80003es2lan(struct e1000_hw *hw)
98 {
99         struct e1000_phy_info *phy = &hw->phy;
100         s32 ret_val = E1000_SUCCESS;
101
102         DEBUGFUNC("e1000_init_phy_params_80003es2lan");
103
104         if (hw->phy.media_type != e1000_media_type_copper) {
105                 phy->type        = e1000_phy_none;
106                 goto out;
107         } else {
108                 phy->ops.power_up = e1000_power_up_phy_copper;
109                 phy->ops.power_down = e1000_power_down_phy_copper_80003es2lan;
110         }
111
112         phy->addr                = 1;
113         phy->autoneg_mask        = AUTONEG_ADVERTISE_SPEED_DEFAULT;
114         phy->reset_delay_us      = 100;
115         phy->type                = e1000_phy_gg82563;
116
117         phy->ops.acquire            = e1000_acquire_phy_80003es2lan;
118         phy->ops.check_polarity     = e1000_check_polarity_m88;
119         phy->ops.check_reset_block  = e1000_check_reset_block_generic;
120         phy->ops.commit             = e1000_phy_sw_reset_generic;
121         phy->ops.get_cfg_done       = e1000_get_cfg_done_80003es2lan;
122         phy->ops.get_info           = e1000_get_phy_info_m88;
123         phy->ops.release            = e1000_release_phy_80003es2lan;
124         phy->ops.reset              = e1000_phy_hw_reset_generic;
125         phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_generic;
126
127         phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_80003es2lan;
128         phy->ops.get_cable_length   = e1000_get_cable_length_80003es2lan;
129         phy->ops.read_reg           = e1000_read_phy_reg_gg82563_80003es2lan;
130         phy->ops.write_reg          = e1000_write_phy_reg_gg82563_80003es2lan;
131
132         phy->ops.cfg_on_link_up    = e1000_cfg_on_link_up_80003es2lan;
133
134         /* This can only be done after all function pointers are setup. */
135         ret_val = e1000_get_phy_id(hw);
136
137         /* Verify phy id */
138         if (phy->id != GG82563_E_PHY_ID) {
139                 ret_val = -E1000_ERR_PHY;
140                 goto out;
141         }
142
143 out:
144         return ret_val;
145 }
146
147 /**
148  *  e1000_init_nvm_params_80003es2lan - Init ESB2 NVM func ptrs.
149  *  @hw: pointer to the HW structure
150  **/
151 static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
152 {
153         struct e1000_nvm_info *nvm = &hw->nvm;
154         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
155         u16 size;
156
157         DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
158
159         nvm->opcode_bits        = 8;
160         nvm->delay_usec         = 1;
161         switch (nvm->override) {
162         case e1000_nvm_override_spi_large:
163                 nvm->page_size    = 32;
164                 nvm->address_bits = 16;
165                 break;
166         case e1000_nvm_override_spi_small:
167                 nvm->page_size    = 8;
168                 nvm->address_bits = 8;
169                 break;
170         default:
171                 nvm->page_size    = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
172                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
173                 break;
174         }
175
176         nvm->type               = e1000_nvm_eeprom_spi;
177
178         size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
179                           E1000_EECD_SIZE_EX_SHIFT);
180
181         /*
182          * Added to a constant, "size" becomes the left-shift value
183          * for setting word_size.
184          */
185         size += NVM_WORD_SIZE_BASE_SHIFT;
186
187         /* EEPROM access above 16k is unsupported */
188         if (size > 14)
189                 size = 14;
190         nvm->word_size  = 1 << size;
191
192         /* Function Pointers */
193         nvm->ops.acquire           = e1000_acquire_nvm_80003es2lan;
194         nvm->ops.read              = e1000_read_nvm_eerd;
195         nvm->ops.release           = e1000_release_nvm_80003es2lan;
196         nvm->ops.update            = e1000_update_nvm_checksum_generic;
197         nvm->ops.valid_led_default = e1000_valid_led_default_generic;
198         nvm->ops.validate          = e1000_validate_nvm_checksum_generic;
199         nvm->ops.write             = e1000_write_nvm_80003es2lan;
200
201         return E1000_SUCCESS;
202 }
203
204 /**
205  *  e1000_init_mac_params_80003es2lan - Init ESB2 MAC func ptrs.
206  *  @hw: pointer to the HW structure
207  **/
208 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
209 {
210         struct e1000_mac_info *mac = &hw->mac;
211         s32 ret_val = E1000_SUCCESS;
212
213         DEBUGFUNC("e1000_init_mac_params_80003es2lan");
214
215         /* Set media type */
216         switch (hw->device_id) {
217         case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
218                 hw->phy.media_type = e1000_media_type_internal_serdes;
219                 break;
220         default:
221                 hw->phy.media_type = e1000_media_type_copper;
222                 break;
223         }
224
225         /* Set mta register count */
226         mac->mta_reg_count = 128;
227         /* Set rar entry count */
228         mac->rar_entry_count = E1000_RAR_ENTRIES;
229         /* Set if part includes ASF firmware */
230         mac->asf_firmware_present = TRUE;
231         /* Set if manageability features are enabled. */
232         mac->arc_subsystem_valid =
233                 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
234                         ? TRUE : FALSE;
235
236         /* Function pointers */
237
238         /* bus type/speed/width */
239         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
240         /* reset */
241         mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
242         /* hw initialization */
243         mac->ops.init_hw = e1000_init_hw_80003es2lan;
244         /* link setup */
245         mac->ops.setup_link = e1000_setup_link_generic;
246         /* physical interface link setup */
247         mac->ops.setup_physical_interface =
248                 (hw->phy.media_type == e1000_media_type_copper)
249                         ? e1000_setup_copper_link_80003es2lan
250                         : e1000_setup_fiber_serdes_link_generic;
251         /* check for link */
252         switch (hw->phy.media_type) {
253         case e1000_media_type_copper:
254                 mac->ops.check_for_link = e1000_check_for_copper_link_generic;
255                 break;
256         case e1000_media_type_fiber:
257                 mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
258                 break;
259         case e1000_media_type_internal_serdes:
260                 mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
261                 break;
262         default:
263                 ret_val = -E1000_ERR_CONFIG;
264                 goto out;
265                 break;
266         }
267         /* check management mode */
268         mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
269         /* multicast address update */
270         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
271         /* writing VFTA */
272         mac->ops.write_vfta = e1000_write_vfta_generic;
273         /* clearing VFTA */
274         mac->ops.clear_vfta = e1000_clear_vfta_generic;
275         /* setting MTA */
276         mac->ops.mta_set = e1000_mta_set_generic;
277         /* read mac address */
278         mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
279         /* blink LED */
280         mac->ops.blink_led = e1000_blink_led_generic;
281         /* setup LED */
282         mac->ops.setup_led = e1000_setup_led_generic;
283         /* cleanup LED */
284         mac->ops.cleanup_led = e1000_cleanup_led_generic;
285         /* turn on/off LED */
286         mac->ops.led_on = e1000_led_on_generic;
287         mac->ops.led_off = e1000_led_off_generic;
288         /* clear hardware counters */
289         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_80003es2lan;
290         /* link info */
291         mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
292
293 out:
294         return ret_val;
295 }
296
297 /**
298  *  e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
299  *  @hw: pointer to the HW structure
300  *
301  *  Called to initialize all function pointers and parameters.
302  **/
303 void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
304 {
305         DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
306
307         hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
308         hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
309         hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
310         e1000_get_bus_info_pcie_generic(hw);
311 }
312
313 /**
314  *  e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
315  *  @hw: pointer to the HW structure
316  *
317  *  A wrapper to acquire access rights to the correct PHY.
318  **/
319 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw)
320 {
321         u16 mask;
322
323         DEBUGFUNC("e1000_acquire_phy_80003es2lan");
324
325         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
326         return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
327 }
328
329 /**
330  *  e1000_release_phy_80003es2lan - Release rights to access PHY
331  *  @hw: pointer to the HW structure
332  *
333  *  A wrapper to release access rights to the correct PHY.
334  **/
335 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
336 {
337         u16 mask;
338
339         DEBUGFUNC("e1000_release_phy_80003es2lan");
340
341         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
342         e1000_release_swfw_sync_80003es2lan(hw, mask);
343 }
344
345
346 /**
347  *  e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran register
348  *  @hw: pointer to the HW structure
349  *
350  *  Acquire the semaphore to access the Kumeran interface.
351  *
352  **/
353 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw)
354 {
355         u16 mask;
356
357         DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
358
359         mask = E1000_SWFW_CSR_SM;
360
361         return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
362 }
363
364 /**
365  *  e1000_release_mac_csr_80003es2lan - Release rights to access Kumeran Register
366  *  @hw: pointer to the HW structure
367  *
368  *  Release the semaphore used to access the Kumeran interface
369  **/
370 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw)
371 {
372         u16 mask;
373
374         DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
375
376         mask = E1000_SWFW_CSR_SM;
377
378         e1000_release_swfw_sync_80003es2lan(hw, mask);
379 }
380
381 /**
382  *  e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
383  *  @hw: pointer to the HW structure
384  *
385  *  Acquire the semaphore to access the EEPROM.
386  **/
387 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw)
388 {
389         s32 ret_val;
390
391         DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
392
393         ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
394         if (ret_val)
395                 goto out;
396
397         ret_val = e1000_acquire_nvm_generic(hw);
398
399         if (ret_val)
400                 e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
401
402 out:
403         return ret_val;
404 }
405
406 /**
407  *  e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
408  *  @hw: pointer to the HW structure
409  *
410  *  Release the semaphore used to access the EEPROM.
411  **/
412 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw)
413 {
414         DEBUGFUNC("e1000_release_nvm_80003es2lan");
415
416         e1000_release_nvm_generic(hw);
417         e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
418 }
419
420 /**
421  *  e1000_acquire_swfw_sync_80003es2lan - Acquire SW/FW semaphore
422  *  @hw: pointer to the HW structure
423  *  @mask: specifies which semaphore to acquire
424  *
425  *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
426  *  will also specify which port we're acquiring the lock for.
427  **/
428 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
429 {
430         u32 swfw_sync;
431         u32 swmask = mask;
432         u32 fwmask = mask << 16;
433         s32 ret_val = E1000_SUCCESS;
434         s32 i = 0, timeout = 50;
435
436         DEBUGFUNC("e1000_acquire_swfw_sync_80003es2lan");
437
438         while (i < timeout) {
439                 if (e1000_get_hw_semaphore_generic(hw)) {
440                         ret_val = -E1000_ERR_SWFW_SYNC;
441                         goto out;
442                 }
443
444                 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
445                 if (!(swfw_sync & (fwmask | swmask)))
446                         break;
447
448                 /*
449                  * Firmware currently using resource (fwmask)
450                  * or other software thread using resource (swmask)
451                  */
452                 e1000_put_hw_semaphore_generic(hw);
453                 msec_delay_irq(5);
454                 i++;
455         }
456
457         if (i == timeout) {
458                 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
459                 ret_val = -E1000_ERR_SWFW_SYNC;
460                 goto out;
461         }
462
463         swfw_sync |= swmask;
464         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
465
466         e1000_put_hw_semaphore_generic(hw);
467
468 out:
469         return ret_val;
470 }
471
472 /**
473  *  e1000_release_swfw_sync_80003es2lan - Release SW/FW semaphore
474  *  @hw: pointer to the HW structure
475  *  @mask: specifies which semaphore to acquire
476  *
477  *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
478  *  will also specify which port we're releasing the lock for.
479  **/
480 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
481 {
482         u32 swfw_sync;
483
484         DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
485
486         while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
487                 ; /* Empty */
488
489         swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
490         swfw_sync &= ~mask;
491         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
492
493         e1000_put_hw_semaphore_generic(hw);
494 }
495
496 /**
497  *  e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
498  *  @hw: pointer to the HW structure
499  *  @offset: offset of the register to read
500  *  @data: pointer to the data returned from the operation
501  *
502  *  Read the GG82563 PHY register.
503  **/
504 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
505                                                   u32 offset, u16 *data)
506 {
507         s32 ret_val;
508         u32 page_select;
509         u16 temp;
510
511         DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
512
513         ret_val = e1000_acquire_phy_80003es2lan(hw);
514         if (ret_val)
515                 goto out;
516
517         /* Select Configuration Page */
518         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
519                 page_select = GG82563_PHY_PAGE_SELECT;
520         } else {
521                 /*
522                  * Use Alternative Page Select register to access
523                  * registers 30 and 31
524                  */
525                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
526         }
527
528         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
529         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
530         if (ret_val) {
531                 e1000_release_phy_80003es2lan(hw);
532                 goto out;
533         }
534
535         /*
536          * The "ready" bit in the MDIC register may be incorrectly set
537          * before the device has completed the "Page Select" MDI
538          * transaction.  So we wait 200us after each MDI command...
539          */
540         usec_delay(200);
541
542         /* ...and verify the command was successful. */
543         ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
544
545         if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
546                 ret_val = -E1000_ERR_PHY;
547                 e1000_release_phy_80003es2lan(hw);
548                 goto out;
549         }
550
551         usec_delay(200);
552
553         ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
554                                            data);
555
556         usec_delay(200);
557         e1000_release_phy_80003es2lan(hw);
558
559 out:
560         return ret_val;
561 }
562
563 /**
564  *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
565  *  @hw: pointer to the HW structure
566  *  @offset: offset of the register to read
567  *  @data: value to write to the register
568  *
569  *  Write to the GG82563 PHY register.
570  **/
571 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
572                                                    u32 offset, u16 data)
573 {
574         s32 ret_val;
575         u32 page_select;
576         u16 temp;
577
578         DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
579
580         ret_val = e1000_acquire_phy_80003es2lan(hw);
581         if (ret_val)
582                 goto out;
583
584         /* Select Configuration Page */
585         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
586                 page_select = GG82563_PHY_PAGE_SELECT;
587         } else {
588                 /*
589                  * Use Alternative Page Select register to access
590                  * registers 30 and 31
591                  */
592                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
593         }
594
595         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
596         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
597         if (ret_val) {
598                 e1000_release_phy_80003es2lan(hw);
599                 goto out;
600         }
601
602
603         /*
604          * The "ready" bit in the MDIC register may be incorrectly set
605          * before the device has completed the "Page Select" MDI
606          * transaction.  So we wait 200us after each MDI command...
607          */
608         usec_delay(200);
609
610         /* ...and verify the command was successful. */
611         ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
612
613         if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
614                 ret_val = -E1000_ERR_PHY;
615                 e1000_release_phy_80003es2lan(hw);
616                 goto out;
617         }
618
619         usec_delay(200);
620
621         ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
622                                           data);
623
624         usec_delay(200);
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 "
732                          "on GG82563 phy.\n");
733
734                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
735                                                      100000, &link);
736                 if (ret_val)
737                         goto out;
738
739                 if (!link) {
740                         /*
741                          * We didn't get link.
742                          * Reset the DSP and cross our fingers.
743                          */
744                         ret_val = e1000_phy_reset_dsp_generic(hw);
745                         if (ret_val)
746                                 goto out;
747                 }
748
749                 /* Try once more */
750                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
751                                                      100000, &link);
752                 if (ret_val)
753                         goto out;
754         }
755
756         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &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, phy_data);
776
777 out:
778         return ret_val;
779 }
780
781 /**
782  *  e1000_get_cable_length_80003es2lan - Set approximate cable length
783  *  @hw: pointer to the HW structure
784  *
785  *  Find the approximate cable length as measured by the GG82563 PHY.
786  *  This is a function pointer entry point called by the phy module.
787  **/
788 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
789 {
790         struct e1000_phy_info *phy = &hw->phy;
791         s32 ret_val = E1000_SUCCESS;
792         u16 phy_data, index;
793
794         DEBUGFUNC("e1000_get_cable_length_80003es2lan");
795
796         if (!(hw->phy.ops.read_reg))
797                 goto out;
798
799         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
800         if (ret_val)
801                 goto out;
802
803         index = phy_data & GG82563_DSPD_CABLE_LENGTH;
804
805         if (index < GG82563_CABLE_LENGTH_TABLE_SIZE + 5) {
806                 phy->min_cable_length = e1000_gg82563_cable_length_table[index];
807                 phy->max_cable_length =
808                                  e1000_gg82563_cable_length_table[index+5];
809
810                 phy->cable_length = (phy->min_cable_length +
811                                      phy->max_cable_length) / 2;
812         } else {
813                 ret_val = E1000_ERR_PHY;
814         }
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, icr;
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         icr = E1000_READ_REG(hw, E1000_ICR);
894
895         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 i;
913
914         DEBUGFUNC("e1000_init_hw_80003es2lan");
915
916         e1000_initialize_hw_bits_80003es2lan(hw);
917
918         /* Initialize identification LED */
919         ret_val = e1000_id_led_init_generic(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
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         /* Set the transmit descriptor write-back policy */
941         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
942         reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
943                    E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
944         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
945
946         /* ...for both queues. */
947         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
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(1), reg_data);
951
952         /* Enable retransmit on late collisions */
953         reg_data = E1000_READ_REG(hw, E1000_TCTL);
954         reg_data |= E1000_TCTL_RTLC;
955         E1000_WRITE_REG(hw, E1000_TCTL, reg_data);
956
957         /* Configure Gigabit Carry Extend Padding */
958         reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);
959         reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
960         reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;
961         E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);
962
963         /* Configure Transmit Inter-Packet Gap */
964         reg_data = E1000_READ_REG(hw, E1000_TIPG);
965         reg_data &= ~E1000_TIPG_IPGT_MASK;
966         reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
967         E1000_WRITE_REG(hw, E1000_TIPG, reg_data);
968
969         reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);
970         reg_data &= ~0x00100000;
971         E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
972
973         /*
974          * Clear all of the statistics registers (clear on read).  It is
975          * important that we do this after we have tried to establish link
976          * because the symbol error count will increment wildly if there
977          * is no link.
978          */
979         e1000_clear_hw_cntrs_80003es2lan(hw);
980
981         return ret_val;
982 }
983
984 /**
985  *  e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
986  *  @hw: pointer to the HW structure
987  *
988  *  Initializes required hardware-dependent bits needed for normal operation.
989  **/
990 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw)
991 {
992         u32 reg;
993
994         DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
995
996         /* Transmit Descriptor Control 0 */
997         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
998         reg |= (1 << 22);
999         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1000
1001         /* Transmit Descriptor Control 1 */
1002         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1003         reg |= (1 << 22);
1004         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1005
1006         /* Transmit Arbitration Control 0 */
1007         reg = E1000_READ_REG(hw, E1000_TARC(0));
1008         reg &= ~(0xF << 27); /* 30:27 */
1009         if (hw->phy.media_type != e1000_media_type_copper)
1010                 reg &= ~(1 << 20);
1011         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1012
1013         /* Transmit Arbitration Control 1 */
1014         reg = E1000_READ_REG(hw, E1000_TARC(1));
1015         if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1016                 reg &= ~(1 << 28);
1017         else
1018                 reg |= (1 << 28);
1019         E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1020
1021         return;
1022 }
1023
1024 /**
1025  *  e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
1026  *  @hw: pointer to the HW structure
1027  *
1028  *  Setup some GG82563 PHY registers for obtaining link
1029  **/
1030 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw)
1031 {
1032         struct e1000_phy_info *phy = &hw->phy;
1033         s32 ret_val;
1034         u32 ctrl_ext;
1035         u16 data;
1036
1037         DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1038
1039         if (!phy->reset_disable) {
1040                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1041                                              &data);
1042                 if (ret_val)
1043                         goto out;
1044
1045                 data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1046                 /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
1047                 data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
1048
1049                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1050                                               data);
1051                 if (ret_val)
1052                         goto out;
1053
1054                 /*
1055                  * Options:
1056                  *   MDI/MDI-X = 0 (default)
1057                  *   0 - Auto for all speeds
1058                  *   1 - MDI mode
1059                  *   2 - MDI-X mode
1060                  *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1061                  */
1062                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
1063                 if (ret_val)
1064                         goto out;
1065
1066                 data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1067
1068                 switch (phy->mdix) {
1069                 case 1:
1070                         data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1071                         break;
1072                 case 2:
1073                         data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1074                         break;
1075                 case 0:
1076                 default:
1077                         data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1078                         break;
1079                 }
1080
1081                 /*
1082                  * Options:
1083                  *   disable_polarity_correction = 0 (default)
1084                  *       Automatic Correction for Reversed Cable Polarity
1085                  *   0 - Disabled
1086                  *   1 - Enabled
1087                  */
1088                 data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1089                 if (phy->disable_polarity_correction)
1090                         data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1091
1092                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
1093                 if (ret_val)
1094                         goto out;
1095
1096                 /* SW Reset the PHY so all changes take effect */
1097                 ret_val = hw->phy.ops.commit(hw);
1098                 if (ret_val) {
1099                         DEBUGOUT("Error Resetting the PHY\n");
1100                         goto out;
1101                 }
1102
1103         }
1104
1105         /* Bypass Rx and Tx FIFO's */
1106         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1107                                 E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
1108                                 E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
1109                                         E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
1110         if (ret_val)
1111                 goto out;
1112
1113         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1114                                       E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1115                                       &data);
1116         if (ret_val)
1117                 goto out;
1118         data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1119         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1120                                        E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1121                                        data);
1122         if (ret_val)
1123                 goto out;
1124
1125         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1126         if (ret_val)
1127                 goto out;
1128
1129         data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1130         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1131         if (ret_val)
1132                 goto out;
1133
1134         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1135         ctrl_ext &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1136         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1137
1138         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
1139         if (ret_val)
1140                 goto out;
1141
1142         /*
1143          * Do not init these registers when the HW is in IAMT mode, since the
1144          * firmware will have already initialized them.  We only initialize
1145          * them if the HW is not in IAMT mode.
1146          */
1147         if (!(hw->mac.ops.check_mng_mode(hw))) {
1148                 /* Enable Electrical Idle on the PHY */
1149                 data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1150                 ret_val = hw->phy.ops.write_reg(hw,
1151                                                 GG82563_PHY_PWR_MGMT_CTRL,
1152                                                 data);
1153                 if (ret_val)
1154                         goto out;
1155                 ret_val = hw->phy.ops.read_reg(hw,
1156                                                GG82563_PHY_KMRN_MODE_CTRL,
1157                                                &data);
1158                         if (ret_val)
1159                                 goto out;
1160
1161                 data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1162                 ret_val = hw->phy.ops.write_reg(hw,
1163                                                 GG82563_PHY_KMRN_MODE_CTRL,
1164                                                 data);
1165
1166                 if (ret_val)
1167                         goto out;
1168         }
1169
1170         /*
1171          * Workaround: Disable padding in Kumeran interface in the MAC
1172          * and in the PHY to avoid CRC errors.
1173          */
1174         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
1175         if (ret_val)
1176                 goto out;
1177
1178         data |= GG82563_ICR_DIS_PADDING;
1179         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1180         if (ret_val)
1181                 goto out;
1182
1183 out:
1184         return ret_val;
1185 }
1186
1187 /**
1188  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1189  *  @hw: pointer to the HW structure
1190  *
1191  *  Essentially a wrapper for setting up all things "copper" related.
1192  *  This is a function pointer entry point called by the mac module.
1193  **/
1194 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
1195 {
1196         u32 ctrl;
1197         s32 ret_val;
1198         u16 reg_data;
1199
1200         DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1201
1202         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1203         ctrl |= E1000_CTRL_SLU;
1204         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1205         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1206
1207         /*
1208          * Set the mac to wait the maximum time between each
1209          * iteration and increase the max iterations when
1210          * polling the phy; this fixes erroneous timeouts at 10Mbps.
1211          */
1212         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
1213                                                    0xFFFF);
1214         if (ret_val)
1215                 goto out;
1216         ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1217                                                   &reg_data);
1218         if (ret_val)
1219                 goto out;
1220         reg_data |= 0x3F;
1221         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1222                                                    reg_data);
1223         if (ret_val)
1224                 goto out;
1225         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1226                                       E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1227                                       &reg_data);
1228         if (ret_val)
1229                 goto out;
1230         reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
1231         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1232                                        E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1233                                        reg_data);
1234         if (ret_val)
1235                 goto out;
1236
1237         ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1238         if (ret_val)
1239                 goto out;
1240
1241         ret_val = e1000_setup_copper_link_generic(hw);
1242
1243 out:
1244         return ret_val;
1245 }
1246
1247 /**
1248  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1249  *  @hw: pointer to the HW structure
1250  *  @duplex: current duplex setting
1251  *
1252  *  Configure the KMRN interface by applying last minute quirks for
1253  *  10/100 operation.
1254  **/
1255 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1256 {
1257         s32 ret_val = E1000_SUCCESS;
1258         u16 speed;
1259         u16 duplex;
1260
1261         DEBUGFUNC("e1000_configure_on_link_up");
1262
1263         if (hw->phy.media_type == e1000_media_type_copper) {
1264
1265                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
1266                                                                     &speed,
1267                                                                     &duplex);
1268                 if (ret_val)
1269                         goto out;
1270
1271                 if (speed == SPEED_1000)
1272                         ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1273                 else
1274                         ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1275         }
1276
1277 out:
1278         return ret_val;
1279 }
1280
1281 /**
1282  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1283  *  @hw: pointer to the HW structure
1284  *  @duplex: current duplex setting
1285  *
1286  *  Configure the KMRN interface by applying last minute quirks for
1287  *  10/100 operation.
1288  **/
1289 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1290 {
1291         s32 ret_val = E1000_SUCCESS;
1292         u32 tipg;
1293         u32 i = 0;
1294         u16 reg_data, reg_data2;
1295
1296         DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1297
1298         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
1299         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1300                                        E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1301                                        reg_data);
1302         if (ret_val)
1303                 goto out;
1304
1305         /* Configure Transmit Inter-Packet Gap */
1306         tipg = E1000_READ_REG(hw, E1000_TIPG);
1307         tipg &= ~E1000_TIPG_IPGT_MASK;
1308         tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
1309         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1310
1311
1312         do {
1313                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1314                                                &reg_data);
1315                 if (ret_val)
1316                         goto out;
1317
1318                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1319                                                &reg_data2);
1320                 if (ret_val)
1321                         goto out;
1322                 i++;
1323         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1324
1325         if (duplex == HALF_DUPLEX)
1326                 reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1327         else
1328                 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1329
1330         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1331
1332 out:
1333         return ret_val;
1334 }
1335
1336 /**
1337  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1338  *  @hw: pointer to the HW structure
1339  *
1340  *  Configure the KMRN interface by applying last minute quirks for
1341  *  gigabit operation.
1342  **/
1343 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
1344 {
1345         s32 ret_val = E1000_SUCCESS;
1346         u16 reg_data, reg_data2;
1347         u32 tipg;
1348         u32 i = 0;
1349
1350         DEBUGFUNC("e1000_configure_kmrn_for_1000");
1351
1352         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
1353         ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1354                                        E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1355                                        reg_data);
1356         if (ret_val)
1357                 goto out;
1358
1359         /* Configure Transmit Inter-Packet Gap */
1360         tipg = E1000_READ_REG(hw, E1000_TIPG);
1361         tipg &= ~E1000_TIPG_IPGT_MASK;
1362         tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
1363         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1364
1365
1366         do {
1367                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1368                                                &reg_data);
1369                 if (ret_val)
1370                         goto out;
1371
1372                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1373                                                &reg_data2);
1374                 if (ret_val)
1375                         goto out;
1376                 i++;
1377         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1378
1379         reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1380         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1381
1382 out:
1383         return ret_val;
1384 }
1385
1386 /**
1387  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1388  *  @hw: pointer to the HW structure
1389  *  @offset: register offset to be read
1390  *  @data: pointer to the read data
1391  *
1392  *  Acquire semaphore, then read the PHY register at offset
1393  *  using the kumeran interface.  The information retrieved is stored in data.
1394  *  Release the semaphore before exiting.
1395  **/
1396 s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, u16 *data)
1397 {
1398         u32 kmrnctrlsta;
1399         s32 ret_val = E1000_SUCCESS;
1400
1401         DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1402
1403         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1404         if (ret_val)
1405                 goto out;
1406
1407         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1408                        E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1409         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1410
1411         usec_delay(2);
1412
1413         kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1414         *data = (u16)kmrnctrlsta;
1415
1416         e1000_release_mac_csr_80003es2lan(hw);
1417
1418 out:
1419         return ret_val;
1420 }
1421
1422 /**
1423  *  e1000_write_kmrn_reg_80003es2lan - Write kumeran register
1424  *  @hw: pointer to the HW structure
1425  *  @offset: register offset to write to
1426  *  @data: data to write at register offset
1427  *
1428  *  Acquire semaphore, then write the data to PHY register
1429  *  at the offset using the kumeran interface.  Release semaphore
1430  *  before exiting.
1431  **/
1432 s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, u16 data)
1433 {
1434         u32 kmrnctrlsta;
1435         s32 ret_val = E1000_SUCCESS;
1436
1437         DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1438
1439         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1440         if (ret_val)
1441                 goto out;
1442
1443         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1444                        E1000_KMRNCTRLSTA_OFFSET) | data;
1445         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1446
1447         usec_delay(2);
1448
1449         e1000_release_mac_csr_80003es2lan(hw);
1450
1451 out:
1452         return ret_val;
1453 }
1454
1455 /**
1456  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
1457  *  @hw: pointer to the HW structure
1458  **/
1459 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
1460 {
1461         s32 ret_val = E1000_SUCCESS;
1462
1463         DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1464         if (e1000_check_alt_mac_addr_generic(hw))
1465                 ret_val = e1000_read_mac_addr_generic(hw);
1466
1467         return ret_val;
1468 }
1469
1470 /**
1471  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1472  * @hw: pointer to the HW structure
1473  *
1474  * In the case of a PHY power down to save power, or to turn off link during a
1475  * driver unload, or wake on lan is not enabled, remove the link.
1476  **/
1477 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1478 {
1479         /* If the management interface is not enabled, then power down */
1480         if (!(hw->mac.ops.check_mng_mode(hw) ||
1481               hw->phy.ops.check_reset_block(hw)))
1482                 e1000_power_down_phy_copper(hw);
1483
1484         return;
1485 }
1486
1487 /**
1488  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1489  *  @hw: pointer to the HW structure
1490  *
1491  *  Clears the hardware counters by reading the counter registers.
1492  **/
1493 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
1494 {
1495         DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1496
1497         e1000_clear_hw_cntrs_base_generic(hw);
1498
1499         E1000_READ_REG(hw, E1000_PRC64);
1500         E1000_READ_REG(hw, E1000_PRC127);
1501         E1000_READ_REG(hw, E1000_PRC255);
1502         E1000_READ_REG(hw, E1000_PRC511);
1503         E1000_READ_REG(hw, E1000_PRC1023);
1504         E1000_READ_REG(hw, E1000_PRC1522);
1505         E1000_READ_REG(hw, E1000_PTC64);
1506         E1000_READ_REG(hw, E1000_PTC127);
1507         E1000_READ_REG(hw, E1000_PTC255);
1508         E1000_READ_REG(hw, E1000_PTC511);
1509         E1000_READ_REG(hw, E1000_PTC1023);
1510         E1000_READ_REG(hw, E1000_PTC1522);
1511
1512         E1000_READ_REG(hw, E1000_ALGNERRC);
1513         E1000_READ_REG(hw, E1000_RXERRC);
1514         E1000_READ_REG(hw, E1000_TNCRS);
1515         E1000_READ_REG(hw, E1000_CEXTERR);
1516         E1000_READ_REG(hw, E1000_TSCTC);
1517         E1000_READ_REG(hw, E1000_TSCTFC);
1518
1519         E1000_READ_REG(hw, E1000_MGTPRC);
1520         E1000_READ_REG(hw, E1000_MGTPDC);
1521         E1000_READ_REG(hw, E1000_MGTPTC);
1522
1523         E1000_READ_REG(hw, E1000_IAC);
1524         E1000_READ_REG(hw, E1000_ICRXOC);
1525
1526         E1000_READ_REG(hw, E1000_ICRXPTC);
1527         E1000_READ_REG(hw, E1000_ICRXATC);
1528         E1000_READ_REG(hw, E1000_ICTXPTC);
1529         E1000_READ_REG(hw, E1000_ICTXATC);
1530         E1000_READ_REG(hw, E1000_ICTXQEC);
1531         E1000_READ_REG(hw, E1000_ICTXQMTC);
1532         E1000_READ_REG(hw, E1000_ICRXDMTC);
1533 }