1 /*******************************************************************************
2 
3   Intel PRO/1000 Linux driver
4   Copyright(c) 1999 - 2006 Intel Corporation.
5 
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9 
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14 
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, write to the Free Software Foundation, Inc.,
17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 
19   The full GNU General Public License is included in this distribution in
20   the file called "COPYING".
21 
22   Contact Information:
23   Linux NICS <linux.nics@intel.com>
24   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26 
27 *******************************************************************************/
28 
29 FILE_LICENCE ( GPL2_ONLY );
30 
31 /* e1000_hw.c
32  * Shared functions for accessing and configuring the MAC
33  */
34 
35 
36 #include "e1000_hw.h"
37 
38 static int32_t e1000_swfw_sync_acquire(struct e1000_hw *hw, uint16_t mask);
39 static void e1000_swfw_sync_release(struct e1000_hw *hw, uint16_t mask);
40 static int32_t e1000_read_kmrn_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t *data);
41 static int32_t e1000_write_kmrn_reg(struct e1000_hw *hw, uint32_t reg_addr, uint16_t data);
42 static int32_t e1000_get_software_semaphore(struct e1000_hw *hw);
43 static void e1000_release_software_semaphore(struct e1000_hw *hw);
44 
45 static uint8_t e1000_arc_subsystem_valid(struct e1000_hw *hw);
46 static int32_t e1000_check_downshift(struct e1000_hw *hw);
47 static int32_t e1000_check_polarity(struct e1000_hw *hw, e1000_rev_polarity *polarity);
48 static void e1000_clear_hw_cntrs(struct e1000_hw *hw);
49 static void e1000_clear_vfta(struct e1000_hw *hw);
50 static int32_t e1000_commit_shadow_ram(struct e1000_hw *hw);
51 static int32_t e1000_config_dsp_after_link_change(struct e1000_hw *hw, boolean_t link_up);
52 static int32_t e1000_config_fc_after_link_up(struct e1000_hw *hw);
53 static int32_t e1000_detect_gig_phy(struct e1000_hw *hw);
54 static int32_t e1000_erase_ich8_4k_segment(struct e1000_hw *hw, uint32_t bank);
55 static int32_t e1000_get_auto_rd_done(struct e1000_hw *hw);
56 static int32_t e1000_get_cable_length(struct e1000_hw *hw, uint16_t *min_length, uint16_t *max_length);
57 static int32_t e1000_get_hw_eeprom_semaphore(struct e1000_hw *hw);
58 static int32_t e1000_get_phy_cfg_done(struct e1000_hw *hw);
59 static int32_t e1000_get_software_flag(struct e1000_hw *hw);
60 static int32_t e1000_ich8_cycle_init(struct e1000_hw *hw);
61 static int32_t e1000_ich8_flash_cycle(struct e1000_hw *hw, uint32_t timeout);
62 static int32_t e1000_id_led_init(struct e1000_hw *hw);
63 static int32_t e1000_init_lcd_from_nvm_config_region(struct e1000_hw *hw, uint32_t cnf_base_addr, uint32_t cnf_size);
64 static int32_t e1000_init_lcd_from_nvm(struct e1000_hw *hw);
65 static void e1000_init_rx_addrs(struct e1000_hw *hw);
66 static void e1000_initialize_hardware_bits(struct e1000_hw *hw);
67 static boolean_t e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw);
68 static int32_t e1000_kumeran_lock_loss_workaround(struct e1000_hw *hw);
69 static int32_t e1000_mng_enable_host_if(struct e1000_hw *hw);
70 static int32_t e1000_mng_host_if_write(struct e1000_hw *hw, uint8_t *buffer, uint16_t length, uint16_t offset, uint8_t *sum);
71 static int32_t e1000_mng_write_cmd_header(struct e1000_hw* hw, struct e1000_host_mng_command_header* hdr);
72 static int32_t e1000_mng_write_commit(struct e1000_hw *hw);
73 static int32_t e1000_phy_ife_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info);
74 static int32_t e1000_phy_igp_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info);
75 static int32_t e1000_read_eeprom_eerd(struct e1000_hw *hw, uint16_t offset, uint16_t words, uint16_t *data);
76 static int32_t e1000_write_eeprom_eewr(struct e1000_hw *hw, uint16_t offset, uint16_t words, uint16_t *data);
77 static int32_t e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd);
78 static int32_t e1000_phy_m88_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info);
79 static void e1000_put_hw_eeprom_semaphore(struct e1000_hw *hw);
80 static int32_t e1000_read_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t *data);
81 static int32_t e1000_verify_write_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t byte);
82 static int32_t e1000_write_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t byte);
83 static int32_t e1000_read_ich8_word(struct e1000_hw *hw, uint32_t index, uint16_t *data);
84 static int32_t e1000_read_ich8_data(struct e1000_hw *hw, uint32_t index, uint32_t size, uint16_t *data);
85 static int32_t e1000_write_ich8_data(struct e1000_hw *hw, uint32_t index, uint32_t size, uint16_t data);
86 static int32_t e1000_read_eeprom_ich8(struct e1000_hw *hw, uint16_t offset, uint16_t words, uint16_t *data);
87 static int32_t e1000_write_eeprom_ich8(struct e1000_hw *hw, uint16_t offset, uint16_t words, uint16_t *data);
88 static void e1000_release_software_flag(struct e1000_hw *hw);
89 static int32_t e1000_set_d3_lplu_state(struct e1000_hw *hw, boolean_t active);
90 static int32_t e1000_set_d0_lplu_state(struct e1000_hw *hw, boolean_t active);
91 static int32_t e1000_set_pci_ex_no_snoop(struct e1000_hw *hw, uint32_t no_snoop);
92 static void e1000_set_pci_express_master_disable(struct e1000_hw *hw);
93 static int32_t e1000_wait_autoneg(struct e1000_hw *hw);
94 static void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, uint32_t value);
95 static int32_t e1000_set_phy_type(struct e1000_hw *hw);
96 static void e1000_phy_init_script(struct e1000_hw *hw);
97 static int32_t e1000_setup_copper_link(struct e1000_hw *hw);
98 static int32_t e1000_setup_fiber_serdes_link(struct e1000_hw *hw);
99 static int32_t e1000_adjust_serdes_amplitude(struct e1000_hw *hw);
100 static int32_t e1000_phy_force_speed_duplex(struct e1000_hw *hw);
101 static int32_t e1000_config_mac_to_phy(struct e1000_hw *hw);
102 static void e1000_raise_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl);
103 static void e1000_lower_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl);
104 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, uint32_t data,
105                                      uint16_t count);
106 static uint16_t e1000_shift_in_mdi_bits(struct e1000_hw *hw);
107 static int32_t e1000_phy_reset_dsp(struct e1000_hw *hw);
108 static int32_t e1000_write_eeprom_spi(struct e1000_hw *hw, uint16_t offset,
109                                       uint16_t words, uint16_t *data);
110 static int32_t e1000_write_eeprom_microwire(struct e1000_hw *hw,
111                                             uint16_t offset, uint16_t words,
112                                             uint16_t *data);
113 static int32_t e1000_spi_eeprom_ready(struct e1000_hw *hw);
114 static void e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
115 static void e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
116 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, uint16_t data,
117                                     uint16_t count);
118 static int32_t e1000_write_phy_reg_ex(struct e1000_hw *hw, uint32_t reg_addr,
119                                       uint16_t phy_data);
120 static int32_t e1000_read_phy_reg_ex(struct e1000_hw *hw,uint32_t reg_addr,
121                                      uint16_t *phy_data);
122 static uint16_t e1000_shift_in_ee_bits(struct e1000_hw *hw, uint16_t count);
123 static int32_t e1000_acquire_eeprom(struct e1000_hw *hw);
124 static void e1000_release_eeprom(struct e1000_hw *hw);
125 static void e1000_standby_eeprom(struct e1000_hw *hw);
126 static int32_t e1000_set_vco_speed(struct e1000_hw *hw);
127 static int32_t e1000_polarity_reversal_workaround(struct e1000_hw *hw);
128 static int32_t e1000_set_phy_mode(struct e1000_hw *hw);
129 static int32_t e1000_host_if_read_cookie(struct e1000_hw *hw, uint8_t *buffer);
130 static uint8_t e1000_calculate_mng_checksum(char *buffer, uint32_t length);
131 static int32_t e1000_configure_kmrn_for_10_100(struct e1000_hw *hw,
132                                                uint16_t duplex);
133 static int32_t e1000_configure_kmrn_for_1000(struct e1000_hw *hw);
134 
135 /* IGP cable length table */
136 static const
137 uint16_t e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] =
138     { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
139       5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
140       25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
141       40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
142       60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
143       90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
144       100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
145       110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120};
146 
147 static const
148 uint16_t e1000_igp_2_cable_length_table[IGP02E1000_AGC_LENGTH_TABLE_SIZE] =
149     { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
150       0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
151       6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
152       21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
153       40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
154       60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
155       83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
156       104, 109, 114, 118, 121, 124};
157 
158 /******************************************************************************
159  * Set the phy type member in the hw struct.
160  *
161  * hw - Struct containing variables accessed by shared code
162  *****************************************************************************/
163 static int32_t
e1000_set_phy_type(struct e1000_hw * hw)164 e1000_set_phy_type(struct e1000_hw *hw)
165 {
166     DEBUGFUNC("e1000_set_phy_type");
167 
168     if (hw->mac_type == e1000_undefined)
169         return -E1000_ERR_PHY_TYPE;
170 
171     switch (hw->phy_id) {
172     case M88E1000_E_PHY_ID:
173     case M88E1000_I_PHY_ID:
174     case M88E1011_I_PHY_ID:
175     case M88E1111_I_PHY_ID:
176         hw->phy_type = e1000_phy_m88;
177         break;
178     case IGP01E1000_I_PHY_ID:
179         if (hw->mac_type == e1000_82541 ||
180             hw->mac_type == e1000_82541_rev_2 ||
181             hw->mac_type == e1000_82547 ||
182             hw->mac_type == e1000_82547_rev_2) {
183             hw->phy_type = e1000_phy_igp;
184             break;
185         }
186     case IGP03E1000_E_PHY_ID:
187         hw->phy_type = e1000_phy_igp_3;
188         break;
189     case IFE_E_PHY_ID:
190     case IFE_PLUS_E_PHY_ID:
191     case IFE_C_E_PHY_ID:
192         hw->phy_type = e1000_phy_ife;
193         break;
194     case GG82563_E_PHY_ID:
195         if (hw->mac_type == e1000_80003es2lan) {
196             hw->phy_type = e1000_phy_gg82563;
197             break;
198         }
199         /* Fall Through */
200     default:
201         /* Should never have loaded on this device */
202         hw->phy_type = e1000_phy_undefined;
203         return -E1000_ERR_PHY_TYPE;
204     }
205 
206     return E1000_SUCCESS;
207 }
208 
209 /******************************************************************************
210  * IGP phy init script - initializes the GbE PHY
211  *
212  * hw - Struct containing variables accessed by shared code
213  *****************************************************************************/
214 static void
e1000_phy_init_script(struct e1000_hw * hw)215 e1000_phy_init_script(struct e1000_hw *hw)
216 {
217     uint32_t ret_val;
218     uint16_t phy_saved_data;
219 
220     DEBUGFUNC("e1000_phy_init_script");
221 
222     if (hw->phy_init_script) {
223         msleep(20);
224 
225         /* Save off the current value of register 0x2F5B to be restored at
226          * the end of this routine. */
227         ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
228 
229         /* Disabled the PHY transmitter */
230         e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
231 
232         msleep(20);
233 
234         e1000_write_phy_reg(hw,0x0000,0x0140);
235 
236         msleep(5);
237 
238         switch (hw->mac_type) {
239         case e1000_82541:
240         case e1000_82547:
241             e1000_write_phy_reg(hw, 0x1F95, 0x0001);
242 
243             e1000_write_phy_reg(hw, 0x1F71, 0xBD21);
244 
245             e1000_write_phy_reg(hw, 0x1F79, 0x0018);
246 
247             e1000_write_phy_reg(hw, 0x1F30, 0x1600);
248 
249             e1000_write_phy_reg(hw, 0x1F31, 0x0014);
250 
251             e1000_write_phy_reg(hw, 0x1F32, 0x161C);
252 
253             e1000_write_phy_reg(hw, 0x1F94, 0x0003);
254 
255             e1000_write_phy_reg(hw, 0x1F96, 0x003F);
256 
257             e1000_write_phy_reg(hw, 0x2010, 0x0008);
258             break;
259 
260         case e1000_82541_rev_2:
261         case e1000_82547_rev_2:
262             e1000_write_phy_reg(hw, 0x1F73, 0x0099);
263             break;
264         default:
265             break;
266         }
267 
268         e1000_write_phy_reg(hw, 0x0000, 0x3300);
269 
270         msleep(20);
271 
272         /* Now enable the transmitter */
273         e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
274 
275         if (hw->mac_type == e1000_82547) {
276             uint16_t fused, fine, coarse;
277 
278             /* Move to analog registers page */
279             e1000_read_phy_reg(hw, IGP01E1000_ANALOG_SPARE_FUSE_STATUS, &fused);
280 
281             if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
282                 e1000_read_phy_reg(hw, IGP01E1000_ANALOG_FUSE_STATUS, &fused);
283 
284                 fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
285                 coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
286 
287                 if (coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
288                     coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
289                     fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
290                 } else if (coarse == IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
291                     fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
292 
293                 fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
294                         (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
295                         (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
296 
297                 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_CONTROL, fused);
298                 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_BYPASS,
299                                     IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
300             }
301         }
302     }
303 }
304 
305 /******************************************************************************
306  * Set the mac type member in the hw struct.
307  *
308  * hw - Struct containing variables accessed by shared code
309  *****************************************************************************/
310 int32_t
e1000_set_mac_type(struct e1000_hw * hw)311 e1000_set_mac_type(struct e1000_hw *hw)
312 {
313 	DEBUGFUNC("e1000_set_mac_type");
314 
315 	switch (hw->device_id) {
316 	case E1000_DEV_ID_82542:
317 		switch (hw->revision_id) {
318 		case E1000_82542_2_0_REV_ID:
319 			hw->mac_type = e1000_82542_rev2_0;
320 			break;
321 		case E1000_82542_2_1_REV_ID:
322 			hw->mac_type = e1000_82542_rev2_1;
323 			break;
324 		default:
325 			/* Invalid 82542 revision ID */
326 			return -E1000_ERR_MAC_TYPE;
327 		}
328 		break;
329 	case E1000_DEV_ID_82543GC_FIBER:
330 	case E1000_DEV_ID_82543GC_COPPER:
331 		hw->mac_type = e1000_82543;
332 		break;
333 	case E1000_DEV_ID_82544EI_COPPER:
334 	case E1000_DEV_ID_82544EI_FIBER:
335 	case E1000_DEV_ID_82544GC_COPPER:
336 	case E1000_DEV_ID_82544GC_LOM:
337 		hw->mac_type = e1000_82544;
338 		break;
339 	case E1000_DEV_ID_82540EM:
340 	case E1000_DEV_ID_82540EM_LOM:
341 	case E1000_DEV_ID_82540EP:
342 	case E1000_DEV_ID_82540EP_LOM:
343 	case E1000_DEV_ID_82540EP_LP:
344 		hw->mac_type = e1000_82540;
345 		break;
346 	case E1000_DEV_ID_82545EM_COPPER:
347 	case E1000_DEV_ID_82545EM_FIBER:
348 		hw->mac_type = e1000_82545;
349 		break;
350 	case E1000_DEV_ID_82545GM_COPPER:
351 	case E1000_DEV_ID_82545GM_FIBER:
352 	case E1000_DEV_ID_82545GM_SERDES:
353 		hw->mac_type = e1000_82545_rev_3;
354 		break;
355 	case E1000_DEV_ID_82546EB_COPPER:
356 	case E1000_DEV_ID_82546EB_FIBER:
357 	case E1000_DEV_ID_82546EB_QUAD_COPPER:
358 		hw->mac_type = e1000_82546;
359 		break;
360 	case E1000_DEV_ID_82546GB_COPPER:
361 	case E1000_DEV_ID_82546GB_FIBER:
362 	case E1000_DEV_ID_82546GB_SERDES:
363 	case E1000_DEV_ID_82546GB_PCIE:
364 	case E1000_DEV_ID_82546GB_QUAD_COPPER:
365 	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
366 		hw->mac_type = e1000_82546_rev_3;
367 		break;
368 	case E1000_DEV_ID_82541EI:
369 	case E1000_DEV_ID_82541EI_MOBILE:
370 	case E1000_DEV_ID_82541ER_LOM:
371 		hw->mac_type = e1000_82541;
372 		break;
373 	case E1000_DEV_ID_82541ER:
374 	case E1000_DEV_ID_82541GI:
375 	case E1000_DEV_ID_82541GI_LF:
376 	case E1000_DEV_ID_82541GI_MOBILE:
377 		hw->mac_type = e1000_82541_rev_2;
378 		break;
379 	case E1000_DEV_ID_82547EI:
380 	case E1000_DEV_ID_82547EI_MOBILE:
381 		hw->mac_type = e1000_82547;
382 		break;
383 	case E1000_DEV_ID_82547GI:
384 		hw->mac_type = e1000_82547_rev_2;
385 		break;
386 	case E1000_DEV_ID_82571EB_COPPER:
387 	case E1000_DEV_ID_82571EB_FIBER:
388 	case E1000_DEV_ID_82571EB_SERDES:
389 	case E1000_DEV_ID_82571EB_SERDES_DUAL:
390 	case E1000_DEV_ID_82571EB_SERDES_QUAD:
391 	case E1000_DEV_ID_82571EB_QUAD_COPPER:
392 	case E1000_DEV_ID_82571EB_QUAD_FIBER:
393 	case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
394 		hw->mac_type = e1000_82571;
395 		break;
396 	case E1000_DEV_ID_82572EI_COPPER:
397 	case E1000_DEV_ID_82572EI_FIBER:
398 	case E1000_DEV_ID_82572EI_SERDES:
399 	case E1000_DEV_ID_82572EI:
400 		hw->mac_type = e1000_82572;
401 		break;
402 	case E1000_DEV_ID_82573E:
403 	case E1000_DEV_ID_82573E_IAMT:
404 	case E1000_DEV_ID_82573L:
405 		hw->mac_type = e1000_82573;
406 		break;
407 	case E1000_DEV_ID_80003ES2LAN_COPPER_SPT:
408 	case E1000_DEV_ID_80003ES2LAN_SERDES_SPT:
409 	case E1000_DEV_ID_80003ES2LAN_COPPER_DPT:
410 	case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
411 		hw->mac_type = e1000_80003es2lan;
412 		break;
413 	case E1000_DEV_ID_ICH8_IGP_M_AMT:
414 	case E1000_DEV_ID_ICH8_IGP_AMT:
415 	case E1000_DEV_ID_ICH8_IGP_C:
416 	case E1000_DEV_ID_ICH8_IFE:
417 	case E1000_DEV_ID_ICH8_IFE_GT:
418 	case E1000_DEV_ID_ICH8_IFE_G:
419 	case E1000_DEV_ID_ICH8_IGP_M:
420 		hw->mac_type = e1000_ich8lan;
421 		break;
422 	case E1000_DEV_ID_82576:
423 		hw->mac_type = e1000_82576;
424 		break;
425 	default:
426 		/* Should never have loaded on this device */
427 		return -E1000_ERR_MAC_TYPE;
428 	}
429 
430 	switch (hw->mac_type) {
431 	case e1000_ich8lan:
432 	case e1000_82576:
433 		hw->swfwhw_semaphore_present = TRUE;
434 		hw->asf_firmware_present = TRUE;
435 		break;
436 	case e1000_80003es2lan:
437 		hw->swfw_sync_present = TRUE;
438 		/* fall through */
439 	case e1000_82571:
440 	case e1000_82572:
441 	case e1000_82573:
442 		hw->eeprom_semaphore_present = TRUE;
443 		/* fall through */
444 	case e1000_82541:
445 	case e1000_82547:
446 	case e1000_82541_rev_2:
447 	case e1000_82547_rev_2:
448 		hw->asf_firmware_present = TRUE;
449 		break;
450 	default:
451 		break;
452 	}
453 
454 	/* The 82543 chip does not count tx_carrier_errors properly in
455 	 * FD mode
456 	 */
457 	if (hw->mac_type == e1000_82543)
458 		hw->bad_tx_carr_stats_fd = TRUE;
459 
460 	/* capable of receiving management packets to the host */
461 	if (hw->mac_type >= e1000_82571)
462 		hw->has_manc2h = TRUE;
463 
464 	/* In rare occasions, ESB2 systems would end up started without
465 	 * the RX unit being turned on.
466 	 */
467 	if (hw->mac_type == e1000_80003es2lan)
468 		hw->rx_needs_kicking = TRUE;
469 
470 	if (hw->mac_type > e1000_82544)
471 		hw->has_smbus = TRUE;
472 
473 	return E1000_SUCCESS;
474 }
475 
476 /*****************************************************************************
477  * Set media type and TBI compatibility.
478  *
479  * hw - Struct containing variables accessed by shared code
480  * **************************************************************************/
481 void
e1000_set_media_type(struct e1000_hw * hw)482 e1000_set_media_type(struct e1000_hw *hw)
483 {
484     uint32_t status;
485 
486     DEBUGFUNC("e1000_set_media_type");
487 
488     if (hw->mac_type != e1000_82543) {
489         /* tbi_compatibility is only valid on 82543 */
490         hw->tbi_compatibility_en = FALSE;
491     }
492 
493     switch (hw->device_id) {
494     case E1000_DEV_ID_82545GM_SERDES:
495     case E1000_DEV_ID_82546GB_SERDES:
496     case E1000_DEV_ID_82571EB_SERDES:
497     case E1000_DEV_ID_82571EB_SERDES_DUAL:
498     case E1000_DEV_ID_82571EB_SERDES_QUAD:
499     case E1000_DEV_ID_82572EI_SERDES:
500     case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
501         hw->media_type = e1000_media_type_internal_serdes;
502         break;
503     default:
504         switch (hw->mac_type) {
505         case e1000_82542_rev2_0:
506         case e1000_82542_rev2_1:
507             hw->media_type = e1000_media_type_fiber;
508             break;
509         case e1000_ich8lan:
510         case e1000_82573:
511         case e1000_82576:
512             /* The STATUS_TBIMODE bit is reserved or reused for the this
513              * device.
514              */
515             hw->media_type = e1000_media_type_copper;
516             break;
517         default:
518             status = E1000_READ_REG(hw, STATUS);
519             if (status & E1000_STATUS_TBIMODE) {
520                 hw->media_type = e1000_media_type_fiber;
521                 /* tbi_compatibility not valid on fiber */
522                 hw->tbi_compatibility_en = FALSE;
523             } else {
524                 hw->media_type = e1000_media_type_copper;
525             }
526             break;
527         }
528     }
529 }
530 
531 /******************************************************************************
532  * Reset the transmit and receive units; mask and clear all interrupts.
533  *
534  * hw - Struct containing variables accessed by shared code
535  *****************************************************************************/
536 int32_t
e1000_reset_hw(struct e1000_hw * hw)537 e1000_reset_hw(struct e1000_hw *hw)
538 {
539     uint32_t ctrl;
540     uint32_t ctrl_ext;
541     uint32_t icr;
542     uint32_t manc;
543     uint32_t led_ctrl;
544     uint32_t timeout;
545     uint32_t extcnf_ctrl;
546     int32_t ret_val;
547 
548     DEBUGFUNC("e1000_reset_hw");
549 
550     /* For 82542 (rev 2.0), disable MWI before issuing a device reset */
551     if (hw->mac_type == e1000_82542_rev2_0) {
552         DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
553         e1000_pci_clear_mwi(hw);
554     }
555 
556     if (hw->bus_type == e1000_bus_type_pci_express) {
557         /* Prevent the PCI-E bus from sticking if there is no TLP connection
558          * on the last TLP read/write transaction when MAC is reset.
559          */
560         if (e1000_disable_pciex_master(hw) != E1000_SUCCESS) {
561             DEBUGOUT("PCI-E Master disable polling has failed.\n");
562         }
563     }
564 
565     /* Clear interrupt mask to stop board from generating interrupts */
566     DEBUGOUT("Masking off all interrupts\n");
567     E1000_WRITE_REG(hw, IMC, 0xffffffff);
568 
569     /* Disable the Transmit and Receive units.  Then delay to allow
570      * any pending transactions to complete before we hit the MAC with
571      * the global reset.
572      */
573     E1000_WRITE_REG(hw, RCTL, 0);
574     E1000_WRITE_REG(hw, TCTL, E1000_TCTL_PSP);
575     E1000_WRITE_FLUSH(hw);
576 
577     /* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */
578     hw->tbi_compatibility_on = FALSE;
579 
580     /* Delay to allow any outstanding PCI transactions to complete before
581      * resetting the device
582      */
583     msleep(10);
584 
585     ctrl = E1000_READ_REG(hw, CTRL);
586 
587     /* Must reset the PHY before resetting the MAC */
588     if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
589         E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_PHY_RST));
590         msleep(5);
591     }
592 
593     /* Must acquire the MDIO ownership before MAC reset.
594      * Ownership defaults to firmware after a reset. */
595     if (hw->mac_type == e1000_82573) {
596         timeout = 10;
597 
598         extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
599         extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
600 
601         do {
602             E1000_WRITE_REG(hw, EXTCNF_CTRL, extcnf_ctrl);
603             extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
604 
605             if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
606                 break;
607             else
608                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
609 
610             msleep(2);
611             timeout--;
612         } while (timeout);
613     }
614 
615     /* Workaround for ICH8 bit corruption issue in FIFO memory */
616     if (hw->mac_type == e1000_ich8lan) {
617         /* Set Tx and Rx buffer allocation to 8k apiece. */
618         E1000_WRITE_REG(hw, PBA, E1000_PBA_8K);
619         /* Set Packet Buffer Size to 16k. */
620         E1000_WRITE_REG(hw, PBS, E1000_PBS_16K);
621     }
622 
623     /* Issue a global reset to the MAC.  This will reset the chip's
624      * transmit, receive, DMA, and link units.  It will not effect
625      * the current PCI configuration.  The global reset bit is self-
626      * clearing, and should clear within a microsecond.
627      */
628     DEBUGOUT("Issuing a global reset to MAC\n");
629 
630     switch (hw->mac_type) {
631         case e1000_82544:
632         case e1000_82540:
633         case e1000_82545:
634         case e1000_82546:
635         case e1000_82541:
636         case e1000_82541_rev_2:
637             /* These controllers can't ack the 64-bit write when issuing the
638              * reset, so use IO-mapping as a workaround to issue the reset */
639             E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));
640             break;
641         case e1000_82545_rev_3:
642         case e1000_82546_rev_3:
643             /* Reset is performed on a shadow of the control register */
644             E1000_WRITE_REG(hw, CTRL_DUP, (ctrl | E1000_CTRL_RST));
645             break;
646         case e1000_ich8lan:
647             if (!hw->phy_reset_disable &&
648                 e1000_check_phy_reset_block(hw) == E1000_SUCCESS) {
649                 /* e1000_ich8lan PHY HW reset requires MAC CORE reset
650                  * at the same time to make sure the interface between
651                  * MAC and the external PHY is reset.
652                  */
653                 ctrl |= E1000_CTRL_PHY_RST;
654             }
655 
656             e1000_get_software_flag(hw);
657             E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_RST));
658             msleep(5);
659             break;
660         default:
661             E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_RST));
662             break;
663     }
664 
665     /* After MAC reset, force reload of EEPROM to restore power-on settings to
666      * device.  Later controllers reload the EEPROM automatically, so just wait
667      * for reload to complete.
668      */
669     switch (hw->mac_type) {
670         case e1000_82542_rev2_0:
671         case e1000_82542_rev2_1:
672         case e1000_82543:
673         case e1000_82544:
674             /* Wait for reset to complete */
675             udelay(10);
676             ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
677             ctrl_ext |= E1000_CTRL_EXT_EE_RST;
678             E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
679             E1000_WRITE_FLUSH(hw);
680             /* Wait for EEPROM reload */
681             msleep(2);
682             break;
683         case e1000_82541:
684         case e1000_82541_rev_2:
685         case e1000_82547:
686         case e1000_82547_rev_2:
687             /* Wait for EEPROM reload */
688             msleep(20);
689             break;
690         case e1000_82573:
691             if (e1000_is_onboard_nvm_eeprom(hw) == FALSE) {
692                 udelay(10);
693                 ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
694                 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
695                 E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
696                 E1000_WRITE_FLUSH(hw);
697             }
698             /* fall through */
699         default:
700             /* Auto read done will delay 5ms or poll based on mac type */
701             ret_val = e1000_get_auto_rd_done(hw);
702             if (ret_val)
703                 return ret_val;
704             break;
705     }
706 
707     /* Disable HW ARPs on ASF enabled adapters */
708     if (hw->mac_type >= e1000_82540 && hw->mac_type <= e1000_82547_rev_2) {
709         manc = E1000_READ_REG(hw, MANC);
710         manc &= ~(E1000_MANC_ARP_EN);
711         E1000_WRITE_REG(hw, MANC, manc);
712     }
713 
714     if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
715         e1000_phy_init_script(hw);
716 
717         /* Configure activity LED after PHY reset */
718         led_ctrl = E1000_READ_REG(hw, LEDCTL);
719         led_ctrl &= IGP_ACTIVITY_LED_MASK;
720         led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
721         E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
722     }
723 
724     /* Clear interrupt mask to stop board from generating interrupts */
725     DEBUGOUT("Masking off all interrupts\n");
726     E1000_WRITE_REG(hw, IMC, 0xffffffff);
727 
728     /* Clear any pending interrupt events. */
729     icr = E1000_READ_REG(hw, ICR);
730 
731     if (hw->mac_type == e1000_82571 && hw->laa_is_present == TRUE) {
732         /*
733          * Hold a copy of the LAA in RAR[14] This is done so that
734          * between the time RAR[0] gets clobbered and the time it
735          * gets fixed, the actual LAA is in one of the RARs and no
736          * incoming packets directed to this port are dropped.
737          * Eventually the LAA will be in RAR[0] and RAR[14].
738          */
739         e1000_rar_set(hw, hw->mac_addr, E1000_RAR_ENTRIES - 1);
740     }
741 
742     /* If MWI was previously enabled, reenable it. */
743     if (hw->mac_type == e1000_82542_rev2_0) {
744         if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
745             e1000_pci_set_mwi(hw);
746     }
747 
748     if (hw->mac_type == e1000_ich8lan) {
749         uint32_t kab = E1000_READ_REG(hw, KABGTXD);
750         kab |= E1000_KABGTXD_BGSQLBIAS;
751         E1000_WRITE_REG(hw, KABGTXD, kab);
752     }
753 
754     return E1000_SUCCESS;
755 }
756 
757 /******************************************************************************
758  *
759  * Initialize a number of hardware-dependent bits
760  *
761  * hw: Struct containing variables accessed by shared code
762  *
763  * This function contains hardware limitation workarounds for PCI-E adapters
764  *
765  *****************************************************************************/
766 static void
e1000_initialize_hardware_bits(struct e1000_hw * hw)767 e1000_initialize_hardware_bits(struct e1000_hw *hw)
768 {
769     if ((hw->mac_type >= e1000_82571 && hw->mac_type < e1000_82576) &&
770         (!hw->initialize_hw_bits_disable)) {
771         /* Settings common to all PCI-express silicon */
772         uint32_t reg_ctrl, reg_ctrl_ext;
773         uint32_t reg_tarc0, reg_tarc1;
774         uint32_t reg_tctl;
775         uint32_t reg_txdctl, reg_txdctl1;
776 
777         /* link autonegotiation/sync workarounds */
778         reg_tarc0 = E1000_READ_REG(hw, TARC0);
779         reg_tarc0 &= ~((1 << 30)|(1 << 29)|(1 << 28)|(1 << 27));
780 
781         /* Enable not-done TX descriptor counting */
782         reg_txdctl = E1000_READ_REG(hw, TXDCTL);
783         reg_txdctl |= E1000_TXDCTL_COUNT_DESC;
784         E1000_WRITE_REG(hw, TXDCTL, reg_txdctl);
785         reg_txdctl1 = E1000_READ_REG(hw, TXDCTL1);
786         reg_txdctl1 |= E1000_TXDCTL_COUNT_DESC;
787         E1000_WRITE_REG(hw, TXDCTL1, reg_txdctl1);
788 
789         switch (hw->mac_type) {
790             case e1000_82571:
791             case e1000_82572:
792                 /* Clear PHY TX compatible mode bits */
793                 reg_tarc1 = E1000_READ_REG(hw, TARC1);
794                 reg_tarc1 &= ~((1 << 30)|(1 << 29));
795 
796                 /* link autonegotiation/sync workarounds */
797                 reg_tarc0 |= ((1 << 26)|(1 << 25)|(1 << 24)|(1 << 23));
798 
799                 /* TX ring control fixes */
800                 reg_tarc1 |= ((1 << 26)|(1 << 25)|(1 << 24));
801 
802                 /* Multiple read bit is reversed polarity */
803                 reg_tctl = E1000_READ_REG(hw, TCTL);
804                 if (reg_tctl & E1000_TCTL_MULR)
805                     reg_tarc1 &= ~(1 << 28);
806                 else
807                     reg_tarc1 |= (1 << 28);
808 
809                 E1000_WRITE_REG(hw, TARC1, reg_tarc1);
810                 break;
811             case e1000_82573:
812                 reg_ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
813                 reg_ctrl_ext &= ~(1 << 23);
814                 reg_ctrl_ext |= (1 << 22);
815 
816                 /* TX byte count fix */
817                 reg_ctrl = E1000_READ_REG(hw, CTRL);
818                 reg_ctrl &= ~(1 << 29);
819 
820                 E1000_WRITE_REG(hw, CTRL_EXT, reg_ctrl_ext);
821                 E1000_WRITE_REG(hw, CTRL, reg_ctrl);
822                 break;
823             case e1000_80003es2lan:
824                 /* improve small packet performace for fiber/serdes */
825                 if ((hw->media_type == e1000_media_type_fiber) ||
826                     (hw->media_type == e1000_media_type_internal_serdes)) {
827                     reg_tarc0 &= ~(1 << 20);
828                 }
829 
830                 /* Multiple read bit is reversed polarity */
831                 reg_tctl = E1000_READ_REG(hw, TCTL);
832                 reg_tarc1 = E1000_READ_REG(hw, TARC1);
833                 if (reg_tctl & E1000_TCTL_MULR)
834                     reg_tarc1 &= ~(1 << 28);
835                 else
836                     reg_tarc1 |= (1 << 28);
837 
838                 E1000_WRITE_REG(hw, TARC1, reg_tarc1);
839                 break;
840             case e1000_ich8lan:
841                 /* Reduce concurrent DMA requests to 3 from 4 */
842                 if ((hw->revision_id < 3) ||
843                     ((hw->device_id != E1000_DEV_ID_ICH8_IGP_M_AMT) &&
844                      (hw->device_id != E1000_DEV_ID_ICH8_IGP_M)))
845                     reg_tarc0 |= ((1 << 29)|(1 << 28));
846 
847                 reg_ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
848                 reg_ctrl_ext |= (1 << 22);
849                 E1000_WRITE_REG(hw, CTRL_EXT, reg_ctrl_ext);
850 
851                 /* workaround TX hang with TSO=on */
852                 reg_tarc0 |= ((1 << 27)|(1 << 26)|(1 << 24)|(1 << 23));
853 
854                 /* Multiple read bit is reversed polarity */
855                 reg_tctl = E1000_READ_REG(hw, TCTL);
856                 reg_tarc1 = E1000_READ_REG(hw, TARC1);
857                 if (reg_tctl & E1000_TCTL_MULR)
858                     reg_tarc1 &= ~(1 << 28);
859                 else
860                     reg_tarc1 |= (1 << 28);
861 
862                 /* workaround TX hang with TSO=on */
863                 reg_tarc1 |= ((1 << 30)|(1 << 26)|(1 << 24));
864 
865                 E1000_WRITE_REG(hw, TARC1, reg_tarc1);
866                 break;
867             default:
868                 break;
869         }
870 
871         E1000_WRITE_REG(hw, TARC0, reg_tarc0);
872     }
873 }
874 
875 /******************************************************************************
876  * Performs basic configuration of the adapter.
877  *
878  * hw - Struct containing variables accessed by shared code
879  *
880  * Assumes that the controller has previously been reset and is in a
881  * post-reset uninitialized state. Initializes the receive address registers,
882  * multicast table, and VLAN filter table. Calls routines to setup link
883  * configuration and flow control settings. Clears all on-chip counters. Leaves
884  * the transmit and receive units disabled and uninitialized.
885  *****************************************************************************/
886 int32_t
e1000_init_hw(struct e1000_hw * hw)887 e1000_init_hw(struct e1000_hw *hw)
888 {
889     uint32_t ctrl;
890     uint32_t i;
891     int32_t ret_val;
892     uint16_t pcix_cmd_word;
893     uint16_t pcix_stat_hi_word;
894     uint16_t cmd_mmrbc;
895     uint16_t stat_mmrbc;
896     uint32_t mta_size;
897     uint32_t reg_data;
898     uint32_t ctrl_ext;
899 
900     DEBUGFUNC("e1000_init_hw");
901 
902     /* force full DMA clock frequency for 10/100 on ICH8 A0-B0 */
903     if ((hw->mac_type == e1000_ich8lan) &&
904         ((hw->revision_id < 3) ||
905          ((hw->device_id != E1000_DEV_ID_ICH8_IGP_M_AMT) &&
906           (hw->device_id != E1000_DEV_ID_ICH8_IGP_M)))) {
907             reg_data = E1000_READ_REG(hw, STATUS);
908             reg_data &= ~0x80000000;
909             E1000_WRITE_REG(hw, STATUS, reg_data);
910     }
911 
912     /* Initialize Identification LED */
913     ret_val = e1000_id_led_init(hw);
914     if (ret_val) {
915         DEBUGOUT("Error Initializing Identification LED\n");
916         return ret_val;
917     }
918 
919     /* Set the media type and TBI compatibility */
920     e1000_set_media_type(hw);
921 
922     /* Must be called after e1000_set_media_type because media_type is used */
923     e1000_initialize_hardware_bits(hw);
924 
925     /* Disabling VLAN filtering. */
926     DEBUGOUT("Initializing the IEEE VLAN\n");
927     switch (hw->mac_type) {
928     case e1000_ich8lan:
929         /* VET hardcoded to standard value and VFTA removed in ICH8 LAN */
930         break;
931     case e1000_82576:
932         /* There is no need to clear vfta on 82576 if VLANs are not used.
933          * - Intel® 82576 Gigabit Ethernet Controller Datasheet r2.41
934          *   Section 8.10.19 Table Array - VFTA
935          *
936          * Setting VET may also be unnecessary, however the documentation
937          * isn't specific on this point. The value used here is as advised in
938 	 * - Intel® 82576 Gigabit Ethernet Controller Datasheet r2.41
939          *   Section 8.2.7 VLAN Ether Type - VET
940          */
941         E1000_WRITE_REG(hw, VET, ETHERNET_IEEE_VLAN_TYPE);
942         break;
943     default:
944         if (hw->mac_type < e1000_82545_rev_3)
945             E1000_WRITE_REG(hw, VET, 0);
946         e1000_clear_vfta(hw);
947         break;
948     }
949 
950     /* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
951     if (hw->mac_type == e1000_82542_rev2_0) {
952         DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
953         e1000_pci_clear_mwi(hw);
954         E1000_WRITE_REG(hw, RCTL, E1000_RCTL_RST);
955         E1000_WRITE_FLUSH(hw);
956         msleep(5);
957     }
958 
959     /* Setup the receive address. This involves initializing all of the Receive
960      * Address Registers (RARs 0 - 15).
961      */
962     e1000_init_rx_addrs(hw);
963 
964     /* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
965     if (hw->mac_type == e1000_82542_rev2_0) {
966         E1000_WRITE_REG(hw, RCTL, 0);
967         E1000_WRITE_FLUSH(hw);
968         msleep(1);
969         if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
970             e1000_pci_set_mwi(hw);
971     }
972 
973     /* Zero out the Multicast HASH table */
974     DEBUGOUT("Zeroing the MTA\n");
975     mta_size = E1000_MC_TBL_SIZE;
976     if (hw->mac_type == e1000_ich8lan)
977         mta_size = E1000_MC_TBL_SIZE_ICH8LAN;
978     for (i = 0; i < mta_size; i++) {
979         E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
980         /* use write flush to prevent Memory Write Block (MWB) from
981          * occuring when accessing our register space */
982         E1000_WRITE_FLUSH(hw);
983     }
984 
985     /* Set the PCI priority bit correctly in the CTRL register.  This
986      * determines if the adapter gives priority to receives, or if it
987      * gives equal priority to transmits and receives.  Valid only on
988      * 82542 and 82543 silicon.
989      */
990     if (hw->dma_fairness && hw->mac_type <= e1000_82543) {
991         ctrl = E1000_READ_REG(hw, CTRL);
992         E1000_WRITE_REG(hw, CTRL, ctrl | E1000_CTRL_PRIOR);
993     }
994 
995     switch (hw->mac_type) {
996     case e1000_82545_rev_3:
997     case e1000_82546_rev_3:
998         break;
999     default:
1000         /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */
1001         if (hw->bus_type == e1000_bus_type_pcix) {
1002             e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word);
1003             e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI,
1004                 &pcix_stat_hi_word);
1005             cmd_mmrbc = (pcix_cmd_word & PCIX_COMMAND_MMRBC_MASK) >>
1006                 PCIX_COMMAND_MMRBC_SHIFT;
1007             stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >>
1008                 PCIX_STATUS_HI_MMRBC_SHIFT;
1009             if (stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K)
1010                 stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K;
1011             if (cmd_mmrbc > stat_mmrbc) {
1012                 pcix_cmd_word &= ~PCIX_COMMAND_MMRBC_MASK;
1013                 pcix_cmd_word |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT;
1014                 e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER,
1015                     &pcix_cmd_word);
1016             }
1017         }
1018         break;
1019     }
1020 
1021     /* More time needed for PHY to initialize */
1022     if (hw->mac_type == e1000_ich8lan)
1023         msleep(15);
1024 
1025     /* Call a subroutine to configure the link and setup flow control. */
1026     ret_val = e1000_setup_link(hw);
1027 
1028     /* Set the transmit descriptor write-back policy */
1029     if (hw->mac_type > e1000_82544) {
1030         ctrl = E1000_READ_REG(hw, TXDCTL);
1031         ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
1032         E1000_WRITE_REG(hw, TXDCTL, ctrl);
1033     }
1034 
1035     if (hw->mac_type == e1000_82573) {
1036         e1000_enable_tx_pkt_filtering(hw);
1037     }
1038 
1039     switch (hw->mac_type) {
1040     default:
1041         break;
1042     case e1000_80003es2lan:
1043         /* Enable retransmit on late collisions */
1044         reg_data = E1000_READ_REG(hw, TCTL);
1045         reg_data |= E1000_TCTL_RTLC;
1046         E1000_WRITE_REG(hw, TCTL, reg_data);
1047 
1048         /* Configure Gigabit Carry Extend Padding */
1049         reg_data = E1000_READ_REG(hw, TCTL_EXT);
1050         reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
1051         reg_data |= DEFAULT_80003ES2LAN_TCTL_EXT_GCEX;
1052         E1000_WRITE_REG(hw, TCTL_EXT, reg_data);
1053 
1054         /* Configure Transmit Inter-Packet Gap */
1055         reg_data = E1000_READ_REG(hw, TIPG);
1056         reg_data &= ~E1000_TIPG_IPGT_MASK;
1057         reg_data |= DEFAULT_80003ES2LAN_TIPG_IPGT_1000;
1058         E1000_WRITE_REG(hw, TIPG, reg_data);
1059 
1060         reg_data = E1000_READ_REG_ARRAY(hw, FFLT, 0x0001);
1061         reg_data &= ~0x00100000;
1062         E1000_WRITE_REG_ARRAY(hw, FFLT, 0x0001, reg_data);
1063         /* Fall through */
1064     case e1000_82571:
1065     case e1000_82572:
1066     case e1000_ich8lan:
1067         ctrl = E1000_READ_REG(hw, TXDCTL1);
1068         ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
1069         E1000_WRITE_REG(hw, TXDCTL1, ctrl);
1070         break;
1071     }
1072 
1073 
1074     if (hw->mac_type == e1000_82573) {
1075         uint32_t gcr = E1000_READ_REG(hw, GCR);
1076         gcr |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1077         E1000_WRITE_REG(hw, GCR, gcr);
1078     }
1079 
1080     /* Clear all of the statistics registers (clear on read).  It is
1081      * important that we do this after we have tried to establish link
1082      * because the symbol error count will increment wildly if there
1083      * is no link.
1084      */
1085     e1000_clear_hw_cntrs(hw);
1086 
1087     /* ICH8 No-snoop bits are opposite polarity.
1088      * Set to snoop by default after reset. */
1089     if (hw->mac_type == e1000_ich8lan)
1090         e1000_set_pci_ex_no_snoop(hw, PCI_EX_82566_SNOOP_ALL);
1091 
1092     if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER ||
1093         hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) {
1094         ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
1095         /* Relaxed ordering must be disabled to avoid a parity
1096          * error crash in a PCI slot. */
1097         ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
1098         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
1099     }
1100 
1101     return ret_val;
1102 }
1103 
1104 /******************************************************************************
1105  * Adjust SERDES output amplitude based on EEPROM setting.
1106  *
1107  * hw - Struct containing variables accessed by shared code.
1108  *****************************************************************************/
1109 static int32_t
e1000_adjust_serdes_amplitude(struct e1000_hw * hw)1110 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
1111 {
1112     uint16_t eeprom_data;
1113     int32_t  ret_val;
1114 
1115     DEBUGFUNC("e1000_adjust_serdes_amplitude");
1116 
1117     if (hw->media_type != e1000_media_type_internal_serdes)
1118         return E1000_SUCCESS;
1119 
1120     switch (hw->mac_type) {
1121     case e1000_82545_rev_3:
1122     case e1000_82546_rev_3:
1123         break;
1124     default:
1125         return E1000_SUCCESS;
1126     }
1127 
1128     ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1, &eeprom_data);
1129     if (ret_val) {
1130         return ret_val;
1131     }
1132 
1133     if (eeprom_data != EEPROM_RESERVED_WORD) {
1134         /* Adjust SERDES output amplitude only. */
1135         eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK;
1136         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, eeprom_data);
1137         if (ret_val)
1138             return ret_val;
1139     }
1140 
1141     return E1000_SUCCESS;
1142 }
1143 
1144 /******************************************************************************
1145  * Configures flow control and link settings.
1146  *
1147  * hw - Struct containing variables accessed by shared code
1148  *
1149  * Determines which flow control settings to use. Calls the apropriate media-
1150  * specific link configuration function. Configures the flow control settings.
1151  * Assuming the adapter has a valid link partner, a valid link should be
1152  * established. Assumes the hardware has previously been reset and the
1153  * transmitter and receiver are not enabled.
1154  *****************************************************************************/
1155 int32_t
e1000_setup_link(struct e1000_hw * hw)1156 e1000_setup_link(struct e1000_hw *hw)
1157 {
1158     uint32_t ctrl_ext;
1159     int32_t ret_val;
1160     uint16_t eeprom_data;
1161 
1162     DEBUGFUNC("e1000_setup_link");
1163 
1164     /* In the case of the phy reset being blocked, we already have a link.
1165      * We do not have to set it up again. */
1166     if (e1000_check_phy_reset_block(hw))
1167         return E1000_SUCCESS;
1168 
1169     /* Read and store word 0x0F of the EEPROM. This word contains bits
1170      * that determine the hardware's default PAUSE (flow control) mode,
1171      * a bit that determines whether the HW defaults to enabling or
1172      * disabling auto-negotiation, and the direction of the
1173      * SW defined pins. If there is no SW over-ride of the flow
1174      * control setting, then the variable hw->fc will
1175      * be initialized based on a value in the EEPROM.
1176      */
1177     if (hw->fc == E1000_FC_DEFAULT) {
1178         switch (hw->mac_type) {
1179         case e1000_ich8lan:
1180         case e1000_82573:
1181             hw->fc = E1000_FC_FULL;
1182             break;
1183         default:
1184             ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
1185                                         1, &eeprom_data);
1186             if (ret_val) {
1187                 DEBUGOUT("EEPROM Read Error\n");
1188                 return -E1000_ERR_EEPROM;
1189             }
1190             if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
1191                 hw->fc = E1000_FC_NONE;
1192             else if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) ==
1193                     EEPROM_WORD0F_ASM_DIR)
1194                 hw->fc = E1000_FC_TX_PAUSE;
1195             else
1196                 hw->fc = E1000_FC_FULL;
1197             break;
1198         }
1199     }
1200 
1201     /* We want to save off the original Flow Control configuration just
1202      * in case we get disconnected and then reconnected into a different
1203      * hub or switch with different Flow Control capabilities.
1204      */
1205     if (hw->mac_type == e1000_82542_rev2_0)
1206         hw->fc &= (~E1000_FC_TX_PAUSE);
1207 
1208     if ((hw->mac_type < e1000_82543) && (hw->report_tx_early == 1))
1209         hw->fc &= (~E1000_FC_RX_PAUSE);
1210 
1211     hw->original_fc = hw->fc;
1212 
1213     DEBUGOUT1("After fix-ups FlowControl is now = %x\n", hw->fc);
1214 
1215     /* Take the 4 bits from EEPROM word 0x0F that determine the initial
1216      * polarity value for the SW controlled pins, and setup the
1217      * Extended Device Control reg with that info.
1218      * This is needed because one of the SW controlled pins is used for
1219      * signal detection.  So this should be done before e1000_setup_pcs_link()
1220      * or e1000_phy_setup() is called.
1221      */
1222     if (hw->mac_type == e1000_82543) {
1223         ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
1224                                     1, &eeprom_data);
1225         if (ret_val) {
1226             DEBUGOUT("EEPROM Read Error\n");
1227             return -E1000_ERR_EEPROM;
1228         }
1229         ctrl_ext = ((eeprom_data & EEPROM_WORD0F_SWPDIO_EXT) <<
1230                     SWDPIO__EXT_SHIFT);
1231         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
1232     }
1233 
1234     /* Call the necessary subroutine to configure the link. */
1235     ret_val = (hw->media_type == e1000_media_type_copper) ?
1236               e1000_setup_copper_link(hw) :
1237               e1000_setup_fiber_serdes_link(hw);
1238 
1239     /* Initialize the flow control address, type, and PAUSE timer
1240      * registers to their default values.  This is done even if flow
1241      * control is disabled, because it does not hurt anything to
1242      * initialize these registers.
1243      */
1244     DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
1245 
1246     /* FCAL/H and FCT are hardcoded to standard values in e1000_ich8lan. */
1247     if (hw->mac_type != e1000_ich8lan) {
1248         E1000_WRITE_REG(hw, FCT, FLOW_CONTROL_TYPE);
1249         E1000_WRITE_REG(hw, FCAH, FLOW_CONTROL_ADDRESS_HIGH);
1250         E1000_WRITE_REG(hw, FCAL, FLOW_CONTROL_ADDRESS_LOW);
1251     }
1252 
1253     E1000_WRITE_REG(hw, FCTTV, hw->fc_pause_time);
1254 
1255     /* Set the flow control receive threshold registers.  Normally,
1256      * these registers will be set to a default threshold that may be
1257      * adjusted later by the driver's runtime code.  However, if the
1258      * ability to transmit pause frames in not enabled, then these
1259      * registers will be set to 0.
1260      */
1261     if (!(hw->fc & E1000_FC_TX_PAUSE)) {
1262         E1000_WRITE_REG(hw, FCRTL, 0);
1263         E1000_WRITE_REG(hw, FCRTH, 0);
1264     } else {
1265         /* We need to set up the Receive Threshold high and low water marks
1266          * as well as (optionally) enabling the transmission of XON frames.
1267          */
1268         if (hw->fc_send_xon) {
1269             E1000_WRITE_REG(hw, FCRTL, (hw->fc_low_water | E1000_FCRTL_XONE));
1270             E1000_WRITE_REG(hw, FCRTH, hw->fc_high_water);
1271         } else {
1272             E1000_WRITE_REG(hw, FCRTL, hw->fc_low_water);
1273             E1000_WRITE_REG(hw, FCRTH, hw->fc_high_water);
1274         }
1275     }
1276     return ret_val;
1277 }
1278 
1279 /******************************************************************************
1280  * Sets up link for a fiber based or serdes based adapter
1281  *
1282  * hw - Struct containing variables accessed by shared code
1283  *
1284  * Manipulates Physical Coding Sublayer functions in order to configure
1285  * link. Assumes the hardware has been previously reset and the transmitter
1286  * and receiver are not enabled.
1287  *****************************************************************************/
1288 static int32_t
e1000_setup_fiber_serdes_link(struct e1000_hw * hw)1289 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
1290 {
1291     uint32_t ctrl;
1292     uint32_t status;
1293     uint32_t txcw = 0;
1294     uint32_t i;
1295     uint32_t signal = 0;
1296     int32_t ret_val;
1297 
1298     DEBUGFUNC("e1000_setup_fiber_serdes_link");
1299 
1300     /* On 82571 and 82572 Fiber connections, SerDes loopback mode persists
1301      * until explicitly turned off or a power cycle is performed.  A read to
1302      * the register does not indicate its status.  Therefore, we ensure
1303      * loopback mode is disabled during initialization.
1304      */
1305     if (hw->mac_type == e1000_82571 || hw->mac_type == e1000_82572)
1306         E1000_WRITE_REG(hw, SCTL, E1000_DISABLE_SERDES_LOOPBACK);
1307 
1308     /* On adapters with a MAC newer than 82544, SWDP 1 will be
1309      * set when the optics detect a signal. On older adapters, it will be
1310      * cleared when there is a signal.  This applies to fiber media only.
1311      * If we're on serdes media, adjust the output amplitude to value
1312      * set in the EEPROM.
1313      */
1314     ctrl = E1000_READ_REG(hw, CTRL);
1315     if (hw->media_type == e1000_media_type_fiber)
1316         signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
1317 
1318     ret_val = e1000_adjust_serdes_amplitude(hw);
1319     if (ret_val)
1320         return ret_val;
1321 
1322     /* Take the link out of reset */
1323     ctrl &= ~(E1000_CTRL_LRST);
1324 
1325     /* Adjust VCO speed to improve BER performance */
1326     ret_val = e1000_set_vco_speed(hw);
1327     if (ret_val)
1328         return ret_val;
1329 
1330     e1000_config_collision_dist(hw);
1331 
1332     /* Check for a software override of the flow control settings, and setup
1333      * the device accordingly.  If auto-negotiation is enabled, then software
1334      * will have to set the "PAUSE" bits to the correct value in the Tranmsit
1335      * Config Word Register (TXCW) and re-start auto-negotiation.  However, if
1336      * auto-negotiation is disabled, then software will have to manually
1337      * configure the two flow control enable bits in the CTRL register.
1338      *
1339      * The possible values of the "fc" parameter are:
1340      *      0:  Flow control is completely disabled
1341      *      1:  Rx flow control is enabled (we can receive pause frames, but
1342      *          not send pause frames).
1343      *      2:  Tx flow control is enabled (we can send pause frames but we do
1344      *          not support receiving pause frames).
1345      *      3:  Both Rx and TX flow control (symmetric) are enabled.
1346      */
1347     switch (hw->fc) {
1348     case E1000_FC_NONE:
1349         /* Flow control is completely disabled by a software over-ride. */
1350         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
1351         break;
1352     case E1000_FC_RX_PAUSE:
1353         /* RX Flow control is enabled and TX Flow control is disabled by a
1354          * software over-ride. Since there really isn't a way to advertise
1355          * that we are capable of RX Pause ONLY, we will advertise that we
1356          * support both symmetric and asymmetric RX PAUSE. Later, we will
1357          *  disable the adapter's ability to send PAUSE frames.
1358          */
1359         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1360         break;
1361     case E1000_FC_TX_PAUSE:
1362         /* TX Flow control is enabled, and RX Flow control is disabled, by a
1363          * software over-ride.
1364          */
1365         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
1366         break;
1367     case E1000_FC_FULL:
1368         /* Flow control (both RX and TX) is enabled by a software over-ride. */
1369         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1370         break;
1371     default:
1372         DEBUGOUT("Flow control param set incorrectly\n");
1373         return -E1000_ERR_CONFIG;
1374         break;
1375     }
1376 
1377     /* Since auto-negotiation is enabled, take the link out of reset (the link
1378      * will be in reset, because we previously reset the chip). This will
1379      * restart auto-negotiation.  If auto-neogtiation is successful then the
1380      * link-up status bit will be set and the flow control enable bits (RFCE
1381      * and TFCE) will be set according to their negotiated value.
1382      */
1383     DEBUGOUT("Auto-negotiation enabled\n");
1384 
1385     E1000_WRITE_REG(hw, TXCW, txcw);
1386     E1000_WRITE_REG(hw, CTRL, ctrl);
1387     E1000_WRITE_FLUSH(hw);
1388 
1389     hw->txcw = txcw;
1390     msleep(1);
1391 
1392     /* If we have a signal (the cable is plugged in) then poll for a "Link-Up"
1393      * indication in the Device Status Register.  Time-out if a link isn't
1394      * seen in 500 milliseconds seconds (Auto-negotiation should complete in
1395      * less than 500 milliseconds even if the other end is doing it in SW).
1396      * For internal serdes, we just assume a signal is present, then poll.
1397      */
1398     if (hw->media_type == e1000_media_type_internal_serdes ||
1399        (E1000_READ_REG(hw, CTRL) & E1000_CTRL_SWDPIN1) == signal) {
1400         DEBUGOUT("Looking for Link\n");
1401         for (i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
1402             msleep(10);
1403             status = E1000_READ_REG(hw, STATUS);
1404             if (status & E1000_STATUS_LU) break;
1405         }
1406         if (i == (LINK_UP_TIMEOUT / 10)) {
1407             DEBUGOUT("Never got a valid link from auto-neg!!!\n");
1408             hw->autoneg_failed = 1;
1409             /* AutoNeg failed to achieve a link, so we'll call
1410              * e1000_check_for_link. This routine will force the link up if
1411              * we detect a signal. This will allow us to communicate with
1412              * non-autonegotiating link partners.
1413              */
1414             ret_val = e1000_check_for_link(hw);
1415             if (ret_val) {
1416                 DEBUGOUT("Error while checking for link\n");
1417                 return ret_val;
1418             }
1419             hw->autoneg_failed = 0;
1420         } else {
1421             hw->autoneg_failed = 0;
1422             DEBUGOUT("Valid Link Found\n");
1423         }
1424     } else {
1425         DEBUGOUT("No Signal Detected\n");
1426     }
1427     return E1000_SUCCESS;
1428 }
1429 
1430 /******************************************************************************
1431 * Make sure we have a valid PHY and change PHY mode before link setup.
1432 *
1433 * hw - Struct containing variables accessed by shared code
1434 ******************************************************************************/
1435 static int32_t
e1000_copper_link_preconfig(struct e1000_hw * hw)1436 e1000_copper_link_preconfig(struct e1000_hw *hw)
1437 {
1438     uint32_t ctrl;
1439     int32_t ret_val;
1440     uint16_t phy_data;
1441 
1442     DEBUGFUNC("e1000_copper_link_preconfig");
1443 
1444     ctrl = E1000_READ_REG(hw, CTRL);
1445     /* With 82543, we need to force speed and duplex on the MAC equal to what
1446      * the PHY speed and duplex configuration is. In addition, we need to
1447      * perform a hardware reset on the PHY to take it out of reset.
1448      */
1449     if (hw->mac_type > e1000_82543) {
1450         ctrl |= E1000_CTRL_SLU;
1451         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1452         E1000_WRITE_REG(hw, CTRL, ctrl);
1453     } else {
1454         ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_SLU);
1455         E1000_WRITE_REG(hw, CTRL, ctrl);
1456         ret_val = e1000_phy_hw_reset(hw);
1457         if (ret_val)
1458             return ret_val;
1459     }
1460 
1461     /* Make sure we have a valid PHY */
1462     ret_val = e1000_detect_gig_phy(hw);
1463     if (ret_val) {
1464         DEBUGOUT("Error, did not detect valid phy.\n");
1465         return ret_val;
1466     }
1467     DEBUGOUT1("Phy ID = %#08x \n", hw->phy_id);
1468 
1469     /* Set PHY to class A mode (if necessary) */
1470     ret_val = e1000_set_phy_mode(hw);
1471     if (ret_val)
1472         return ret_val;
1473 
1474     if ((hw->mac_type == e1000_82545_rev_3) ||
1475        (hw->mac_type == e1000_82546_rev_3)) {
1476         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1477         phy_data |= 0x00000008;
1478         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1479     }
1480 
1481     if (hw->mac_type <= e1000_82543 ||
1482         hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 ||
1483         hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2)
1484         hw->phy_reset_disable = FALSE;
1485 
1486    return E1000_SUCCESS;
1487 }
1488 
1489 
1490 /********************************************************************
1491 * Copper link setup for e1000_phy_igp series.
1492 *
1493 * hw - Struct containing variables accessed by shared code
1494 *********************************************************************/
1495 static int32_t
e1000_copper_link_igp_setup(struct e1000_hw * hw)1496 e1000_copper_link_igp_setup(struct e1000_hw *hw)
1497 {
1498     uint32_t led_ctrl;
1499     int32_t ret_val;
1500     uint16_t phy_data;
1501 
1502     DEBUGFUNC("e1000_copper_link_igp_setup");
1503 
1504     if (hw->phy_reset_disable)
1505         return E1000_SUCCESS;
1506 
1507     ret_val = e1000_phy_reset(hw);
1508     if (ret_val) {
1509         DEBUGOUT("Error Resetting the PHY\n");
1510         return ret_val;
1511     }
1512 
1513     /*
1514      * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
1515      * timeout issues when LFS is enabled.
1516      */
1517     msleep(100);
1518 
1519     if (hw->mac_type != e1000_ich8lan && hw->mac_type != e1000_82576) {
1520     /* Configure activity LED after PHY reset */
1521     led_ctrl = E1000_READ_REG(hw, LEDCTL);
1522     led_ctrl &= IGP_ACTIVITY_LED_MASK;
1523     led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
1524     E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
1525     }
1526 
1527     /* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */
1528     if (hw->phy_type == e1000_phy_igp) {
1529         /* disable lplu d3 during driver init */
1530         ret_val = e1000_set_d3_lplu_state(hw, FALSE);
1531         if (ret_val) {
1532             DEBUGOUT("Error Disabling LPLU D3\n");
1533             return ret_val;
1534         }
1535     }
1536 
1537     /* disable lplu d0 during driver init */
1538     ret_val = e1000_set_d0_lplu_state(hw, FALSE);
1539     if (ret_val) {
1540         DEBUGOUT("Error Disabling LPLU D0\n");
1541         return ret_val;
1542     }
1543     /* Configure mdi-mdix settings */
1544     ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1545     if (ret_val)
1546         return ret_val;
1547 
1548     if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
1549         hw->dsp_config_state = e1000_dsp_config_disabled;
1550         /* Force MDI for earlier revs of the IGP PHY */
1551         phy_data &= ~(IGP01E1000_PSCR_AUTO_MDIX | IGP01E1000_PSCR_FORCE_MDI_MDIX);
1552         hw->mdix = 1;
1553 
1554     } else {
1555         hw->dsp_config_state = e1000_dsp_config_enabled;
1556         phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1557 
1558         switch (hw->mdix) {
1559         case 1:
1560             phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1561             break;
1562         case 2:
1563             phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
1564             break;
1565         case 0:
1566         default:
1567             phy_data |= IGP01E1000_PSCR_AUTO_MDIX;
1568             break;
1569         }
1570     }
1571     ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1572     if (ret_val)
1573         return ret_val;
1574 
1575     /* set auto-master slave resolution settings */
1576     if (hw->autoneg) {
1577         e1000_ms_type phy_ms_setting = hw->master_slave;
1578 
1579         if (hw->ffe_config_state == e1000_ffe_config_active)
1580             hw->ffe_config_state = e1000_ffe_config_enabled;
1581 
1582         if (hw->dsp_config_state == e1000_dsp_config_activated)
1583             hw->dsp_config_state = e1000_dsp_config_enabled;
1584 
1585         /* when autonegotiation advertisment is only 1000Mbps then we
1586           * should disable SmartSpeed and enable Auto MasterSlave
1587           * resolution as hardware default. */
1588         if (hw->autoneg_advertised == ADVERTISE_1000_FULL) {
1589             /* Disable SmartSpeed */
1590             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1591                                          &phy_data);
1592             if (ret_val)
1593                 return ret_val;
1594             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1595             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1596                                           phy_data);
1597             if (ret_val)
1598                 return ret_val;
1599             /* Set auto Master/Slave resolution process */
1600             ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1601             if (ret_val)
1602                 return ret_val;
1603             phy_data &= ~CR_1000T_MS_ENABLE;
1604             ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1605             if (ret_val)
1606                 return ret_val;
1607         }
1608 
1609         ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1610         if (ret_val)
1611             return ret_val;
1612 
1613         /* load defaults for future use */
1614         hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ?
1615                                         ((phy_data & CR_1000T_MS_VALUE) ?
1616                                          e1000_ms_force_master :
1617                                          e1000_ms_force_slave) :
1618                                          e1000_ms_auto;
1619 
1620         switch (phy_ms_setting) {
1621         case e1000_ms_force_master:
1622             phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
1623             break;
1624         case e1000_ms_force_slave:
1625             phy_data |= CR_1000T_MS_ENABLE;
1626             phy_data &= ~(CR_1000T_MS_VALUE);
1627             break;
1628         case e1000_ms_auto:
1629             phy_data &= ~CR_1000T_MS_ENABLE;
1630             default:
1631             break;
1632         }
1633         ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1634         if (ret_val)
1635             return ret_val;
1636     }
1637 
1638     return E1000_SUCCESS;
1639 }
1640 
1641 /********************************************************************
1642 * Copper link setup for e1000_phy_gg82563 series.
1643 *
1644 * hw - Struct containing variables accessed by shared code
1645 *********************************************************************/
1646 static int32_t
e1000_copper_link_ggp_setup(struct e1000_hw * hw)1647 e1000_copper_link_ggp_setup(struct e1000_hw *hw)
1648 {
1649     int32_t ret_val;
1650     uint16_t phy_data;
1651     uint32_t reg_data;
1652 
1653     DEBUGFUNC("e1000_copper_link_ggp_setup");
1654 
1655     if (!hw->phy_reset_disable) {
1656 
1657         /* Enable CRS on TX for half-duplex operation. */
1658         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1659                                      &phy_data);
1660         if (ret_val)
1661             return ret_val;
1662 
1663         phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1664         /* Use 25MHz for both link down and 1000BASE-T for Tx clock */
1665         phy_data |= GG82563_MSCR_TX_CLK_1000MBPS_25MHZ;
1666 
1667         ret_val = e1000_write_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1668                                       phy_data);
1669         if (ret_val)
1670             return ret_val;
1671 
1672         /* Options:
1673          *   MDI/MDI-X = 0 (default)
1674          *   0 - Auto for all speeds
1675          *   1 - MDI mode
1676          *   2 - MDI-X mode
1677          *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1678          */
1679         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_SPEC_CTRL, &phy_data);
1680         if (ret_val)
1681             return ret_val;
1682 
1683         phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1684 
1685         switch (hw->mdix) {
1686         case 1:
1687             phy_data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1688             break;
1689         case 2:
1690             phy_data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1691             break;
1692         case 0:
1693         default:
1694             phy_data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1695             break;
1696         }
1697 
1698         /* Options:
1699          *   disable_polarity_correction = 0 (default)
1700          *       Automatic Correction for Reversed Cable Polarity
1701          *   0 - Disabled
1702          *   1 - Enabled
1703          */
1704         phy_data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1705         if (hw->disable_polarity_correction == 1)
1706             phy_data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1707         ret_val = e1000_write_phy_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
1708 
1709         if (ret_val)
1710             return ret_val;
1711 
1712         /* SW Reset the PHY so all changes take effect */
1713         ret_val = e1000_phy_reset(hw);
1714         if (ret_val) {
1715             DEBUGOUT("Error Resetting the PHY\n");
1716             return ret_val;
1717         }
1718     } /* phy_reset_disable */
1719 
1720     if (hw->mac_type == e1000_80003es2lan) {
1721         /* Bypass RX and TX FIFO's */
1722         ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_FIFO_CTRL,
1723                                        E1000_KUMCTRLSTA_FIFO_CTRL_RX_BYPASS |
1724                                        E1000_KUMCTRLSTA_FIFO_CTRL_TX_BYPASS);
1725         if (ret_val)
1726             return ret_val;
1727 
1728         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_SPEC_CTRL_2, &phy_data);
1729         if (ret_val)
1730             return ret_val;
1731 
1732         phy_data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1733         ret_val = e1000_write_phy_reg(hw, GG82563_PHY_SPEC_CTRL_2, phy_data);
1734 
1735         if (ret_val)
1736             return ret_val;
1737 
1738         reg_data = E1000_READ_REG(hw, CTRL_EXT);
1739         reg_data &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1740         E1000_WRITE_REG(hw, CTRL_EXT, reg_data);
1741 
1742         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1743                                           &phy_data);
1744         if (ret_val)
1745             return ret_val;
1746 
1747         /* Do not init these registers when the HW is in IAMT mode, since the
1748          * firmware will have already initialized them.  We only initialize
1749          * them if the HW is not in IAMT mode.
1750          */
1751         if (e1000_check_mng_mode(hw) == FALSE) {
1752             /* Enable Electrical Idle on the PHY */
1753             phy_data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1754             ret_val = e1000_write_phy_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1755                                           phy_data);
1756             if (ret_val)
1757                 return ret_val;
1758 
1759             ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1760                                          &phy_data);
1761             if (ret_val)
1762                 return ret_val;
1763 
1764             phy_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1765             ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1766                                           phy_data);
1767 
1768             if (ret_val)
1769                 return ret_val;
1770         }
1771 
1772         /* Workaround: Disable padding in Kumeran interface in the MAC
1773          * and in the PHY to avoid CRC errors.
1774          */
1775         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_INBAND_CTRL,
1776                                      &phy_data);
1777         if (ret_val)
1778             return ret_val;
1779         phy_data |= GG82563_ICR_DIS_PADDING;
1780         ret_val = e1000_write_phy_reg(hw, GG82563_PHY_INBAND_CTRL,
1781                                       phy_data);
1782         if (ret_val)
1783             return ret_val;
1784     }
1785 
1786     return E1000_SUCCESS;
1787 }
1788 
1789 /********************************************************************
1790 * Copper link setup for e1000_phy_m88 series.
1791 *
1792 * hw - Struct containing variables accessed by shared code
1793 *********************************************************************/
1794 static int32_t
e1000_copper_link_mgp_setup(struct e1000_hw * hw)1795 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
1796 {
1797     int32_t ret_val;
1798     uint16_t phy_data;
1799 
1800     DEBUGFUNC("e1000_copper_link_mgp_setup");
1801 
1802     if (hw->phy_reset_disable)
1803         return E1000_SUCCESS;
1804 
1805     /* Enable CRS on TX. This must be set for half-duplex operation. */
1806     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1807     if (ret_val)
1808         return ret_val;
1809 
1810     phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1811 
1812     /* Options:
1813      *   MDI/MDI-X = 0 (default)
1814      *   0 - Auto for all speeds
1815      *   1 - MDI mode
1816      *   2 - MDI-X mode
1817      *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1818      */
1819     phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1820 
1821     switch (hw->mdix) {
1822     case 1:
1823         phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
1824         break;
1825     case 2:
1826         phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
1827         break;
1828     case 3:
1829         phy_data |= M88E1000_PSCR_AUTO_X_1000T;
1830         break;
1831     case 0:
1832     default:
1833         phy_data |= M88E1000_PSCR_AUTO_X_MODE;
1834         break;
1835     }
1836 
1837     /* Options:
1838      *   disable_polarity_correction = 0 (default)
1839      *       Automatic Correction for Reversed Cable Polarity
1840      *   0 - Disabled
1841      *   1 - Enabled
1842      */
1843     phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
1844     if (hw->disable_polarity_correction == 1)
1845         phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
1846     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1847     if (ret_val)
1848         return ret_val;
1849 
1850     if (hw->phy_revision < M88E1011_I_REV_4) {
1851         /* Force TX_CLK in the Extended PHY Specific Control Register
1852          * to 25MHz clock.
1853          */
1854         ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1855         if (ret_val)
1856             return ret_val;
1857 
1858         phy_data |= M88E1000_EPSCR_TX_CLK_25;
1859 
1860         if ((hw->phy_revision == E1000_REVISION_2) &&
1861             (hw->phy_id == M88E1111_I_PHY_ID)) {
1862             /* Vidalia Phy, set the downshift counter to 5x */
1863             phy_data &= ~(M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK);
1864             phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
1865             ret_val = e1000_write_phy_reg(hw,
1866                                         M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1867             if (ret_val)
1868                 return ret_val;
1869         } else {
1870             /* Configure Master and Slave downshift values */
1871             phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
1872                               M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
1873             phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
1874                              M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
1875             ret_val = e1000_write_phy_reg(hw,
1876                                         M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1877             if (ret_val)
1878                return ret_val;
1879         }
1880     }
1881 
1882     /* SW Reset the PHY so all changes take effect */
1883     ret_val = e1000_phy_reset(hw);
1884     if (ret_val) {
1885         DEBUGOUT("Error Resetting the PHY\n");
1886         return ret_val;
1887     }
1888 
1889    return E1000_SUCCESS;
1890 }
1891 
1892 /********************************************************************
1893 * Setup auto-negotiation and flow control advertisements,
1894 * and then perform auto-negotiation.
1895 *
1896 * hw - Struct containing variables accessed by shared code
1897 *********************************************************************/
1898 static int32_t
e1000_copper_link_autoneg(struct e1000_hw * hw)1899 e1000_copper_link_autoneg(struct e1000_hw *hw)
1900 {
1901     int32_t ret_val;
1902     uint16_t phy_data;
1903 
1904     DEBUGFUNC("e1000_copper_link_autoneg");
1905 
1906     /* Perform some bounds checking on the hw->autoneg_advertised
1907      * parameter.  If this variable is zero, then set it to the default.
1908      */
1909     hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT;
1910 
1911     /* If autoneg_advertised is zero, we assume it was not defaulted
1912      * by the calling code so we set to advertise full capability.
1913      */
1914     if (hw->autoneg_advertised == 0)
1915         hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
1916 
1917     /* IFE phy only supports 10/100 */
1918     if (hw->phy_type == e1000_phy_ife)
1919         hw->autoneg_advertised &= AUTONEG_ADVERTISE_10_100_ALL;
1920 
1921     DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
1922     ret_val = e1000_phy_setup_autoneg(hw);
1923     if (ret_val) {
1924         DEBUGOUT("Error Setting up Auto-Negotiation\n");
1925         return ret_val;
1926     }
1927     DEBUGOUT("Restarting Auto-Neg\n");
1928 
1929     /* Restart auto-negotiation by setting the Auto Neg Enable bit and
1930      * the Auto Neg Restart bit in the PHY control register.
1931      */
1932     ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
1933     if (ret_val)
1934         return ret_val;
1935 
1936     phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
1937     ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
1938     if (ret_val)
1939         return ret_val;
1940 
1941     /* Does the user want to wait for Auto-Neg to complete here, or
1942      * check at a later time (for example, callback routine).
1943      */
1944     if (hw->wait_autoneg_complete) {
1945         ret_val = e1000_wait_autoneg(hw);
1946         if (ret_val) {
1947             DEBUGOUT("Error while waiting for autoneg to complete\n");
1948             return ret_val;
1949         }
1950     }
1951 
1952     hw->get_link_status = TRUE;
1953 
1954     return E1000_SUCCESS;
1955 }
1956 
1957 /******************************************************************************
1958 * Config the MAC and the PHY after link is up.
1959 *   1) Set up the MAC to the current PHY speed/duplex
1960 *      if we are on 82543.  If we
1961 *      are on newer silicon, we only need to configure
1962 *      collision distance in the Transmit Control Register.
1963 *   2) Set up flow control on the MAC to that established with
1964 *      the link partner.
1965 *   3) Config DSP to improve Gigabit link quality for some PHY revisions.
1966 *
1967 * hw - Struct containing variables accessed by shared code
1968 ******************************************************************************/
1969 static int32_t
e1000_copper_link_postconfig(struct e1000_hw * hw)1970 e1000_copper_link_postconfig(struct e1000_hw *hw)
1971 {
1972     int32_t ret_val;
1973     DEBUGFUNC("e1000_copper_link_postconfig");
1974 
1975     if (hw->mac_type >= e1000_82544) {
1976         e1000_config_collision_dist(hw);
1977     } else {
1978         ret_val = e1000_config_mac_to_phy(hw);
1979         if (ret_val) {
1980             DEBUGOUT("Error configuring MAC to PHY settings\n");
1981             return ret_val;
1982         }
1983     }
1984     ret_val = e1000_config_fc_after_link_up(hw);
1985     if (ret_val) {
1986         DEBUGOUT("Error Configuring Flow Control\n");
1987         return ret_val;
1988     }
1989 
1990     /* Config DSP to improve Giga link quality */
1991     if (hw->phy_type == e1000_phy_igp) {
1992         ret_val = e1000_config_dsp_after_link_change(hw, TRUE);
1993         if (ret_val) {
1994             DEBUGOUT("Error Configuring DSP after link up\n");
1995             return ret_val;
1996         }
1997     }
1998 
1999     return E1000_SUCCESS;
2000 }
2001 
2002 /******************************************************************************
2003 * Detects which PHY is present and setup the speed and duplex
2004 *
2005 * hw - Struct containing variables accessed by shared code
2006 ******************************************************************************/
2007 static int32_t
e1000_setup_copper_link(struct e1000_hw * hw)2008 e1000_setup_copper_link(struct e1000_hw *hw)
2009 {
2010     int32_t ret_val;
2011     uint16_t i;
2012     uint16_t phy_data;
2013     uint16_t reg_data;
2014 
2015     DEBUGFUNC("e1000_setup_copper_link");
2016 
2017     switch (hw->mac_type) {
2018     case e1000_80003es2lan:
2019     case e1000_ich8lan:
2020         /* Set the mac to wait the maximum time between each
2021          * iteration and increase the max iterations when
2022          * polling the phy; this fixes erroneous timeouts at 10Mbps. */
2023         ret_val = e1000_write_kmrn_reg(hw, GG82563_REG(0x34, 4), 0xFFFF);
2024         if (ret_val)
2025             return ret_val;
2026         ret_val = e1000_read_kmrn_reg(hw, GG82563_REG(0x34, 9), &reg_data);
2027         if (ret_val)
2028             return ret_val;
2029         reg_data |= 0x3F;
2030         ret_val = e1000_write_kmrn_reg(hw, GG82563_REG(0x34, 9), reg_data);
2031         if (ret_val)
2032             return ret_val;
2033     default:
2034         break;
2035     }
2036 
2037     /* Check if it is a valid PHY and set PHY mode if necessary. */
2038     ret_val = e1000_copper_link_preconfig(hw);
2039     if (ret_val)
2040         return ret_val;
2041 
2042     switch (hw->mac_type) {
2043     case e1000_80003es2lan:
2044         /* Kumeran registers are written-only */
2045         reg_data = E1000_KUMCTRLSTA_INB_CTRL_LINK_STATUS_TX_TIMEOUT_DEFAULT;
2046         reg_data |= E1000_KUMCTRLSTA_INB_CTRL_DIS_PADDING;
2047         ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_INB_CTRL,
2048                                        reg_data);
2049         if (ret_val)
2050             return ret_val;
2051         break;
2052     default:
2053         break;
2054     }
2055 
2056     if (hw->phy_type == e1000_phy_igp ||
2057         hw->phy_type == e1000_phy_igp_3 ||
2058         hw->phy_type == e1000_phy_igp_2) {
2059         ret_val = e1000_copper_link_igp_setup(hw);
2060         if (ret_val)
2061             return ret_val;
2062     } else if (hw->phy_type == e1000_phy_m88) {
2063         ret_val = e1000_copper_link_mgp_setup(hw);
2064         if (ret_val)
2065             return ret_val;
2066     } else if (hw->phy_type == e1000_phy_gg82563) {
2067         ret_val = e1000_copper_link_ggp_setup(hw);
2068         if (ret_val)
2069             return ret_val;
2070     }
2071 
2072     if (hw->autoneg) {
2073         /* Setup autoneg and flow control advertisement
2074           * and perform autonegotiation */
2075         ret_val = e1000_copper_link_autoneg(hw);
2076         if (ret_val)
2077             return ret_val;
2078     } else {
2079         /* PHY will be set to 10H, 10F, 100H,or 100F
2080           * depending on value from forced_speed_duplex. */
2081         DEBUGOUT("Forcing speed and duplex\n");
2082         ret_val = e1000_phy_force_speed_duplex(hw);
2083         if (ret_val) {
2084             DEBUGOUT("Error Forcing Speed and Duplex\n");
2085             return ret_val;
2086         }
2087     }
2088 
2089     /* Check link status. Wait up to 100 microseconds for link to become
2090      * valid.
2091      */
2092     for (i = 0; i < 10; i++) {
2093         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2094         if (ret_val)
2095             return ret_val;
2096         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2097         if (ret_val)
2098             return ret_val;
2099 
2100         if (phy_data & MII_SR_LINK_STATUS) {
2101             /* Config the MAC and PHY after link is up */
2102             ret_val = e1000_copper_link_postconfig(hw);
2103             if (ret_val)
2104                 return ret_val;
2105 
2106             DEBUGOUT("Valid link established!!!\n");
2107             return E1000_SUCCESS;
2108         }
2109         udelay(10);
2110     }
2111 
2112     DEBUGOUT("Unable to establish link!!!\n");
2113     return E1000_SUCCESS;
2114 }
2115 
2116 /******************************************************************************
2117 * Configure the MAC-to-PHY interface for 10/100Mbps
2118 *
2119 * hw - Struct containing variables accessed by shared code
2120 ******************************************************************************/
2121 static int32_t
e1000_configure_kmrn_for_10_100(struct e1000_hw * hw,uint16_t duplex)2122 e1000_configure_kmrn_for_10_100(struct e1000_hw *hw, uint16_t duplex)
2123 {
2124     int32_t ret_val = E1000_SUCCESS;
2125     uint32_t tipg;
2126     uint16_t reg_data;
2127 
2128     DEBUGFUNC("e1000_configure_kmrn_for_10_100");
2129 
2130     reg_data = E1000_KUMCTRLSTA_HD_CTRL_10_100_DEFAULT;
2131     ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_HD_CTRL,
2132                                    reg_data);
2133     if (ret_val)
2134         return ret_val;
2135 
2136     /* Configure Transmit Inter-Packet Gap */
2137     tipg = E1000_READ_REG(hw, TIPG);
2138     tipg &= ~E1000_TIPG_IPGT_MASK;
2139     tipg |= DEFAULT_80003ES2LAN_TIPG_IPGT_10_100;
2140     E1000_WRITE_REG(hw, TIPG, tipg);
2141 
2142     ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, &reg_data);
2143 
2144     if (ret_val)
2145         return ret_val;
2146 
2147     if (duplex == HALF_DUPLEX)
2148         reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
2149     else
2150         reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
2151 
2152     ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
2153 
2154     return ret_val;
2155 }
2156 
2157 static int32_t
e1000_configure_kmrn_for_1000(struct e1000_hw * hw)2158 e1000_configure_kmrn_for_1000(struct e1000_hw *hw)
2159 {
2160     int32_t ret_val = E1000_SUCCESS;
2161     uint16_t reg_data;
2162     uint32_t tipg;
2163 
2164     DEBUGFUNC("e1000_configure_kmrn_for_1000");
2165 
2166     reg_data = E1000_KUMCTRLSTA_HD_CTRL_1000_DEFAULT;
2167     ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_HD_CTRL,
2168                                    reg_data);
2169     if (ret_val)
2170         return ret_val;
2171 
2172     /* Configure Transmit Inter-Packet Gap */
2173     tipg = E1000_READ_REG(hw, TIPG);
2174     tipg &= ~E1000_TIPG_IPGT_MASK;
2175     tipg |= DEFAULT_80003ES2LAN_TIPG_IPGT_1000;
2176     E1000_WRITE_REG(hw, TIPG, tipg);
2177 
2178     ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, &reg_data);
2179 
2180     if (ret_val)
2181         return ret_val;
2182 
2183     reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
2184     ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
2185 
2186     return ret_val;
2187 }
2188 
2189 /******************************************************************************
2190 * Configures PHY autoneg and flow control advertisement settings
2191 *
2192 * hw - Struct containing variables accessed by shared code
2193 ******************************************************************************/
2194 int32_t
e1000_phy_setup_autoneg(struct e1000_hw * hw)2195 e1000_phy_setup_autoneg(struct e1000_hw *hw)
2196 {
2197     int32_t ret_val;
2198     uint16_t mii_autoneg_adv_reg;
2199     uint16_t mii_1000t_ctrl_reg;
2200 
2201     DEBUGFUNC("e1000_phy_setup_autoneg");
2202 
2203     /* Read the MII Auto-Neg Advertisement Register (Address 4). */
2204     ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
2205     if (ret_val)
2206         return ret_val;
2207 
2208     if (hw->phy_type != e1000_phy_ife) {
2209         /* Read the MII 1000Base-T Control Register (Address 9). */
2210         ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
2211         if (ret_val)
2212             return ret_val;
2213     } else
2214         mii_1000t_ctrl_reg=0;
2215 
2216     /* Need to parse both autoneg_advertised and fc and set up
2217      * the appropriate PHY registers.  First we will parse for
2218      * autoneg_advertised software override.  Since we can advertise
2219      * a plethora of combinations, we need to check each bit
2220      * individually.
2221      */
2222 
2223     /* First we clear all the 10/100 mb speed bits in the Auto-Neg
2224      * Advertisement Register (Address 4) and the 1000 mb speed bits in
2225      * the  1000Base-T Control Register (Address 9).
2226      */
2227     mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
2228     mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
2229 
2230     DEBUGOUT1("autoneg_advertised %x\n", hw->autoneg_advertised);
2231 
2232     /* Do we want to advertise 10 Mb Half Duplex? */
2233     if (hw->autoneg_advertised & ADVERTISE_10_HALF) {
2234         DEBUGOUT("Advertise 10mb Half duplex\n");
2235         mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
2236     }
2237 
2238     /* Do we want to advertise 10 Mb Full Duplex? */
2239     if (hw->autoneg_advertised & ADVERTISE_10_FULL) {
2240         DEBUGOUT("Advertise 10mb Full duplex\n");
2241         mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
2242     }
2243 
2244     /* Do we want to advertise 100 Mb Half Duplex? */
2245     if (hw->autoneg_advertised & ADVERTISE_100_HALF) {
2246         DEBUGOUT("Advertise 100mb Half duplex\n");
2247         mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
2248     }
2249 
2250     /* Do we want to advertise 100 Mb Full Duplex? */
2251     if (hw->autoneg_advertised & ADVERTISE_100_FULL) {
2252         DEBUGOUT("Advertise 100mb Full duplex\n");
2253         mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
2254     }
2255 
2256     /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
2257     if (hw->autoneg_advertised & ADVERTISE_1000_HALF) {
2258         DEBUGOUT("Advertise 1000mb Half duplex requested, request denied!\n");
2259     }
2260 
2261     /* Do we want to advertise 1000 Mb Full Duplex? */
2262     if (hw->autoneg_advertised & ADVERTISE_1000_FULL) {
2263         DEBUGOUT("Advertise 1000mb Full duplex\n");
2264         mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
2265         if (hw->phy_type == e1000_phy_ife) {
2266             DEBUGOUT("e1000_phy_ife is a 10/100 PHY. Gigabit speed is not supported.\n");
2267         }
2268     }
2269 
2270     /* Check for a software override of the flow control settings, and
2271      * setup the PHY advertisement registers accordingly.  If
2272      * auto-negotiation is enabled, then software will have to set the
2273      * "PAUSE" bits to the correct value in the Auto-Negotiation
2274      * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-negotiation.
2275      *
2276      * The possible values of the "fc" parameter are:
2277      *      0:  Flow control is completely disabled
2278      *      1:  Rx flow control is enabled (we can receive pause frames
2279      *          but not send pause frames).
2280      *      2:  Tx flow control is enabled (we can send pause frames
2281      *          but we do not support receiving pause frames).
2282      *      3:  Both Rx and TX flow control (symmetric) are enabled.
2283      *  other:  No software override.  The flow control configuration
2284      *          in the EEPROM is used.
2285      */
2286     switch (hw->fc) {
2287     case E1000_FC_NONE: /* 0 */
2288         /* Flow control (RX & TX) is completely disabled by a
2289          * software over-ride.
2290          */
2291         mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2292         break;
2293     case E1000_FC_RX_PAUSE: /* 1 */
2294         /* RX Flow control is enabled, and TX Flow control is
2295          * disabled, by a software over-ride.
2296          */
2297         /* Since there really isn't a way to advertise that we are
2298          * capable of RX Pause ONLY, we will advertise that we
2299          * support both symmetric and asymmetric RX PAUSE.  Later
2300          * (in e1000_config_fc_after_link_up) we will disable the
2301          *hw's ability to send PAUSE frames.
2302          */
2303         mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2304         break;
2305     case E1000_FC_TX_PAUSE: /* 2 */
2306         /* TX Flow control is enabled, and RX Flow control is
2307          * disabled, by a software over-ride.
2308          */
2309         mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
2310         mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
2311         break;
2312     case E1000_FC_FULL: /* 3 */
2313         /* Flow control (both RX and TX) is enabled by a software
2314          * over-ride.
2315          */
2316         mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2317         break;
2318     default:
2319         DEBUGOUT("Flow control param set incorrectly\n");
2320         return -E1000_ERR_CONFIG;
2321     }
2322 
2323     ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
2324     if (ret_val)
2325         return ret_val;
2326 
2327     DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
2328 
2329     if (hw->phy_type != e1000_phy_ife) {
2330         ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg);
2331         if (ret_val)
2332             return ret_val;
2333     }
2334 
2335     return E1000_SUCCESS;
2336 }
2337 
2338 /******************************************************************************
2339 * Force PHY speed and duplex settings to hw->forced_speed_duplex
2340 *
2341 * hw - Struct containing variables accessed by shared code
2342 ******************************************************************************/
2343 static int32_t
e1000_phy_force_speed_duplex(struct e1000_hw * hw)2344 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
2345 {
2346     uint32_t ctrl;
2347     int32_t ret_val;
2348     uint16_t mii_ctrl_reg;
2349     uint16_t mii_status_reg;
2350     uint16_t phy_data;
2351     uint16_t i;
2352 
2353     DEBUGFUNC("e1000_phy_force_speed_duplex");
2354 
2355     /* Turn off Flow control if we are forcing speed and duplex. */
2356     hw->fc = E1000_FC_NONE;
2357 
2358     DEBUGOUT1("hw->fc = %d\n", hw->fc);
2359 
2360     /* Read the Device Control Register. */
2361     ctrl = E1000_READ_REG(hw, CTRL);
2362 
2363     /* Set the bits to Force Speed and Duplex in the Device Ctrl Reg. */
2364     ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
2365     ctrl &= ~(DEVICE_SPEED_MASK);
2366 
2367     /* Clear the Auto Speed Detect Enable bit. */
2368     ctrl &= ~E1000_CTRL_ASDE;
2369 
2370     /* Read the MII Control Register. */
2371     ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg);
2372     if (ret_val)
2373         return ret_val;
2374 
2375     /* We need to disable autoneg in order to force link and duplex. */
2376 
2377     mii_ctrl_reg &= ~MII_CR_AUTO_NEG_EN;
2378 
2379     /* Are we forcing Full or Half Duplex? */
2380     if (hw->forced_speed_duplex == e1000_100_full ||
2381         hw->forced_speed_duplex == e1000_10_full) {
2382         /* We want to force full duplex so we SET the full duplex bits in the
2383          * Device and MII Control Registers.
2384          */
2385         ctrl |= E1000_CTRL_FD;
2386         mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
2387         DEBUGOUT("Full Duplex\n");
2388     } else {
2389         /* We want to force half duplex so we CLEAR the full duplex bits in
2390          * the Device and MII Control Registers.
2391          */
2392         ctrl &= ~E1000_CTRL_FD;
2393         mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
2394         DEBUGOUT("Half Duplex\n");
2395     }
2396 
2397     /* Are we forcing 100Mbps??? */
2398     if (hw->forced_speed_duplex == e1000_100_full ||
2399        hw->forced_speed_duplex == e1000_100_half) {
2400         /* Set the 100Mb bit and turn off the 1000Mb and 10Mb bits. */
2401         ctrl |= E1000_CTRL_SPD_100;
2402         mii_ctrl_reg |= MII_CR_SPEED_100;
2403         mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
2404         DEBUGOUT("Forcing 100mb ");
2405     } else {
2406         /* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
2407         ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
2408         mii_ctrl_reg |= MII_CR_SPEED_10;
2409         mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
2410         DEBUGOUT("Forcing 10mb ");
2411     }
2412 
2413     e1000_config_collision_dist(hw);
2414 
2415     /* Write the configured values back to the Device Control Reg. */
2416     E1000_WRITE_REG(hw, CTRL, ctrl);
2417 
2418     if ((hw->phy_type == e1000_phy_m88) ||
2419         (hw->phy_type == e1000_phy_gg82563)) {
2420         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
2421         if (ret_val)
2422             return ret_val;
2423 
2424         /* Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
2425          * forced whenever speed are duplex are forced.
2426          */
2427         phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
2428         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
2429         if (ret_val)
2430             return ret_val;
2431 
2432         DEBUGOUT1("M88E1000 PSCR: %x \n", phy_data);
2433 
2434         /* Need to reset the PHY or these changes will be ignored */
2435         mii_ctrl_reg |= MII_CR_RESET;
2436 
2437     /* Disable MDI-X support for 10/100 */
2438     } else if (hw->phy_type == e1000_phy_ife) {
2439         ret_val = e1000_read_phy_reg(hw, IFE_PHY_MDIX_CONTROL, &phy_data);
2440         if (ret_val)
2441             return ret_val;
2442 
2443         phy_data &= ~IFE_PMC_AUTO_MDIX;
2444         phy_data &= ~IFE_PMC_FORCE_MDIX;
2445 
2446         ret_val = e1000_write_phy_reg(hw, IFE_PHY_MDIX_CONTROL, phy_data);
2447         if (ret_val)
2448             return ret_val;
2449 
2450     } else {
2451         /* Clear Auto-Crossover to force MDI manually.  IGP requires MDI
2452          * forced whenever speed or duplex are forced.
2453          */
2454         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
2455         if (ret_val)
2456             return ret_val;
2457 
2458         phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
2459         phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
2460 
2461         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
2462         if (ret_val)
2463             return ret_val;
2464     }
2465 
2466     /* Write back the modified PHY MII control register. */
2467     ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg);
2468     if (ret_val)
2469         return ret_val;
2470 
2471     udelay(1);
2472 
2473     /* The wait_autoneg_complete flag may be a little misleading here.
2474      * Since we are forcing speed and duplex, Auto-Neg is not enabled.
2475      * But we do want to delay for a period while forcing only so we
2476      * don't generate false No Link messages.  So we will wait here
2477      * only if the user has set wait_autoneg_complete to 1, which is
2478      * the default.
2479      */
2480     if (hw->wait_autoneg_complete) {
2481         /* We will wait for autoneg to complete. */
2482         DEBUGOUT("Waiting for forced speed/duplex link.\n");
2483         mii_status_reg = 0;
2484 
2485         /* We will wait for autoneg to complete or 4.5 seconds to expire. */
2486         for (i = PHY_FORCE_TIME; i > 0; i--) {
2487             /* Read the MII Status Register and wait for Auto-Neg Complete bit
2488              * to be set.
2489              */
2490             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2491             if (ret_val)
2492                 return ret_val;
2493 
2494             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2495             if (ret_val)
2496                 return ret_val;
2497 
2498             if (mii_status_reg & MII_SR_LINK_STATUS) break;
2499             msleep(100);
2500         }
2501         if ((i == 0) &&
2502            ((hw->phy_type == e1000_phy_m88) ||
2503             (hw->phy_type == e1000_phy_gg82563))) {
2504             /* We didn't get link.  Reset the DSP and wait again for link. */
2505             ret_val = e1000_phy_reset_dsp(hw);
2506             if (ret_val) {
2507                 DEBUGOUT("Error Resetting PHY DSP\n");
2508                 return ret_val;
2509             }
2510         }
2511         /* This loop will early-out if the link condition has been met.  */
2512         for (i = PHY_FORCE_TIME; i > 0; i--) {
2513             if (mii_status_reg & MII_SR_LINK_STATUS) break;
2514             msleep(100);
2515             /* Read the MII Status Register and wait for Auto-Neg Complete bit
2516              * to be set.
2517              */
2518             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2519             if (ret_val)
2520                 return ret_val;
2521 
2522             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2523             if (ret_val)
2524                 return ret_val;
2525         }
2526     }
2527 
2528     if (hw->phy_type == e1000_phy_m88) {
2529         /* Because we reset the PHY above, we need to re-force TX_CLK in the
2530          * Extended PHY Specific Control Register to 25MHz clock.  This value
2531          * defaults back to a 2.5MHz clock when the PHY is reset.
2532          */
2533         ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
2534         if (ret_val)
2535             return ret_val;
2536 
2537         phy_data |= M88E1000_EPSCR_TX_CLK_25;
2538         ret_val = e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
2539         if (ret_val)
2540             return ret_val;
2541 
2542         /* In addition, because of the s/w reset above, we need to enable CRS on
2543          * TX.  This must be set for both full and half duplex operation.
2544          */
2545         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
2546         if (ret_val)
2547             return ret_val;
2548 
2549         phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
2550         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
2551         if (ret_val)
2552             return ret_val;
2553 
2554         if ((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
2555             (!hw->autoneg) && (hw->forced_speed_duplex == e1000_10_full ||
2556              hw->forced_speed_duplex == e1000_10_half)) {
2557             ret_val = e1000_polarity_reversal_workaround(hw);
2558             if (ret_val)
2559                 return ret_val;
2560         }
2561     } else if (hw->phy_type == e1000_phy_gg82563) {
2562         /* The TX_CLK of the Extended PHY Specific Control Register defaults
2563          * to 2.5MHz on a reset.  We need to re-force it back to 25MHz, if
2564          * we're not in a forced 10/duplex configuration. */
2565         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);
2566         if (ret_val)
2567             return ret_val;
2568 
2569         phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
2570         if ((hw->forced_speed_duplex == e1000_10_full) ||
2571             (hw->forced_speed_duplex == e1000_10_half))
2572             phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5MHZ;
2573         else
2574             phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25MHZ;
2575 
2576         /* Also due to the reset, we need to enable CRS on Tx. */
2577         phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
2578 
2579         ret_val = e1000_write_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data);
2580         if (ret_val)
2581             return ret_val;
2582     }
2583     return E1000_SUCCESS;
2584 }
2585 
2586 /******************************************************************************
2587 * Sets the collision distance in the Transmit Control register
2588 *
2589 * hw - Struct containing variables accessed by shared code
2590 *
2591 * Link should have been established previously. Reads the speed and duplex
2592 * information from the Device Status register.
2593 ******************************************************************************/
2594 void
e1000_config_collision_dist(struct e1000_hw * hw)2595 e1000_config_collision_dist(struct e1000_hw *hw)
2596 {
2597     uint32_t tctl, coll_dist;
2598 
2599     DEBUGFUNC("e1000_config_collision_dist");
2600 
2601     if (hw->mac_type < e1000_82543)
2602         coll_dist = E1000_COLLISION_DISTANCE_82542;
2603     else
2604         coll_dist = E1000_COLLISION_DISTANCE;
2605 
2606     tctl = E1000_READ_REG(hw, TCTL);
2607 
2608     tctl &= ~E1000_TCTL_COLD;
2609     tctl |= coll_dist << E1000_COLD_SHIFT;
2610 
2611     E1000_WRITE_REG(hw, TCTL, tctl);
2612     E1000_WRITE_FLUSH(hw);
2613 }
2614 
2615 /******************************************************************************
2616 * Sets MAC speed and duplex settings to reflect the those in the PHY
2617 *
2618 * hw - Struct containing variables accessed by shared code
2619 * mii_reg - data to write to the MII control register
2620 *
2621 * The contents of the PHY register containing the needed information need to
2622 * be passed in.
2623 ******************************************************************************/
2624 static int32_t
e1000_config_mac_to_phy(struct e1000_hw * hw)2625 e1000_config_mac_to_phy(struct e1000_hw *hw)
2626 {
2627     uint32_t ctrl;
2628     int32_t ret_val;
2629     uint16_t phy_data;
2630 
2631     DEBUGFUNC("e1000_config_mac_to_phy");
2632 
2633     /* 82544 or newer MAC, Auto Speed Detection takes care of
2634     * MAC speed/duplex configuration.*/
2635     if (hw->mac_type >= e1000_82544)
2636         return E1000_SUCCESS;
2637 
2638     /* Read the Device Control Register and set the bits to Force Speed
2639      * and Duplex.
2640      */
2641     ctrl = E1000_READ_REG(hw, CTRL);
2642     ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
2643     ctrl &= ~(E1000_CTRL_SPD_SEL | E1000_CTRL_ILOS);
2644 
2645     /* Set up duplex in the Device Control and Transmit Control
2646      * registers depending on negotiated values.
2647      */
2648     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
2649     if (ret_val)
2650         return ret_val;
2651 
2652     if (phy_data & M88E1000_PSSR_DPLX)
2653         ctrl |= E1000_CTRL_FD;
2654     else
2655         ctrl &= ~E1000_CTRL_FD;
2656 
2657     e1000_config_collision_dist(hw);
2658 
2659     /* Set up speed in the Device Control register depending on
2660      * negotiated values.
2661      */
2662     if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS)
2663         ctrl |= E1000_CTRL_SPD_1000;
2664     else if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_100MBS)
2665         ctrl |= E1000_CTRL_SPD_100;
2666 
2667     /* Write the configured values back to the Device Control Reg. */
2668     E1000_WRITE_REG(hw, CTRL, ctrl);
2669     return E1000_SUCCESS;
2670 }
2671 
2672 /******************************************************************************
2673  * Forces the MAC's flow control settings.
2674  *
2675  * hw - Struct containing variables accessed by shared code
2676  *
2677  * Sets the TFCE and RFCE bits in the device control register to reflect
2678  * the adapter settings. TFCE and RFCE need to be explicitly set by
2679  * software when a Copper PHY is used because autonegotiation is managed
2680  * by the PHY rather than the MAC. Software must also configure these
2681  * bits when link is forced on a fiber connection.
2682  *****************************************************************************/
2683 int32_t
e1000_force_mac_fc(struct e1000_hw * hw)2684 e1000_force_mac_fc(struct e1000_hw *hw)
2685 {
2686     uint32_t ctrl;
2687 
2688     DEBUGFUNC("e1000_force_mac_fc");
2689 
2690     /* Get the current configuration of the Device Control Register */
2691     ctrl = E1000_READ_REG(hw, CTRL);
2692 
2693     /* Because we didn't get link via the internal auto-negotiation
2694      * mechanism (we either forced link or we got link via PHY
2695      * auto-neg), we have to manually enable/disable transmit an
2696      * receive flow control.
2697      *
2698      * The "Case" statement below enables/disable flow control
2699      * according to the "hw->fc" parameter.
2700      *
2701      * The possible values of the "fc" parameter are:
2702      *      0:  Flow control is completely disabled
2703      *      1:  Rx flow control is enabled (we can receive pause
2704      *          frames but not send pause frames).
2705      *      2:  Tx flow control is enabled (we can send pause frames
2706      *          frames but we do not receive pause frames).
2707      *      3:  Both Rx and TX flow control (symmetric) is enabled.
2708      *  other:  No other values should be possible at this point.
2709      */
2710 
2711     switch (hw->fc) {
2712     case E1000_FC_NONE:
2713         ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
2714         break;
2715     case E1000_FC_RX_PAUSE:
2716         ctrl &= (~E1000_CTRL_TFCE);
2717         ctrl |= E1000_CTRL_RFCE;
2718         break;
2719     case E1000_FC_TX_PAUSE:
2720         ctrl &= (~E1000_CTRL_RFCE);
2721         ctrl |= E1000_CTRL_TFCE;
2722         break;
2723     case E1000_FC_FULL:
2724         ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
2725         break;
2726     default:
2727         DEBUGOUT("Flow control param set incorrectly\n");
2728         return -E1000_ERR_CONFIG;
2729     }
2730 
2731     /* Disable TX Flow Control for 82542 (rev 2.0) */
2732     if (hw->mac_type == e1000_82542_rev2_0)
2733         ctrl &= (~E1000_CTRL_TFCE);
2734 
2735     E1000_WRITE_REG(hw, CTRL, ctrl);
2736     return E1000_SUCCESS;
2737 }
2738 
2739 /******************************************************************************
2740  * Configures flow control settings after link is established
2741  *
2742  * hw - Struct containing variables accessed by shared code
2743  *
2744  * Should be called immediately after a valid link has been established.
2745  * Forces MAC flow control settings if link was forced. When in MII/GMII mode
2746  * and autonegotiation is enabled, the MAC flow control settings will be set
2747  * based on the flow control negotiated by the PHY. In TBI mode, the TFCE
2748  * and RFCE bits will be automaticaly set to the negotiated flow control mode.
2749  *****************************************************************************/
2750 static int32_t
e1000_config_fc_after_link_up(struct e1000_hw * hw)2751 e1000_config_fc_after_link_up(struct e1000_hw *hw)
2752 {
2753     int32_t ret_val;
2754     uint16_t mii_status_reg;
2755     uint16_t mii_nway_adv_reg;
2756     uint16_t mii_nway_lp_ability_reg;
2757     uint16_t speed;
2758     uint16_t duplex;
2759 
2760     DEBUGFUNC("e1000_config_fc_after_link_up");
2761 
2762     /* Check for the case where we have fiber media and auto-neg failed
2763      * so we had to force link.  In this case, we need to force the
2764      * configuration of the MAC to match the "fc" parameter.
2765      */
2766     if (((hw->media_type == e1000_media_type_fiber) && (hw->autoneg_failed)) ||
2767         ((hw->media_type == e1000_media_type_internal_serdes) &&
2768          (hw->autoneg_failed)) ||
2769         ((hw->media_type == e1000_media_type_copper) && (!hw->autoneg))) {
2770         ret_val = e1000_force_mac_fc(hw);
2771         if (ret_val) {
2772             DEBUGOUT("Error forcing flow control settings\n");
2773             return ret_val;
2774         }
2775     }
2776 
2777     /* Check for the case where we have copper media and auto-neg is
2778      * enabled.  In this case, we need to check and see if Auto-Neg
2779      * has completed, and if so, how the PHY and link partner has
2780      * flow control configured.
2781      */
2782     if ((hw->media_type == e1000_media_type_copper) && hw->autoneg) {
2783         /* Read the MII Status Register and check to see if AutoNeg
2784          * has completed.  We read this twice because this reg has
2785          * some "sticky" (latched) bits.
2786          */
2787         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2788         if (ret_val)
2789             return ret_val;
2790         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2791         if (ret_val)
2792             return ret_val;
2793 
2794         if (mii_status_reg & MII_SR_AUTONEG_COMPLETE) {
2795             /* The AutoNeg process has completed, so we now need to
2796              * read both the Auto Negotiation Advertisement Register
2797              * (Address 4) and the Auto_Negotiation Base Page Ability
2798              * Register (Address 5) to determine how flow control was
2799              * negotiated.
2800              */
2801             ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV,
2802                                          &mii_nway_adv_reg);
2803             if (ret_val)
2804                 return ret_val;
2805             ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY,
2806                                          &mii_nway_lp_ability_reg);
2807             if (ret_val)
2808                 return ret_val;
2809 
2810             /* Two bits in the Auto Negotiation Advertisement Register
2811              * (Address 4) and two bits in the Auto Negotiation Base
2812              * Page Ability Register (Address 5) determine flow control
2813              * for both the PHY and the link partner.  The following
2814              * table, taken out of the IEEE 802.3ab/D6.0 dated March 25,
2815              * 1999, describes these PAUSE resolution bits and how flow
2816              * control is determined based upon these settings.
2817              * NOTE:  DC = Don't Care
2818              *
2819              *   LOCAL DEVICE  |   LINK PARTNER
2820              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
2821              *-------|---------|-------|---------|--------------------
2822              *   0   |    0    |  DC   |   DC    | E1000_FC_NONE
2823              *   0   |    1    |   0   |   DC    | E1000_FC_NONE
2824              *   0   |    1    |   1   |    0    | E1000_FC_NONE
2825              *   0   |    1    |   1   |    1    | E1000_FC_TX_PAUSE
2826              *   1   |    0    |   0   |   DC    | E1000_FC_NONE
2827              *   1   |   DC    |   1   |   DC    | E1000_FC_FULL
2828              *   1   |    1    |   0   |    0    | E1000_FC_NONE
2829              *   1   |    1    |   0   |    1    | E1000_FC_RX_PAUSE
2830              *
2831              */
2832             /* Are both PAUSE bits set to 1?  If so, this implies
2833              * Symmetric Flow Control is enabled at both ends.  The
2834              * ASM_DIR bits are irrelevant per the spec.
2835              *
2836              * For Symmetric Flow Control:
2837              *
2838              *   LOCAL DEVICE  |   LINK PARTNER
2839              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2840              *-------|---------|-------|---------|--------------------
2841              *   1   |   DC    |   1   |   DC    | E1000_FC_FULL
2842              *
2843              */
2844             if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2845                 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
2846                 /* Now we need to check if the user selected RX ONLY
2847                  * of pause frames.  In this case, we had to advertise
2848                  * FULL flow control because we could not advertise RX
2849                  * ONLY. Hence, we must now check to see if we need to
2850                  * turn OFF  the TRANSMISSION of PAUSE frames.
2851                  */
2852                 if (hw->original_fc == E1000_FC_FULL) {
2853                     hw->fc = E1000_FC_FULL;
2854                     DEBUGOUT("Flow Control = FULL.\n");
2855                 } else {
2856                     hw->fc = E1000_FC_RX_PAUSE;
2857                     DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2858                 }
2859             }
2860             /* For receiving PAUSE frames ONLY.
2861              *
2862              *   LOCAL DEVICE  |   LINK PARTNER
2863              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2864              *-------|---------|-------|---------|--------------------
2865              *   0   |    1    |   1   |    1    | E1000_FC_TX_PAUSE
2866              *
2867              */
2868             else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2869                      (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2870                      (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2871                      (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
2872                 hw->fc = E1000_FC_TX_PAUSE;
2873                 DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
2874             }
2875             /* For transmitting PAUSE frames ONLY.
2876              *
2877              *   LOCAL DEVICE  |   LINK PARTNER
2878              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2879              *-------|---------|-------|---------|--------------------
2880              *   1   |    1    |   0   |    1    | E1000_FC_RX_PAUSE
2881              *
2882              */
2883             else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2884                      (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2885                      !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2886                      (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
2887                 hw->fc = E1000_FC_RX_PAUSE;
2888                 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2889             }
2890             /* Per the IEEE spec, at this point flow control should be
2891              * disabled.  However, we want to consider that we could
2892              * be connected to a legacy switch that doesn't advertise
2893              * desired flow control, but can be forced on the link
2894              * partner.  So if we advertised no flow control, that is
2895              * what we will resolve to.  If we advertised some kind of
2896              * receive capability (Rx Pause Only or Full Flow Control)
2897              * and the link partner advertised none, we will configure
2898              * ourselves to enable Rx Flow Control only.  We can do
2899              * this safely for two reasons:  If the link partner really
2900              * didn't want flow control enabled, and we enable Rx, no
2901              * harm done since we won't be receiving any PAUSE frames
2902              * anyway.  If the intent on the link partner was to have
2903              * flow control enabled, then by us enabling RX only, we
2904              * can at least receive pause frames and process them.
2905              * This is a good idea because in most cases, since we are
2906              * predominantly a server NIC, more times than not we will
2907              * be asked to delay transmission of packets than asking
2908              * our link partner to pause transmission of frames.
2909              */
2910             else if ((hw->original_fc == E1000_FC_NONE ||
2911                       hw->original_fc == E1000_FC_TX_PAUSE) ||
2912                       hw->fc_strict_ieee) {
2913                 hw->fc = E1000_FC_NONE;
2914                 DEBUGOUT("Flow Control = NONE.\n");
2915             } else {
2916                 hw->fc = E1000_FC_RX_PAUSE;
2917                 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2918             }
2919 
2920             /* Now we need to do one last check...  If we auto-
2921              * negotiated to HALF DUPLEX, flow control should not be
2922              * enabled per IEEE 802.3 spec.
2923              */
2924             ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
2925             if (ret_val) {
2926                 DEBUGOUT("Error getting link speed and duplex\n");
2927                 return ret_val;
2928             }
2929 
2930             if (duplex == HALF_DUPLEX)
2931                 hw->fc = E1000_FC_NONE;
2932 
2933             /* Now we call a subroutine to actually force the MAC
2934              * controller to use the correct flow control settings.
2935              */
2936             ret_val = e1000_force_mac_fc(hw);
2937             if (ret_val) {
2938                 DEBUGOUT("Error forcing flow control settings\n");
2939                 return ret_val;
2940             }
2941         } else {
2942             DEBUGOUT("Copper PHY and Auto Neg has not completed.\n");
2943         }
2944     }
2945     return E1000_SUCCESS;
2946 }
2947 
2948 /******************************************************************************
2949  * Checks to see if the link status of the hardware has changed.
2950  *
2951  * hw - Struct containing variables accessed by shared code
2952  *
2953  * Called by any function that needs to check the link status of the adapter.
2954  *****************************************************************************/
2955 int32_t
e1000_check_for_link(struct e1000_hw * hw)2956 e1000_check_for_link(struct e1000_hw *hw)
2957 {
2958     uint32_t rxcw = 0;
2959     uint32_t ctrl;
2960     uint32_t status;
2961     uint32_t rctl;
2962     uint32_t icr;
2963     uint32_t signal = 0;
2964     int32_t ret_val;
2965     uint16_t phy_data;
2966 
2967     DEBUGFUNC("e1000_check_for_link");
2968 
2969     ctrl = E1000_READ_REG(hw, CTRL);
2970     status = E1000_READ_REG(hw, STATUS);
2971 
2972     /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be
2973      * set when the optics detect a signal. On older adapters, it will be
2974      * cleared when there is a signal.  This applies to fiber media only.
2975      */
2976     if ((hw->media_type == e1000_media_type_fiber) ||
2977         (hw->media_type == e1000_media_type_internal_serdes)) {
2978         rxcw = E1000_READ_REG(hw, RXCW);
2979 
2980         if (hw->media_type == e1000_media_type_fiber) {
2981             signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
2982             if (status & E1000_STATUS_LU)
2983                 hw->get_link_status = FALSE;
2984         }
2985     }
2986 
2987     /* If we have a copper PHY then we only want to go out to the PHY
2988      * registers to see if Auto-Neg has completed and/or if our link
2989      * status has changed.  The get_link_status flag will be set if we
2990      * receive a Link Status Change interrupt or we have Rx Sequence
2991      * Errors.
2992      */
2993     if ((hw->media_type == e1000_media_type_copper) && hw->get_link_status) {
2994         /* First we want to see if the MII Status Register reports
2995          * link.  If so, then we want to get the current speed/duplex
2996          * of the PHY.
2997          * Read the register twice since the link bit is sticky.
2998          */
2999         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3000         if (ret_val)
3001             return ret_val;
3002         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3003         if (ret_val)
3004             return ret_val;
3005 
3006         if (phy_data & MII_SR_LINK_STATUS) {
3007             hw->get_link_status = FALSE;
3008             /* Check if there was DownShift, must be checked immediately after
3009              * link-up */
3010             e1000_check_downshift(hw);
3011 
3012             /* If we are on 82544 or 82543 silicon and speed/duplex
3013              * are forced to 10H or 10F, then we will implement the polarity
3014              * reversal workaround.  We disable interrupts first, and upon
3015              * returning, place the devices interrupt state to its previous
3016              * value except for the link status change interrupt which will
3017              * happen due to the execution of this workaround.
3018              */
3019 
3020             if ((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
3021                 (!hw->autoneg) &&
3022                 (hw->forced_speed_duplex == e1000_10_full ||
3023                  hw->forced_speed_duplex == e1000_10_half)) {
3024                 E1000_WRITE_REG(hw, IMC, 0xffffffff);
3025                 ret_val = e1000_polarity_reversal_workaround(hw);
3026                 icr = E1000_READ_REG(hw, ICR);
3027                 E1000_WRITE_REG(hw, ICS, (icr & ~E1000_ICS_LSC));
3028                 E1000_WRITE_REG(hw, IMS, IMS_ENABLE_MASK);
3029             }
3030 
3031         } else {
3032             /* No link detected */
3033             e1000_config_dsp_after_link_change(hw, FALSE);
3034             return 0;
3035         }
3036 
3037         /* If we are forcing speed/duplex, then we simply return since
3038          * we have already determined whether we have link or not.
3039          */
3040         if (!hw->autoneg) return -E1000_ERR_CONFIG;
3041 
3042         /* optimize the dsp settings for the igp phy */
3043         e1000_config_dsp_after_link_change(hw, TRUE);
3044 
3045         /* We have a M88E1000 PHY and Auto-Neg is enabled.  If we
3046          * have Si on board that is 82544 or newer, Auto
3047          * Speed Detection takes care of MAC speed/duplex
3048          * configuration.  So we only need to configure Collision
3049          * Distance in the MAC.  Otherwise, we need to force
3050          * speed/duplex on the MAC to the current PHY speed/duplex
3051          * settings.
3052          */
3053         if (hw->mac_type >= e1000_82544)
3054             e1000_config_collision_dist(hw);
3055         else {
3056             ret_val = e1000_config_mac_to_phy(hw);
3057             if (ret_val) {
3058                 DEBUGOUT("Error configuring MAC to PHY settings\n");
3059                 return ret_val;
3060             }
3061         }
3062 
3063         /* Configure Flow Control now that Auto-Neg has completed. First, we
3064          * need to restore the desired flow control settings because we may
3065          * have had to re-autoneg with a different link partner.
3066          */
3067         ret_val = e1000_config_fc_after_link_up(hw);
3068         if (ret_val) {
3069             DEBUGOUT("Error configuring flow control\n");
3070             return ret_val;
3071         }
3072 
3073         /* At this point we know that we are on copper and we have
3074          * auto-negotiated link.  These are conditions for checking the link
3075          * partner capability register.  We use the link speed to determine if
3076          * TBI compatibility needs to be turned on or off.  If the link is not
3077          * at gigabit speed, then TBI compatibility is not needed.  If we are
3078          * at gigabit speed, we turn on TBI compatibility.
3079          */
3080         if (hw->tbi_compatibility_en) {
3081             uint16_t speed, duplex;
3082             ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
3083             if (ret_val) {
3084                 DEBUGOUT("Error getting link speed and duplex\n");
3085                 return ret_val;
3086             }
3087             if (speed != SPEED_1000) {
3088                 /* If link speed is not set to gigabit speed, we do not need
3089                  * to enable TBI compatibility.
3090                  */
3091                 if (hw->tbi_compatibility_on) {
3092                     /* If we previously were in the mode, turn it off. */
3093                     rctl = E1000_READ_REG(hw, RCTL);
3094                     rctl &= ~E1000_RCTL_SBP;
3095                     E1000_WRITE_REG(hw, RCTL, rctl);
3096                     hw->tbi_compatibility_on = FALSE;
3097                 }
3098             } else {
3099                 /* If TBI compatibility is was previously off, turn it on. For
3100                  * compatibility with a TBI link partner, we will store bad
3101                  * packets. Some frames have an additional byte on the end and
3102                  * will look like CRC errors to to the hardware.
3103                  */
3104                 if (!hw->tbi_compatibility_on) {
3105                     hw->tbi_compatibility_on = TRUE;
3106                     rctl = E1000_READ_REG(hw, RCTL);
3107                     rctl |= E1000_RCTL_SBP;
3108                     E1000_WRITE_REG(hw, RCTL, rctl);
3109                 }
3110             }
3111         }
3112     }
3113     /* If we don't have link (auto-negotiation failed or link partner cannot
3114      * auto-negotiate), the cable is plugged in (we have signal), and our
3115      * link partner is not trying to auto-negotiate with us (we are receiving
3116      * idles or data), we need to force link up. We also need to give
3117      * auto-negotiation time to complete, in case the cable was just plugged
3118      * in. The autoneg_failed flag does this.
3119      */
3120     else if ((((hw->media_type == e1000_media_type_fiber) &&
3121               ((ctrl & E1000_CTRL_SWDPIN1) == signal)) ||
3122               (hw->media_type == e1000_media_type_internal_serdes)) &&
3123               (!(status & E1000_STATUS_LU)) &&
3124               (!(rxcw & E1000_RXCW_C))) {
3125         if (hw->autoneg_failed == 0) {
3126             hw->autoneg_failed = 1;
3127             return 0;
3128         }
3129         DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\n");
3130 
3131         /* Disable auto-negotiation in the TXCW register */
3132         E1000_WRITE_REG(hw, TXCW, (hw->txcw & ~E1000_TXCW_ANE));
3133 
3134         /* Force link-up and also force full-duplex. */
3135         ctrl = E1000_READ_REG(hw, CTRL);
3136         ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
3137         E1000_WRITE_REG(hw, CTRL, ctrl);
3138 
3139         /* Configure Flow Control after forcing link up. */
3140         ret_val = e1000_config_fc_after_link_up(hw);
3141         if (ret_val) {
3142             DEBUGOUT("Error configuring flow control\n");
3143             return ret_val;
3144         }
3145     }
3146     /* If we are forcing link and we are receiving /C/ ordered sets, re-enable
3147      * auto-negotiation in the TXCW register and disable forced link in the
3148      * Device Control register in an attempt to auto-negotiate with our link
3149      * partner.
3150      */
3151     else if (((hw->media_type == e1000_media_type_fiber) ||
3152               (hw->media_type == e1000_media_type_internal_serdes)) &&
3153               (ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
3154         DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\n");
3155         E1000_WRITE_REG(hw, TXCW, hw->txcw);
3156         E1000_WRITE_REG(hw, CTRL, (ctrl & ~E1000_CTRL_SLU));
3157 
3158         hw->serdes_link_down = FALSE;
3159     }
3160     /* If we force link for non-auto-negotiation switch, check link status
3161      * based on MAC synchronization for internal serdes media type.
3162      */
3163     else if ((hw->media_type == e1000_media_type_internal_serdes) &&
3164              !(E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) {
3165         /* SYNCH bit and IV bit are sticky. */
3166         udelay(10);
3167         if (E1000_RXCW_SYNCH & E1000_READ_REG(hw, RXCW)) {
3168             if (!(rxcw & E1000_RXCW_IV)) {
3169                 hw->serdes_link_down = FALSE;
3170                 DEBUGOUT("SERDES: Link is up.\n");
3171             }
3172         } else {
3173             hw->serdes_link_down = TRUE;
3174             DEBUGOUT("SERDES: Link is down.\n");
3175         }
3176     }
3177     if ((hw->media_type == e1000_media_type_internal_serdes) &&
3178         (E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) {
3179         hw->serdes_link_down = !(E1000_STATUS_LU & E1000_READ_REG(hw, STATUS));
3180     }
3181     return E1000_SUCCESS;
3182 }
3183 
3184 /******************************************************************************
3185  * Detects the current speed and duplex settings of the hardware.
3186  *
3187  * hw - Struct containing variables accessed by shared code
3188  * speed - Speed of the connection
3189  * duplex - Duplex setting of the connection
3190  *****************************************************************************/
3191 int32_t
e1000_get_speed_and_duplex(struct e1000_hw * hw,uint16_t * speed,uint16_t * duplex)3192 e1000_get_speed_and_duplex(struct e1000_hw *hw,
3193                            uint16_t *speed,
3194                            uint16_t *duplex)
3195 {
3196     uint32_t status;
3197     int32_t ret_val;
3198     uint16_t phy_data;
3199 
3200     DEBUGFUNC("e1000_get_speed_and_duplex");
3201 
3202     if (hw->mac_type >= e1000_82543) {
3203         status = E1000_READ_REG(hw, STATUS);
3204         if (status & E1000_STATUS_SPEED_1000) {
3205             *speed = SPEED_1000;
3206             DEBUGOUT("1000 Mbs, ");
3207         } else if (status & E1000_STATUS_SPEED_100) {
3208             *speed = SPEED_100;
3209             DEBUGOUT("100 Mbs, ");
3210         } else {
3211             *speed = SPEED_10;
3212             DEBUGOUT("10 Mbs, ");
3213         }
3214 
3215         if (status & E1000_STATUS_FD) {
3216             *duplex = FULL_DUPLEX;
3217             DEBUGOUT("Full Duplex\n");
3218         } else {
3219             *duplex = HALF_DUPLEX;
3220             DEBUGOUT(" Half Duplex\n");
3221         }
3222     } else {
3223         DEBUGOUT("1000 Mbs, Full Duplex\n");
3224         *speed = SPEED_1000;
3225         *duplex = FULL_DUPLEX;
3226     }
3227 
3228     /* IGP01 PHY may advertise full duplex operation after speed downgrade even
3229      * if it is operating at half duplex.  Here we set the duplex settings to
3230      * match the duplex in the link partner's capabilities.
3231      */
3232     if (hw->phy_type == e1000_phy_igp && hw->speed_downgraded) {
3233         ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data);
3234         if (ret_val)
3235             return ret_val;
3236 
3237         if (!(phy_data & NWAY_ER_LP_NWAY_CAPS))
3238             *duplex = HALF_DUPLEX;
3239         else {
3240             ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data);
3241             if (ret_val)
3242                 return ret_val;
3243             if ((*speed == SPEED_100 && !(phy_data & NWAY_LPAR_100TX_FD_CAPS)) ||
3244                (*speed == SPEED_10 && !(phy_data & NWAY_LPAR_10T_FD_CAPS)))
3245                 *duplex = HALF_DUPLEX;
3246         }
3247     }
3248 
3249     if ((hw->mac_type == e1000_80003es2lan) &&
3250         (hw->media_type == e1000_media_type_copper)) {
3251         if (*speed == SPEED_1000)
3252             ret_val = e1000_configure_kmrn_for_1000(hw);
3253         else
3254             ret_val = e1000_configure_kmrn_for_10_100(hw, *duplex);
3255         if (ret_val)
3256             return ret_val;
3257     }
3258 
3259     if ((hw->phy_type == e1000_phy_igp_3) && (*speed == SPEED_1000)) {
3260         ret_val = e1000_kumeran_lock_loss_workaround(hw);
3261         if (ret_val)
3262             return ret_val;
3263     }
3264 
3265     return E1000_SUCCESS;
3266 }
3267 
3268 /******************************************************************************
3269 * Blocks until autoneg completes or times out (~4.5 seconds)
3270 *
3271 * hw - Struct containing variables accessed by shared code
3272 ******************************************************************************/
3273 static int32_t
e1000_wait_autoneg(struct e1000_hw * hw)3274 e1000_wait_autoneg(struct e1000_hw *hw)
3275 {
3276     int32_t ret_val;
3277     uint16_t i;
3278     uint16_t phy_data;
3279 
3280     DEBUGFUNC("e1000_wait_autoneg");
3281     DEBUGOUT("Waiting for Auto-Neg to complete.\n");
3282 
3283     /* We will wait for autoneg to complete or 4.5 seconds to expire. */
3284     for (i = PHY_AUTO_NEG_TIME; i > 0; i--) {
3285         /* Read the MII Status Register and wait for Auto-Neg
3286          * Complete bit to be set.
3287          */
3288         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3289         if (ret_val)
3290             return ret_val;
3291         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3292         if (ret_val)
3293             return ret_val;
3294         if (phy_data & MII_SR_AUTONEG_COMPLETE) {
3295             return E1000_SUCCESS;
3296         }
3297         msleep(100);
3298     }
3299     return E1000_SUCCESS;
3300 }
3301 
3302 /******************************************************************************
3303 * Raises the Management Data Clock
3304 *
3305 * hw - Struct containing variables accessed by shared code
3306 * ctrl - Device control register's current value
3307 ******************************************************************************/
3308 static void
e1000_raise_mdi_clk(struct e1000_hw * hw,uint32_t * ctrl)3309 e1000_raise_mdi_clk(struct e1000_hw *hw,
3310                     uint32_t *ctrl)
3311 {
3312     /* Raise the clock input to the Management Data Clock (by setting the MDC
3313      * bit), and then delay 10 microseconds.
3314      */
3315     E1000_WRITE_REG(hw, CTRL, (*ctrl | E1000_CTRL_MDC));
3316     E1000_WRITE_FLUSH(hw);
3317     udelay(10);
3318 }
3319 
3320 /******************************************************************************
3321 * Lowers the Management Data Clock
3322 *
3323 * hw - Struct containing variables accessed by shared code
3324 * ctrl - Device control register's current value
3325 ******************************************************************************/
3326 static void
e1000_lower_mdi_clk(struct e1000_hw * hw,uint32_t * ctrl)3327 e1000_lower_mdi_clk(struct e1000_hw *hw,
3328                     uint32_t *ctrl)
3329 {
3330     /* Lower the clock input to the Management Data Clock (by clearing the MDC
3331      * bit), and then delay 10 microseconds.
3332      */
3333     E1000_WRITE_REG(hw, CTRL, (*ctrl & ~E1000_CTRL_MDC));
3334     E1000_WRITE_FLUSH(hw);
3335     udelay(10);
3336 }
3337 
3338 /******************************************************************************
3339 * Shifts data bits out to the PHY
3340 *
3341 * hw - Struct containing variables accessed by shared code
3342 * data - Data to send out to the PHY
3343 * count - Number of bits to shift out
3344 *
3345 * Bits are shifted out in MSB to LSB order.
3346 ******************************************************************************/
3347 static void
e1000_shift_out_mdi_bits(struct e1000_hw * hw,uint32_t data,uint16_t count)3348 e1000_shift_out_mdi_bits(struct e1000_hw *hw,
3349                          uint32_t data,
3350                          uint16_t count)
3351 {
3352     uint32_t ctrl;
3353     uint32_t mask;
3354 
3355     /* We need to shift "count" number of bits out to the PHY. So, the value
3356      * in the "data" parameter will be shifted out to the PHY one bit at a
3357      * time. In order to do this, "data" must be broken down into bits.
3358      */
3359     mask = 0x01;
3360     mask <<= (count - 1);
3361 
3362     ctrl = E1000_READ_REG(hw, CTRL);
3363 
3364     /* Set MDIO_DIR and MDC_DIR direction bits to be used as output pins. */
3365     ctrl |= (E1000_CTRL_MDIO_DIR | E1000_CTRL_MDC_DIR);
3366 
3367     while (mask) {
3368         /* A "1" is shifted out to the PHY by setting the MDIO bit to "1" and
3369          * then raising and lowering the Management Data Clock. A "0" is
3370          * shifted out to the PHY by setting the MDIO bit to "0" and then
3371          * raising and lowering the clock.
3372          */
3373         if (data & mask)
3374             ctrl |= E1000_CTRL_MDIO;
3375         else
3376             ctrl &= ~E1000_CTRL_MDIO;
3377 
3378         E1000_WRITE_REG(hw, CTRL, ctrl);
3379         E1000_WRITE_FLUSH(hw);
3380 
3381         udelay(10);
3382 
3383         e1000_raise_mdi_clk(hw, &ctrl);
3384         e1000_lower_mdi_clk(hw, &ctrl);
3385 
3386         mask = mask >> 1;
3387     }
3388 }
3389 
3390 /******************************************************************************
3391 * Shifts data bits in from the PHY
3392 *
3393 * hw - Struct containing variables accessed by shared code
3394 *
3395 * Bits are shifted in in MSB to LSB order.
3396 ******************************************************************************/
3397 static uint16_t
e1000_shift_in_mdi_bits(struct e1000_hw * hw)3398 e1000_shift_in_mdi_bits(struct e1000_hw *hw)
3399 {
3400     uint32_t ctrl;
3401     uint16_t data = 0;
3402     uint8_t i;
3403 
3404     /* In order to read a register from the PHY, we need to shift in a total
3405      * of 18 bits from the PHY. The first two bit (turnaround) times are used
3406      * to avoid contention on the MDIO pin when a read operation is performed.
3407      * These two bits are ignored by us and thrown away. Bits are "shifted in"
3408      * by raising the input to the Management Data Clock (setting the MDC bit),
3409      * and then reading the value of the MDIO bit.
3410      */
3411     ctrl = E1000_READ_REG(hw, CTRL);
3412 
3413     /* Clear MDIO_DIR (SWDPIO1) to indicate this bit is to be used as input. */
3414     ctrl &= ~E1000_CTRL_MDIO_DIR;
3415     ctrl &= ~E1000_CTRL_MDIO;
3416 
3417     E1000_WRITE_REG(hw, CTRL, ctrl);
3418     E1000_WRITE_FLUSH(hw);
3419 
3420     /* Raise and Lower the clock before reading in the data. This accounts for
3421      * the turnaround bits. The first clock occurred when we clocked out the
3422      * last bit of the Register Address.
3423      */
3424     e1000_raise_mdi_clk(hw, &ctrl);
3425     e1000_lower_mdi_clk(hw, &ctrl);
3426 
3427     for (data = 0, i = 0; i < 16; i++) {
3428         data = data << 1;
3429         e1000_raise_mdi_clk(hw, &ctrl);
3430         ctrl = E1000_READ_REG(hw, CTRL);
3431         /* Check to see if we shifted in a "1". */
3432         if (ctrl & E1000_CTRL_MDIO)
3433             data |= 1;
3434         e1000_lower_mdi_clk(hw, &ctrl);
3435     }
3436 
3437     e1000_raise_mdi_clk(hw, &ctrl);
3438     e1000_lower_mdi_clk(hw, &ctrl);
3439 
3440     return data;
3441 }
3442 
3443 static int32_t
e1000_swfw_sync_acquire(struct e1000_hw * hw,uint16_t mask)3444 e1000_swfw_sync_acquire(struct e1000_hw *hw, uint16_t mask)
3445 {
3446     uint32_t swfw_sync = 0;
3447     uint32_t swmask = mask;
3448     uint32_t fwmask = mask << 16;
3449     int32_t timeout = 200;
3450 
3451     DEBUGFUNC("e1000_swfw_sync_acquire");
3452 
3453     if (hw->swfwhw_semaphore_present)
3454         return e1000_get_software_flag(hw);
3455 
3456     if (!hw->swfw_sync_present)
3457         return e1000_get_hw_eeprom_semaphore(hw);
3458 
3459     while (timeout) {
3460             if (e1000_get_hw_eeprom_semaphore(hw))
3461                 return -E1000_ERR_SWFW_SYNC;
3462 
3463             swfw_sync = E1000_READ_REG(hw, SW_FW_SYNC);
3464             if (!(swfw_sync & (fwmask | swmask))) {
3465                 break;
3466             }
3467 
3468             /* firmware currently using resource (fwmask) */
3469             /* or other software thread currently using resource (swmask) */
3470             e1000_put_hw_eeprom_semaphore(hw);
3471             mdelay(5);
3472             timeout--;
3473     }
3474 
3475     if (!timeout) {
3476         DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
3477         return -E1000_ERR_SWFW_SYNC;
3478     }
3479 
3480     swfw_sync |= swmask;
3481     E1000_WRITE_REG(hw, SW_FW_SYNC, swfw_sync);
3482 
3483     e1000_put_hw_eeprom_semaphore(hw);
3484     return E1000_SUCCESS;
3485 }
3486 
3487 static void
e1000_swfw_sync_release(struct e1000_hw * hw,uint16_t mask)3488 e1000_swfw_sync_release(struct e1000_hw *hw, uint16_t mask)
3489 {
3490     uint32_t swfw_sync;
3491     uint32_t swmask = mask;
3492 
3493     DEBUGFUNC("e1000_swfw_sync_release");
3494 
3495     if (hw->swfwhw_semaphore_present) {
3496         e1000_release_software_flag(hw);
3497         return;
3498     }
3499 
3500     if (!hw->swfw_sync_present) {
3501         e1000_put_hw_eeprom_semaphore(hw);
3502         return;
3503     }
3504 
3505     /* if (e1000_get_hw_eeprom_semaphore(hw))
3506      *    return -E1000_ERR_SWFW_SYNC; */
3507     while (e1000_get_hw_eeprom_semaphore(hw) != E1000_SUCCESS);
3508         /* empty */
3509 
3510     swfw_sync = E1000_READ_REG(hw, SW_FW_SYNC);
3511     swfw_sync &= ~swmask;
3512     E1000_WRITE_REG(hw, SW_FW_SYNC, swfw_sync);
3513 
3514     e1000_put_hw_eeprom_semaphore(hw);
3515 }
3516 
3517 /*****************************************************************************
3518 * Reads the value from a PHY register, if the value is on a specific non zero
3519 * page, sets the page first.
3520 * hw - Struct containing variables accessed by shared code
3521 * reg_addr - address of the PHY register to read
3522 ******************************************************************************/
3523 int32_t
e1000_read_phy_reg(struct e1000_hw * hw,uint32_t reg_addr,uint16_t * phy_data)3524 e1000_read_phy_reg(struct e1000_hw *hw,
3525                    uint32_t reg_addr,
3526                    uint16_t *phy_data)
3527 {
3528     uint32_t ret_val;
3529     uint16_t swfw;
3530 
3531     DEBUGFUNC("e1000_read_phy_reg");
3532 
3533     if ((hw->mac_type == e1000_80003es2lan || hw->mac_type == e1000_82576) &&
3534         (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {
3535         swfw = E1000_SWFW_PHY1_SM;
3536     } else {
3537         swfw = E1000_SWFW_PHY0_SM;
3538     }
3539     if (e1000_swfw_sync_acquire(hw, swfw))
3540         return -E1000_ERR_SWFW_SYNC;
3541 
3542     if ((hw->phy_type == e1000_phy_igp ||
3543         hw->phy_type == e1000_phy_igp_3 ||
3544         hw->phy_type == e1000_phy_igp_2) &&
3545        (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
3546         ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
3547                                          (uint16_t)reg_addr);
3548         if (ret_val) {
3549             e1000_swfw_sync_release(hw, swfw);
3550             return ret_val;
3551         }
3552     } else if (hw->phy_type == e1000_phy_gg82563) {
3553         if (((reg_addr & MAX_PHY_REG_ADDRESS) > MAX_PHY_MULTI_PAGE_REG) ||
3554             (hw->mac_type == e1000_80003es2lan)) {
3555             /* Select Configuration Page */
3556             if ((reg_addr & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
3557                 ret_val = e1000_write_phy_reg_ex(hw, GG82563_PHY_PAGE_SELECT,
3558                           (uint16_t)((uint16_t)reg_addr >> GG82563_PAGE_SHIFT));
3559             } else {
3560                 /* Use Alternative Page Select register to access
3561                  * registers 30 and 31
3562                  */
3563                 ret_val = e1000_write_phy_reg_ex(hw,
3564                                                  GG82563_PHY_PAGE_SELECT_ALT,
3565                           (uint16_t)((uint16_t)reg_addr >> GG82563_PAGE_SHIFT));
3566             }
3567 
3568             if (ret_val) {
3569                 e1000_swfw_sync_release(hw, swfw);
3570                 return ret_val;
3571             }
3572         }
3573     }
3574 
3575     ret_val = e1000_read_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
3576                                     phy_data);
3577 
3578     e1000_swfw_sync_release(hw, swfw);
3579     return ret_val;
3580 }
3581 
3582 static int32_t
e1000_read_phy_reg_ex(struct e1000_hw * hw,uint32_t reg_addr,uint16_t * phy_data)3583 e1000_read_phy_reg_ex(struct e1000_hw *hw, uint32_t reg_addr,
3584                       uint16_t *phy_data)
3585 {
3586     uint32_t i;
3587     uint32_t mdic = 0;
3588     const uint32_t phy_addr = 1;
3589 
3590     DEBUGFUNC("e1000_read_phy_reg_ex");
3591 
3592     if (reg_addr > MAX_PHY_REG_ADDRESS) {
3593         DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
3594         return -E1000_ERR_PARAM;
3595     }
3596 
3597     if (hw->mac_type > e1000_82543) {
3598         /* Set up Op-code, Phy Address, and register address in the MDI
3599          * Control register.  The MAC will take care of interfacing with the
3600          * PHY to retrieve the desired data.
3601          */
3602         mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
3603                 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3604                 (E1000_MDIC_OP_READ));
3605 
3606         E1000_WRITE_REG(hw, MDIC, mdic);
3607 
3608         /* Poll the ready bit to see if the MDI read completed */
3609         for (i = 0; i < 64; i++) {
3610             udelay(50);
3611             mdic = E1000_READ_REG(hw, MDIC);
3612             if (mdic & E1000_MDIC_READY) break;
3613         }
3614         if (!(mdic & E1000_MDIC_READY)) {
3615             DEBUGOUT("MDI Read did not complete\n");
3616             return -E1000_ERR_PHY;
3617         }
3618         if (mdic & E1000_MDIC_ERROR) {
3619             DEBUGOUT("MDI Error\n");
3620             return -E1000_ERR_PHY;
3621         }
3622         *phy_data = (uint16_t) mdic;
3623     } else {
3624         /* We must first send a preamble through the MDIO pin to signal the
3625          * beginning of an MII instruction.  This is done by sending 32
3626          * consecutive "1" bits.
3627          */
3628         e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
3629 
3630         /* Now combine the next few fields that are required for a read
3631          * operation.  We use this method instead of calling the
3632          * e1000_shift_out_mdi_bits routine five different times. The format of
3633          * a MII read instruction consists of a shift out of 14 bits and is
3634          * defined as follows:
3635          *    <Preamble><SOF><Op Code><Phy Addr><Reg Addr>
3636          * followed by a shift in of 18 bits.  This first two bits shifted in
3637          * are TurnAround bits used to avoid contention on the MDIO pin when a
3638          * READ operation is performed.  These two bits are thrown away
3639          * followed by a shift in of 16 bits which contains the desired data.
3640          */
3641         mdic = ((reg_addr) | (phy_addr << 5) |
3642                 (PHY_OP_READ << 10) | (PHY_SOF << 12));
3643 
3644         e1000_shift_out_mdi_bits(hw, mdic, 14);
3645 
3646         /* Now that we've shifted out the read command to the MII, we need to
3647          * "shift in" the 16-bit value (18 total bits) of the requested PHY
3648          * register address.
3649          */
3650         *phy_data = e1000_shift_in_mdi_bits(hw);
3651     }
3652     return E1000_SUCCESS;
3653 }
3654 
3655 /******************************************************************************
3656 * Writes a value to a PHY register
3657 *
3658 * hw - Struct containing variables accessed by shared code
3659 * reg_addr - address of the PHY register to write
3660 * data - data to write to the PHY
3661 ******************************************************************************/
3662 int32_t
e1000_write_phy_reg(struct e1000_hw * hw,uint32_t reg_addr,uint16_t phy_data)3663 e1000_write_phy_reg(struct e1000_hw *hw, uint32_t reg_addr,
3664                     uint16_t phy_data)
3665 {
3666     uint32_t ret_val;
3667     uint16_t swfw;
3668 
3669     DEBUGFUNC("e1000_write_phy_reg");
3670 
3671     if ((hw->mac_type == e1000_80003es2lan || hw->mac_type == e1000_82576) &&
3672         (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {
3673         swfw = E1000_SWFW_PHY1_SM;
3674     } else {
3675         swfw = E1000_SWFW_PHY0_SM;
3676     }
3677     if (e1000_swfw_sync_acquire(hw, swfw))
3678         return -E1000_ERR_SWFW_SYNC;
3679 
3680     if ((hw->phy_type == e1000_phy_igp ||
3681         hw->phy_type == e1000_phy_igp_3 ||
3682         hw->phy_type == e1000_phy_igp_2) &&
3683        (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
3684         ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
3685                                          (uint16_t)reg_addr);
3686         if (ret_val) {
3687             e1000_swfw_sync_release(hw, swfw);
3688             return ret_val;
3689         }
3690     } else if (hw->phy_type == e1000_phy_gg82563) {
3691         if (((reg_addr & MAX_PHY_REG_ADDRESS) > MAX_PHY_MULTI_PAGE_REG) ||
3692             (hw->mac_type == e1000_80003es2lan)) {
3693             /* Select Configuration Page */
3694             if ((reg_addr & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
3695                 ret_val = e1000_write_phy_reg_ex(hw, GG82563_PHY_PAGE_SELECT,
3696                           (uint16_t)((uint16_t)reg_addr >> GG82563_PAGE_SHIFT));
3697             } else {
3698                 /* Use Alternative Page Select register to access
3699                  * registers 30 and 31
3700                  */
3701                 ret_val = e1000_write_phy_reg_ex(hw,
3702                                                  GG82563_PHY_PAGE_SELECT_ALT,
3703                           (uint16_t)((uint16_t)reg_addr >> GG82563_PAGE_SHIFT));
3704             }
3705 
3706             if (ret_val) {
3707                 e1000_swfw_sync_release(hw, swfw);
3708                 return ret_val;
3709             }
3710         }
3711     }
3712 
3713     ret_val = e1000_write_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
3714                                      phy_data);
3715 
3716     e1000_swfw_sync_release(hw, swfw);
3717     return ret_val;
3718 }
3719 
3720 static int32_t
e1000_write_phy_reg_ex(struct e1000_hw * hw,uint32_t reg_addr,uint16_t phy_data)3721 e1000_write_phy_reg_ex(struct e1000_hw *hw, uint32_t reg_addr,
3722                        uint16_t phy_data)
3723 {
3724     uint32_t i;
3725     uint32_t mdic = 0;
3726     const uint32_t phy_addr = 1;
3727 
3728     DEBUGFUNC("e1000_write_phy_reg_ex");
3729 
3730     if (reg_addr > MAX_PHY_REG_ADDRESS) {
3731         DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
3732         return -E1000_ERR_PARAM;
3733     }
3734 
3735     if (hw->mac_type > e1000_82543) {
3736         /* Set up Op-code, Phy Address, register address, and data intended
3737          * for the PHY register in the MDI Control register.  The MAC will take
3738          * care of interfacing with the PHY to send the desired data.
3739          */
3740         mdic = (((uint32_t) phy_data) |
3741                 (reg_addr << E1000_MDIC_REG_SHIFT) |
3742                 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3743                 (E1000_MDIC_OP_WRITE));
3744 
3745         E1000_WRITE_REG(hw, MDIC, mdic);
3746 
3747         /* Poll the ready bit to see if the MDI read completed */
3748         for (i = 0; i < 641; i++) {
3749             udelay(5);
3750             mdic = E1000_READ_REG(hw, MDIC);
3751             if (mdic & E1000_MDIC_READY) break;
3752         }
3753         if (!(mdic & E1000_MDIC_READY)) {
3754             DEBUGOUT("MDI Write did not complete\n");
3755             return -E1000_ERR_PHY;
3756         }
3757     } else {
3758         /* We'll need to use the SW defined pins to shift the write command
3759          * out to the PHY. We first send a preamble to the PHY to signal the
3760          * beginning of the MII instruction.  This is done by sending 32
3761          * consecutive "1" bits.
3762          */
3763         e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
3764 
3765         /* Now combine the remaining required fields that will indicate a
3766          * write operation. We use this method instead of calling the
3767          * e1000_shift_out_mdi_bits routine for each field in the command. The
3768          * format of a MII write instruction is as follows:
3769          * <Preamble><SOF><Op Code><Phy Addr><Reg Addr><Turnaround><Data>.
3770          */
3771         mdic = ((PHY_TURNAROUND) | (reg_addr << 2) | (phy_addr << 7) |
3772                 (PHY_OP_WRITE << 12) | (PHY_SOF << 14));
3773         mdic <<= 16;
3774         mdic |= (uint32_t) phy_data;
3775 
3776         e1000_shift_out_mdi_bits(hw, mdic, 32);
3777     }
3778 
3779     return E1000_SUCCESS;
3780 }
3781 
3782 static int32_t
e1000_read_kmrn_reg(struct e1000_hw * hw,uint32_t reg_addr,uint16_t * data)3783 e1000_read_kmrn_reg(struct e1000_hw *hw,
3784                     uint32_t reg_addr,
3785                     uint16_t *data)
3786 {
3787     uint32_t reg_val;
3788     uint16_t swfw;
3789     DEBUGFUNC("e1000_read_kmrn_reg");
3790 
3791     if ((hw->mac_type == e1000_80003es2lan || hw->mac_type == e1000_82576) &&
3792         (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {
3793         swfw = E1000_SWFW_PHY1_SM;
3794     } else {
3795         swfw = E1000_SWFW_PHY0_SM;
3796     }
3797     if (e1000_swfw_sync_acquire(hw, swfw))
3798         return -E1000_ERR_SWFW_SYNC;
3799 
3800     /* Write register address */
3801     reg_val = ((reg_addr << E1000_KUMCTRLSTA_OFFSET_SHIFT) &
3802               E1000_KUMCTRLSTA_OFFSET) |
3803               E1000_KUMCTRLSTA_REN;
3804     E1000_WRITE_REG(hw, KUMCTRLSTA, reg_val);
3805     udelay(2);
3806 
3807     /* Read the data returned */
3808     reg_val = E1000_READ_REG(hw, KUMCTRLSTA);
3809     *data = (uint16_t)reg_val;
3810 
3811     e1000_swfw_sync_release(hw, swfw);
3812     return E1000_SUCCESS;
3813 }
3814 
3815 static int32_t
e1000_write_kmrn_reg(struct e1000_hw * hw,uint32_t reg_addr,uint16_t data)3816 e1000_write_kmrn_reg(struct e1000_hw *hw,
3817                      uint32_t reg_addr,
3818                      uint16_t data)
3819 {
3820     uint32_t reg_val;
3821     uint16_t swfw;
3822     DEBUGFUNC("e1000_write_kmrn_reg");
3823 
3824     if ((hw->mac_type == e1000_80003es2lan || hw->mac_type == e1000_82576) &&
3825         (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {
3826         swfw = E1000_SWFW_PHY1_SM;
3827     } else {
3828         swfw = E1000_SWFW_PHY0_SM;
3829     }
3830     if (e1000_swfw_sync_acquire(hw, swfw))
3831         return -E1000_ERR_SWFW_SYNC;
3832 
3833     reg_val = ((reg_addr << E1000_KUMCTRLSTA_OFFSET_SHIFT) &
3834               E1000_KUMCTRLSTA_OFFSET) | data;
3835     E1000_WRITE_REG(hw, KUMCTRLSTA, reg_val);
3836     udelay(2);
3837 
3838     e1000_swfw_sync_release(hw, swfw);
3839     return E1000_SUCCESS;
3840 }
3841 
3842 /******************************************************************************
3843 * Returns the PHY to the power-on reset state
3844 *
3845 * hw - Struct containing variables accessed by shared code
3846 ******************************************************************************/
3847 int32_t
e1000_phy_hw_reset(struct e1000_hw * hw)3848 e1000_phy_hw_reset(struct e1000_hw *hw)
3849 {
3850     uint32_t ctrl, ctrl_ext;
3851     uint32_t led_ctrl;
3852     int32_t ret_val;
3853     uint16_t swfw;
3854 
3855     DEBUGFUNC("e1000_phy_hw_reset");
3856 
3857     /* In the case of the phy reset being blocked, it's not an error, we
3858      * simply return success without performing the reset. */
3859     ret_val = e1000_check_phy_reset_block(hw);
3860     if (ret_val)
3861         return E1000_SUCCESS;
3862 
3863     DEBUGOUT("Resetting Phy...\n");
3864 
3865     if (hw->mac_type > e1000_82543) {
3866         if ((hw->mac_type == e1000_80003es2lan ||
3867              hw->mac_type == e1000_82576) &&
3868             (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) {
3869             swfw = E1000_SWFW_PHY1_SM;
3870         } else {
3871             swfw = E1000_SWFW_PHY0_SM;
3872         }
3873         if (e1000_swfw_sync_acquire(hw, swfw)) {
3874             DEBUGOUT("Unable to acquire swfw sync\n");
3875             return -E1000_ERR_SWFW_SYNC;
3876         }
3877         /* Read the device control register and assert the E1000_CTRL_PHY_RST
3878          * bit. Then, take it out of reset.
3879          * For pre-e1000_82571 hardware, we delay for 10ms between the assert
3880          * and deassert.  For e1000_82571 hardware and later, we instead delay
3881          * for 50us between and 10ms after the deassertion.
3882          */
3883         ctrl = E1000_READ_REG(hw, CTRL);
3884         E1000_WRITE_REG(hw, CTRL, ctrl | E1000_CTRL_PHY_RST);
3885         E1000_WRITE_FLUSH(hw);
3886 
3887         if (hw->mac_type < e1000_82571)
3888             msleep(10);
3889         else
3890             udelay(100);
3891 
3892         E1000_WRITE_REG(hw, CTRL, ctrl);
3893         E1000_WRITE_FLUSH(hw);
3894 
3895         if (hw->mac_type >= e1000_82571)
3896             mdelay(10);
3897 
3898         e1000_swfw_sync_release(hw, swfw);
3899     } else {
3900         /* Read the Extended Device Control Register, assert the PHY_RESET_DIR
3901          * bit to put the PHY into reset. Then, take it out of reset.
3902          */
3903         ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
3904         ctrl_ext |= E1000_CTRL_EXT_SDP4_DIR;
3905         ctrl_ext &= ~E1000_CTRL_EXT_SDP4_DATA;
3906         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
3907         E1000_WRITE_FLUSH(hw);
3908         msleep(10);
3909         ctrl_ext |= E1000_CTRL_EXT_SDP4_DATA;
3910         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
3911         E1000_WRITE_FLUSH(hw);
3912     }
3913     udelay(150);
3914 
3915     if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
3916         /* Configure activity LED after PHY reset */
3917         led_ctrl = E1000_READ_REG(hw, LEDCTL);
3918         led_ctrl &= IGP_ACTIVITY_LED_MASK;
3919         led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
3920         E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
3921     }
3922 
3923     /* Wait for FW to finish PHY configuration. */
3924     ret_val = e1000_get_phy_cfg_done(hw);
3925     if (ret_val != E1000_SUCCESS)
3926         return ret_val;
3927     e1000_release_software_semaphore(hw);
3928 
3929     if ((hw->mac_type == e1000_ich8lan) && (hw->phy_type == e1000_phy_igp_3))
3930         ret_val = e1000_init_lcd_from_nvm(hw);
3931 
3932     return ret_val;
3933 }
3934 
3935 /******************************************************************************
3936 * Resets the PHY
3937 *
3938 * hw - Struct containing variables accessed by shared code
3939 *
3940 * Sets bit 15 of the MII Control register
3941 ******************************************************************************/
3942 int32_t
e1000_phy_reset(struct e1000_hw * hw)3943 e1000_phy_reset(struct e1000_hw *hw)
3944 {
3945     int32_t ret_val;
3946     uint16_t phy_data;
3947 
3948     DEBUGFUNC("e1000_phy_reset");
3949 
3950     /* In the case of the phy reset being blocked, it's not an error, we
3951      * simply return success without performing the reset. */
3952     ret_val = e1000_check_phy_reset_block(hw);
3953     if (ret_val)
3954         return E1000_SUCCESS;
3955 
3956     switch (hw->phy_type) {
3957     case e1000_phy_igp:
3958     case e1000_phy_igp_2:
3959     case e1000_phy_igp_3:
3960     case e1000_phy_ife:
3961         ret_val = e1000_phy_hw_reset(hw);
3962         if (ret_val)
3963             return ret_val;
3964         break;
3965     default:
3966         ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
3967         if (ret_val)
3968             return ret_val;
3969 
3970         phy_data |= MII_CR_RESET;
3971         ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
3972         if (ret_val)
3973             return ret_val;
3974 
3975         udelay(1);
3976         break;
3977     }
3978 
3979     if (hw->phy_type == e1000_phy_igp || hw->phy_type == e1000_phy_igp_2)
3980         e1000_phy_init_script(hw);
3981 
3982     return E1000_SUCCESS;
3983 }
3984 
3985 /******************************************************************************
3986 * Work-around for 82566 power-down: on D3 entry-
3987 * 1) disable gigabit link
3988 * 2) write VR power-down enable
3989 * 3) read it back
3990 * if successful continue, else issue LCD reset and repeat
3991 *
3992 * hw - struct containing variables accessed by shared code
3993 ******************************************************************************/
3994 void
e1000_phy_powerdown_workaround(struct e1000_hw * hw)3995 e1000_phy_powerdown_workaround(struct e1000_hw *hw)
3996 {
3997     int32_t reg;
3998     uint16_t phy_data;
3999     int32_t retry = 0;
4000 
4001     DEBUGFUNC("e1000_phy_powerdown_workaround");
4002 
4003     if (hw->phy_type != e1000_phy_igp_3)
4004         return;
4005 
4006     do {
4007         /* Disable link */
4008         reg = E1000_READ_REG(hw, PHY_CTRL);
4009         E1000_WRITE_REG(hw, PHY_CTRL, reg | E1000_PHY_CTRL_GBE_DISABLE |
4010                         E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
4011 
4012         /* Write VR power-down enable - bits 9:8 should be 10b */
4013         e1000_read_phy_reg(hw, IGP3_VR_CTRL, &phy_data);
4014         phy_data |= (1 << 9);
4015         phy_data &= ~(1 << 8);
4016         e1000_write_phy_reg(hw, IGP3_VR_CTRL, phy_data);
4017 
4018         /* Read it back and test */
4019         e1000_read_phy_reg(hw, IGP3_VR_CTRL, &phy_data);
4020         if (((phy_data & IGP3_VR_CTRL_MODE_MASK) == IGP3_VR_CTRL_MODE_SHUT) || retry)
4021             break;
4022 
4023         /* Issue PHY reset and repeat at most one more time */
4024         reg = E1000_READ_REG(hw, CTRL);
4025         E1000_WRITE_REG(hw, CTRL, reg | E1000_CTRL_PHY_RST);
4026         retry++;
4027     } while (retry);
4028 
4029     return;
4030 
4031 }
4032 
4033 /******************************************************************************
4034 * Work-around for 82566 Kumeran PCS lock loss:
4035 * On link status change (i.e. PCI reset, speed change) and link is up and
4036 * speed is gigabit-
4037 * 0) if workaround is optionally disabled do nothing
4038 * 1) wait 1ms for Kumeran link to come up
4039 * 2) check Kumeran Diagnostic register PCS lock loss bit
4040 * 3) if not set the link is locked (all is good), otherwise...
4041 * 4) reset the PHY
4042 * 5) repeat up to 10 times
4043 * Note: this is only called for IGP3 copper when speed is 1gb.
4044 *
4045 * hw - struct containing variables accessed by shared code
4046 ******************************************************************************/
4047 static int32_t
e1000_kumeran_lock_loss_workaround(struct e1000_hw * hw)4048 e1000_kumeran_lock_loss_workaround(struct e1000_hw *hw)
4049 {
4050     int32_t ret_val;
4051     int32_t reg;
4052     int32_t cnt;
4053     uint16_t phy_data;
4054 
4055     if (hw->kmrn_lock_loss_workaround_disabled)
4056         return E1000_SUCCESS;
4057 
4058     /* Make sure link is up before proceeding.  If not just return.
4059      * Attempting this while link is negotiating fouled up link
4060      * stability */
4061     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4062     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4063 
4064     if (phy_data & MII_SR_LINK_STATUS) {
4065         for (cnt = 0; cnt < 10; cnt++) {
4066             /* read once to clear */
4067             ret_val = e1000_read_phy_reg(hw, IGP3_KMRN_DIAG, &phy_data);
4068             if (ret_val)
4069                 return ret_val;
4070             /* and again to get new status */
4071             ret_val = e1000_read_phy_reg(hw, IGP3_KMRN_DIAG, &phy_data);
4072             if (ret_val)
4073                 return ret_val;
4074 
4075             /* check for PCS lock */
4076             if (!(phy_data & IGP3_KMRN_DIAG_PCS_LOCK_LOSS))
4077                 return E1000_SUCCESS;
4078 
4079             /* Issue PHY reset */
4080             e1000_phy_hw_reset(hw);
4081             mdelay(5);
4082         }
4083         /* Disable GigE link negotiation */
4084         reg = E1000_READ_REG(hw, PHY_CTRL);
4085         E1000_WRITE_REG(hw, PHY_CTRL, reg | E1000_PHY_CTRL_GBE_DISABLE |
4086                         E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
4087 
4088         /* unable to acquire PCS lock */
4089         return E1000_ERR_PHY;
4090     }
4091 
4092     return E1000_SUCCESS;
4093 }
4094 
4095 /******************************************************************************
4096 * Probes the expected PHY address for known PHY IDs
4097 *
4098 * hw - Struct containing variables accessed by shared code
4099 ******************************************************************************/
4100 static int32_t
e1000_detect_gig_phy(struct e1000_hw * hw)4101 e1000_detect_gig_phy(struct e1000_hw *hw)
4102 {
4103     int32_t phy_init_status, ret_val;
4104     uint16_t phy_id_high, phy_id_low;
4105     boolean_t match = FALSE;
4106 
4107     DEBUGFUNC("e1000_detect_gig_phy");
4108 
4109     if (hw->phy_id != 0)
4110         return E1000_SUCCESS;
4111 
4112     /* The 82571 firmware may still be configuring the PHY.  In this
4113      * case, we cannot access the PHY until the configuration is done.  So
4114      * we explicitly set the PHY values. */
4115     if (hw->mac_type == e1000_82571 ||
4116         hw->mac_type == e1000_82572) {
4117         hw->phy_id = IGP01E1000_I_PHY_ID;
4118         hw->phy_type = e1000_phy_igp_2;
4119         return E1000_SUCCESS;
4120     }
4121 
4122     /* ESB-2 PHY reads require e1000_phy_gg82563 to be set because of a work-
4123      * around that forces PHY page 0 to be set or the reads fail.  The rest of
4124      * the code in this routine uses e1000_read_phy_reg to read the PHY ID.
4125      * So for ESB-2 we need to have this set so our reads won't fail.  If the
4126      * attached PHY is not a e1000_phy_gg82563, the routines below will figure
4127      * this out as well. */
4128     if (hw->mac_type == e1000_80003es2lan)
4129         hw->phy_type = e1000_phy_gg82563;
4130 
4131     /* Read the PHY ID Registers to identify which PHY is onboard. */
4132     ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high);
4133     if (ret_val)
4134         return ret_val;
4135 
4136     hw->phy_id = (uint32_t) (phy_id_high << 16);
4137     udelay(20);
4138     ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low);
4139     if (ret_val)
4140         return ret_val;
4141 
4142     hw->phy_id |= (uint32_t) (phy_id_low & PHY_REVISION_MASK);
4143     hw->phy_revision = (uint32_t) phy_id_low & ~PHY_REVISION_MASK;
4144 
4145     switch (hw->mac_type) {
4146     case e1000_82543:
4147         if (hw->phy_id == M88E1000_E_PHY_ID) match = TRUE;
4148         break;
4149     case e1000_82544:
4150         if (hw->phy_id == M88E1000_I_PHY_ID) match = TRUE;
4151         break;
4152     case e1000_82540:
4153     case e1000_82545:
4154     case e1000_82545_rev_3:
4155     case e1000_82546:
4156     case e1000_82546_rev_3:
4157         if (hw->phy_id == M88E1011_I_PHY_ID) match = TRUE;
4158         break;
4159     case e1000_82541:
4160     case e1000_82541_rev_2:
4161     case e1000_82547:
4162     case e1000_82547_rev_2:
4163         if (hw->phy_id == IGP01E1000_I_PHY_ID) match = TRUE;
4164         break;
4165     case e1000_82573:
4166         if (hw->phy_id == M88E1111_I_PHY_ID) match = TRUE;
4167         break;
4168     case e1000_80003es2lan:
4169         if (hw->phy_id == GG82563_E_PHY_ID) match = TRUE;
4170         break;
4171     case e1000_ich8lan:
4172         if (hw->phy_id == IGP03E1000_E_PHY_ID) match = TRUE;
4173         if (hw->phy_id == IFE_E_PHY_ID) match = TRUE;
4174         if (hw->phy_id == IFE_PLUS_E_PHY_ID) match = TRUE;
4175         if (hw->phy_id == IFE_C_E_PHY_ID) match = TRUE;
4176         break;
4177     case e1000_82576:
4178         match = TRUE;
4179         break;
4180     default:
4181         DEBUGOUT1("Invalid MAC type %d\n", hw->mac_type);
4182         return -E1000_ERR_CONFIG;
4183     }
4184     phy_init_status = e1000_set_phy_type(hw);
4185 
4186     if ((match) && (phy_init_status == E1000_SUCCESS)) {
4187         DEBUGOUT1("PHY ID %#08x detected\n", hw->phy_id);
4188         return E1000_SUCCESS;
4189     }
4190     DEBUGOUT1("Invalid PHY ID %#08x\n", hw->phy_id);
4191     return -E1000_ERR_PHY;
4192 }
4193 
4194 /******************************************************************************
4195 * Resets the PHY's DSP
4196 *
4197 * hw - Struct containing variables accessed by shared code
4198 ******************************************************************************/
4199 static int32_t
e1000_phy_reset_dsp(struct e1000_hw * hw)4200 e1000_phy_reset_dsp(struct e1000_hw *hw)
4201 {
4202     int32_t ret_val;
4203     DEBUGFUNC("e1000_phy_reset_dsp");
4204 
4205     do {
4206         if (hw->phy_type != e1000_phy_gg82563) {
4207             ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
4208             if (ret_val) break;
4209         }
4210         ret_val = e1000_write_phy_reg(hw, 30, 0x00c1);
4211         if (ret_val) break;
4212         ret_val = e1000_write_phy_reg(hw, 30, 0x0000);
4213         if (ret_val) break;
4214         ret_val = E1000_SUCCESS;
4215     } while (0);
4216 
4217     return ret_val;
4218 }
4219 
4220 /******************************************************************************
4221 * Get PHY information from various PHY registers for igp PHY only.
4222 *
4223 * hw - Struct containing variables accessed by shared code
4224 * phy_info - PHY information structure
4225 ******************************************************************************/
4226 static int32_t
e1000_phy_igp_get_info(struct e1000_hw * hw,struct e1000_phy_info * phy_info)4227 e1000_phy_igp_get_info(struct e1000_hw *hw,
4228                        struct e1000_phy_info *phy_info)
4229 {
4230     int32_t ret_val;
4231     uint16_t phy_data, min_length, max_length, average;
4232     e1000_rev_polarity polarity;
4233 
4234     DEBUGFUNC("e1000_phy_igp_get_info");
4235 
4236     /* The downshift status is checked only once, after link is established,
4237      * and it stored in the hw->speed_downgraded parameter. */
4238     phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4239 
4240     /* IGP01E1000 does not need to support it. */
4241     phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
4242 
4243     /* IGP01E1000 always correct polarity reversal */
4244     phy_info->polarity_correction = e1000_polarity_reversal_enabled;
4245 
4246     /* Check polarity status */
4247     ret_val = e1000_check_polarity(hw, &polarity);
4248     if (ret_val)
4249         return ret_val;
4250 
4251     phy_info->cable_polarity = polarity;
4252 
4253     ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data);
4254     if (ret_val)
4255         return ret_val;
4256 
4257     phy_info->mdix_mode = (e1000_auto_x_mode)((phy_data & IGP01E1000_PSSR_MDIX) >>
4258                           IGP01E1000_PSSR_MDIX_SHIFT);
4259 
4260     if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
4261        IGP01E1000_PSSR_SPEED_1000MBPS) {
4262         /* Local/Remote Receiver Information are only valid at 1000 Mbps */
4263         ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
4264         if (ret_val)
4265             return ret_val;
4266 
4267         phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
4268                              SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
4269                              e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4270         phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
4271                               SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
4272                               e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4273 
4274         /* Get cable length */
4275         ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
4276         if (ret_val)
4277             return ret_val;
4278 
4279         /* Translate to old method */
4280         average = (max_length + min_length) / 2;
4281 
4282         if (average <= e1000_igp_cable_length_50)
4283             phy_info->cable_length = e1000_cable_length_50;
4284         else if (average <= e1000_igp_cable_length_80)
4285             phy_info->cable_length = e1000_cable_length_50_80;
4286         else if (average <= e1000_igp_cable_length_110)
4287             phy_info->cable_length = e1000_cable_length_80_110;
4288         else if (average <= e1000_igp_cable_length_140)
4289             phy_info->cable_length = e1000_cable_length_110_140;
4290         else
4291             phy_info->cable_length = e1000_cable_length_140;
4292     }
4293 
4294     return E1000_SUCCESS;
4295 }
4296 
4297 /******************************************************************************
4298 * Get PHY information from various PHY registers for ife PHY only.
4299 *
4300 * hw - Struct containing variables accessed by shared code
4301 * phy_info - PHY information structure
4302 ******************************************************************************/
4303 static int32_t
e1000_phy_ife_get_info(struct e1000_hw * hw,struct e1000_phy_info * phy_info)4304 e1000_phy_ife_get_info(struct e1000_hw *hw,
4305                        struct e1000_phy_info *phy_info)
4306 {
4307     int32_t ret_val;
4308     uint16_t phy_data;
4309     e1000_rev_polarity polarity;
4310 
4311     DEBUGFUNC("e1000_phy_ife_get_info");
4312 
4313     phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4314     phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
4315 
4316     ret_val = e1000_read_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL, &phy_data);
4317     if (ret_val)
4318         return ret_val;
4319     phy_info->polarity_correction =
4320                         ((phy_data & IFE_PSC_AUTO_POLARITY_DISABLE) >>
4321                         IFE_PSC_AUTO_POLARITY_DISABLE_SHIFT) ?
4322                         e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
4323 
4324     if (phy_info->polarity_correction == e1000_polarity_reversal_enabled) {
4325         ret_val = e1000_check_polarity(hw, &polarity);
4326         if (ret_val)
4327             return ret_val;
4328     } else {
4329         /* Polarity is forced. */
4330         polarity = ((phy_data & IFE_PSC_FORCE_POLARITY) >>
4331                      IFE_PSC_FORCE_POLARITY_SHIFT) ?
4332                      e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
4333     }
4334     phy_info->cable_polarity = polarity;
4335 
4336     ret_val = e1000_read_phy_reg(hw, IFE_PHY_MDIX_CONTROL, &phy_data);
4337     if (ret_val)
4338         return ret_val;
4339 
4340     phy_info->mdix_mode = (e1000_auto_x_mode)
4341                      ((phy_data & (IFE_PMC_AUTO_MDIX | IFE_PMC_FORCE_MDIX)) >>
4342                      IFE_PMC_MDIX_MODE_SHIFT);
4343 
4344     return E1000_SUCCESS;
4345 }
4346 
4347 /******************************************************************************
4348 * Get PHY information from various PHY registers fot m88 PHY only.
4349 *
4350 * hw - Struct containing variables accessed by shared code
4351 * phy_info - PHY information structure
4352 ******************************************************************************/
4353 static int32_t
e1000_phy_m88_get_info(struct e1000_hw * hw,struct e1000_phy_info * phy_info)4354 e1000_phy_m88_get_info(struct e1000_hw *hw,
4355                        struct e1000_phy_info *phy_info)
4356 {
4357     int32_t ret_val;
4358     uint16_t phy_data;
4359     e1000_rev_polarity polarity;
4360 
4361     DEBUGFUNC("e1000_phy_m88_get_info");
4362 
4363     /* The downshift status is checked only once, after link is established,
4364      * and it stored in the hw->speed_downgraded parameter. */
4365     phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4366 
4367     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
4368     if (ret_val)
4369         return ret_val;
4370 
4371     phy_info->extended_10bt_distance =
4372         ((phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >>
4373         M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT) ?
4374         e1000_10bt_ext_dist_enable_lower : e1000_10bt_ext_dist_enable_normal;
4375 
4376     phy_info->polarity_correction =
4377         ((phy_data & M88E1000_PSCR_POLARITY_REVERSAL) >>
4378         M88E1000_PSCR_POLARITY_REVERSAL_SHIFT) ?
4379         e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
4380 
4381     /* Check polarity status */
4382     ret_val = e1000_check_polarity(hw, &polarity);
4383     if (ret_val)
4384         return ret_val;
4385     phy_info->cable_polarity = polarity;
4386 
4387     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
4388     if (ret_val)
4389         return ret_val;
4390 
4391     phy_info->mdix_mode = (e1000_auto_x_mode)((phy_data & M88E1000_PSSR_MDIX) >>
4392                           M88E1000_PSSR_MDIX_SHIFT);
4393 
4394     if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
4395         /* Cable Length Estimation and Local/Remote Receiver Information
4396          * are only valid at 1000 Mbps.
4397          */
4398         if (hw->phy_type != e1000_phy_gg82563) {
4399             phy_info->cable_length = (e1000_cable_length)((phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
4400                                       M88E1000_PSSR_CABLE_LENGTH_SHIFT);
4401         } else {
4402             ret_val = e1000_read_phy_reg(hw, GG82563_PHY_DSP_DISTANCE,
4403                                          &phy_data);
4404             if (ret_val)
4405                 return ret_val;
4406 
4407             phy_info->cable_length = (e1000_cable_length)(phy_data & GG82563_DSPD_CABLE_LENGTH);
4408         }
4409 
4410         ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
4411         if (ret_val)
4412             return ret_val;
4413 
4414         phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
4415                              SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
4416                              e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4417         phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
4418                               SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
4419                               e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4420 
4421     }
4422 
4423     return E1000_SUCCESS;
4424 }
4425 
4426 /******************************************************************************
4427 * Get PHY information from various PHY registers
4428 *
4429 * hw - Struct containing variables accessed by shared code
4430 * phy_info - PHY information structure
4431 ******************************************************************************/
4432 int32_t
e1000_phy_get_info(struct e1000_hw * hw,struct e1000_phy_info * phy_info)4433 e1000_phy_get_info(struct e1000_hw *hw,
4434                    struct e1000_phy_info *phy_info)
4435 {
4436     int32_t ret_val;
4437     uint16_t phy_data;
4438 
4439     DEBUGFUNC("e1000_phy_get_info");
4440 
4441     phy_info->cable_length = e1000_cable_length_undefined;
4442     phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
4443     phy_info->cable_polarity = e1000_rev_polarity_undefined;
4444     phy_info->downshift = e1000_downshift_undefined;
4445     phy_info->polarity_correction = e1000_polarity_reversal_undefined;
4446     phy_info->mdix_mode = e1000_auto_x_mode_undefined;
4447     phy_info->local_rx = e1000_1000t_rx_status_undefined;
4448     phy_info->remote_rx = e1000_1000t_rx_status_undefined;
4449 
4450     if (hw->media_type != e1000_media_type_copper) {
4451         DEBUGOUT("PHY info is only valid for copper media\n");
4452         return -E1000_ERR_CONFIG;
4453     }
4454 
4455     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4456     if (ret_val)
4457         return ret_val;
4458 
4459     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4460     if (ret_val)
4461         return ret_val;
4462 
4463     if ((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
4464         DEBUGOUT("PHY info is only valid if link is up\n");
4465         return -E1000_ERR_CONFIG;
4466     }
4467 
4468     if (hw->phy_type == e1000_phy_igp ||
4469         hw->phy_type == e1000_phy_igp_3 ||
4470         hw->phy_type == e1000_phy_igp_2)
4471         return e1000_phy_igp_get_info(hw, phy_info);
4472     else if (hw->phy_type == e1000_phy_ife)
4473         return e1000_phy_ife_get_info(hw, phy_info);
4474     else
4475         return e1000_phy_m88_get_info(hw, phy_info);
4476 }
4477 
4478 int32_t
e1000_validate_mdi_setting(struct e1000_hw * hw)4479 e1000_validate_mdi_setting(struct e1000_hw *hw)
4480 {
4481     DEBUGFUNC("e1000_validate_mdi_settings");
4482 
4483     if (!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
4484         DEBUGOUT("Invalid MDI setting detected\n");
4485         hw->mdix = 1;
4486         return -E1000_ERR_CONFIG;
4487     }
4488     return E1000_SUCCESS;
4489 }
4490 
4491 
4492 /******************************************************************************
4493  * Sets up eeprom variables in the hw struct.  Must be called after mac_type
4494  * is configured.  Additionally, if this is ICH8, the flash controller GbE
4495  * registers must be mapped, or this will crash.
4496  *
4497  * hw - Struct containing variables accessed by shared code
4498  *****************************************************************************/
4499 int32_t
e1000_init_eeprom_params(struct e1000_hw * hw)4500 e1000_init_eeprom_params(struct e1000_hw *hw)
4501 {
4502     struct e1000_eeprom_info *eeprom = &hw->eeprom;
4503     uint32_t eecd = E1000_READ_REG(hw, EECD);
4504     int32_t ret_val = E1000_SUCCESS;
4505     uint16_t eeprom_size;
4506 
4507     DEBUGFUNC("e1000_init_eeprom_params");
4508 
4509     switch (hw->mac_type) {
4510     case e1000_82542_rev2_0:
4511     case e1000_82542_rev2_1:
4512     case e1000_82543:
4513     case e1000_82544:
4514         eeprom->type = e1000_eeprom_microwire;
4515         eeprom->word_size = 64;
4516         eeprom->opcode_bits = 3;
4517         eeprom->address_bits = 6;
4518         eeprom->delay_usec = 50;
4519         eeprom->use_eerd = FALSE;
4520         eeprom->use_eewr = FALSE;
4521         break;
4522     case e1000_82540:
4523     case e1000_82545:
4524     case e1000_82545_rev_3:
4525     case e1000_82546:
4526     case e1000_82546_rev_3:
4527         eeprom->type = e1000_eeprom_microwire;
4528         eeprom->opcode_bits = 3;
4529         eeprom->delay_usec = 50;
4530         if (eecd & E1000_EECD_SIZE) {
4531             eeprom->word_size = 256;
4532             eeprom->address_bits = 8;
4533         } else {
4534             eeprom->word_size = 64;
4535             eeprom->address_bits = 6;
4536         }
4537         eeprom->use_eerd = FALSE;
4538         eeprom->use_eewr = FALSE;
4539         break;
4540     case e1000_82541:
4541     case e1000_82541_rev_2:
4542     case e1000_82547:
4543     case e1000_82547_rev_2:
4544         if (eecd & E1000_EECD_TYPE) {
4545             eeprom->type = e1000_eeprom_spi;
4546             eeprom->opcode_bits = 8;
4547             eeprom->delay_usec = 1;
4548             if (eecd & E1000_EECD_ADDR_BITS) {
4549                 eeprom->page_size = 32;
4550                 eeprom->address_bits = 16;
4551             } else {
4552                 eeprom->page_size = 8;
4553                 eeprom->address_bits = 8;
4554             }
4555         } else {
4556             eeprom->type = e1000_eeprom_microwire;
4557             eeprom->opcode_bits = 3;
4558             eeprom->delay_usec = 50;
4559             if (eecd & E1000_EECD_ADDR_BITS) {
4560                 eeprom->word_size = 256;
4561                 eeprom->address_bits = 8;
4562             } else {
4563                 eeprom->word_size = 64;
4564                 eeprom->address_bits = 6;
4565             }
4566         }
4567         eeprom->use_eerd = FALSE;
4568         eeprom->use_eewr = FALSE;
4569         break;
4570     case e1000_82571:
4571     case e1000_82572:
4572         eeprom->type = e1000_eeprom_spi;
4573         eeprom->opcode_bits = 8;
4574         eeprom->delay_usec = 1;
4575         if (eecd & E1000_EECD_ADDR_BITS) {
4576             eeprom->page_size = 32;
4577             eeprom->address_bits = 16;
4578         } else {
4579             eeprom->page_size = 8;
4580             eeprom->address_bits = 8;
4581         }
4582         eeprom->use_eerd = FALSE;
4583         eeprom->use_eewr = FALSE;
4584         break;
4585     case e1000_82573:
4586         eeprom->type = e1000_eeprom_spi;
4587         eeprom->opcode_bits = 8;
4588         eeprom->delay_usec = 1;
4589         if (eecd & E1000_EECD_ADDR_BITS) {
4590             eeprom->page_size = 32;
4591             eeprom->address_bits = 16;
4592         } else {
4593             eeprom->page_size = 8;
4594             eeprom->address_bits = 8;
4595         }
4596         eeprom->use_eerd = TRUE;
4597         eeprom->use_eewr = TRUE;
4598         if (e1000_is_onboard_nvm_eeprom(hw) == FALSE) {
4599             eeprom->type = e1000_eeprom_flash;
4600             eeprom->word_size = 2048;
4601 
4602             /* Ensure that the Autonomous FLASH update bit is cleared due to
4603              * Flash update issue on parts which use a FLASH for NVM. */
4604             eecd &= ~E1000_EECD_AUPDEN;
4605             E1000_WRITE_REG(hw, EECD, eecd);
4606         }
4607         break;
4608     case e1000_80003es2lan:
4609         eeprom->type = e1000_eeprom_spi;
4610         eeprom->opcode_bits = 8;
4611         eeprom->delay_usec = 1;
4612         if (eecd & E1000_EECD_ADDR_BITS) {
4613             eeprom->page_size = 32;
4614             eeprom->address_bits = 16;
4615         } else {
4616             eeprom->page_size = 8;
4617             eeprom->address_bits = 8;
4618         }
4619         eeprom->use_eerd = TRUE;
4620         eeprom->use_eewr = FALSE;
4621         break;
4622     case e1000_ich8lan:
4623         {
4624         int32_t  i = 0;
4625         uint32_t flash_size = E1000_READ_ICH_FLASH_REG(hw, ICH_FLASH_GFPREG);
4626 
4627         eeprom->type = e1000_eeprom_ich8;
4628         eeprom->use_eerd = FALSE;
4629         eeprom->use_eewr = FALSE;
4630         eeprom->word_size = E1000_SHADOW_RAM_WORDS;
4631 
4632         /* Zero the shadow RAM structure. But don't load it from NVM
4633          * so as to save time for driver init */
4634         if (hw->eeprom_shadow_ram != NULL) {
4635             for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
4636                 hw->eeprom_shadow_ram[i].modified = FALSE;
4637                 hw->eeprom_shadow_ram[i].eeprom_word = 0xFFFF;
4638             }
4639         }
4640 
4641         hw->flash_base_addr = (flash_size & ICH_GFPREG_BASE_MASK) *
4642                               ICH_FLASH_SECTOR_SIZE;
4643 
4644         hw->flash_bank_size = ((flash_size >> 16) & ICH_GFPREG_BASE_MASK) + 1;
4645         hw->flash_bank_size -= (flash_size & ICH_GFPREG_BASE_MASK);
4646 
4647         hw->flash_bank_size *= ICH_FLASH_SECTOR_SIZE;
4648 
4649         hw->flash_bank_size /= 2 * sizeof(uint16_t);
4650 
4651         break;
4652         }
4653     case e1000_82576:
4654         {
4655         uint16_t size;
4656 
4657         eeprom->type = e1000_eeprom_spi;
4658         eeprom->opcode_bits = 8;
4659         eeprom->delay_usec = 1;
4660         if (eecd & E1000_EECD_ADDR_BITS) {
4661             eeprom->page_size = 32;
4662             eeprom->address_bits = 16;
4663         } else {
4664             eeprom->page_size = 8;
4665             eeprom->address_bits = 8;
4666         }
4667         eeprom->use_eerd = TRUE;
4668         eeprom->use_eewr = FALSE;
4669 
4670         size = (uint16_t)((eecd & E1000_EECD_SIZE_EX_MASK) >>
4671                           E1000_EECD_SIZE_EX_SHIFT);
4672 	/*
4673 	 * Added to a constant, "size" becomes the left-shift value
4674 	 * for setting word_size.
4675 	 */
4676 	size += EEPROM_WORD_SIZE_SHIFT;
4677 
4678 	/* EEPROM access above 16k is unsupported */
4679 	if (size > 14)
4680 		size = 14;
4681 	eeprom->word_size = 1 << size;
4682 
4683         break;
4684         }
4685     default:
4686         break;
4687     }
4688 
4689     if (eeprom->type == e1000_eeprom_spi) {
4690         /* eeprom_size will be an enum [0..8] that maps to eeprom sizes 128B to
4691          * 32KB (incremented by powers of 2).
4692          */
4693         if (hw->mac_type <= e1000_82547_rev_2) {
4694             /* Set to default value for initial eeprom read. */
4695             eeprom->word_size = 64;
4696             ret_val = e1000_read_eeprom(hw, EEPROM_CFG, 1, &eeprom_size);
4697             if (ret_val)
4698                 return ret_val;
4699             eeprom_size = (eeprom_size & EEPROM_SIZE_MASK) >> EEPROM_SIZE_SHIFT;
4700             /* 256B eeprom size was not supported in earlier hardware, so we
4701              * bump eeprom_size up one to ensure that "1" (which maps to 256B)
4702              * is never the result used in the shifting logic below. */
4703             if (eeprom_size)
4704                 eeprom_size++;
4705         } else {
4706             eeprom_size = (uint16_t)((eecd & E1000_EECD_SIZE_EX_MASK) >>
4707                           E1000_EECD_SIZE_EX_SHIFT);
4708         }
4709 
4710         eeprom->word_size = 1 << (eeprom_size + EEPROM_WORD_SIZE_SHIFT);
4711     }
4712     return ret_val;
4713 }
4714 
4715 /******************************************************************************
4716  * Raises the EEPROM's clock input.
4717  *
4718  * hw - Struct containing variables accessed by shared code
4719  * eecd - EECD's current value
4720  *****************************************************************************/
4721 static void
e1000_raise_ee_clk(struct e1000_hw * hw,uint32_t * eecd)4722 e1000_raise_ee_clk(struct e1000_hw *hw,
4723                    uint32_t *eecd)
4724 {
4725     /* Raise the clock input to the EEPROM (by setting the SK bit), and then
4726      * wait <delay> microseconds.
4727      */
4728     *eecd = *eecd | E1000_EECD_SK;
4729     E1000_WRITE_REG(hw, EECD, *eecd);
4730     E1000_WRITE_FLUSH(hw);
4731     udelay(hw->eeprom.delay_usec);
4732 }
4733 
4734 /******************************************************************************
4735  * Lowers the EEPROM's clock input.
4736  *
4737  * hw - Struct containing variables accessed by shared code
4738  * eecd - EECD's current value
4739  *****************************************************************************/
4740 static void
e1000_lower_ee_clk(struct e1000_hw * hw,uint32_t * eecd)4741 e1000_lower_ee_clk(struct e1000_hw *hw,
4742                    uint32_t *eecd)
4743 {
4744     /* Lower the clock input to the EEPROM (by clearing the SK bit), and then
4745      * wait 50 microseconds.
4746      */
4747     *eecd = *eecd & ~E1000_EECD_SK;
4748     E1000_WRITE_REG(hw, EECD, *eecd);
4749     E1000_WRITE_FLUSH(hw);
4750     udelay(hw->eeprom.delay_usec);
4751 }
4752 
4753 /******************************************************************************
4754  * Shift data bits out to the EEPROM.
4755  *
4756  * hw - Struct containing variables accessed by shared code
4757  * data - data to send to the EEPROM
4758  * count - number of bits to shift out
4759  *****************************************************************************/
4760 static void
e1000_shift_out_ee_bits(struct e1000_hw * hw,uint16_t data,uint16_t count)4761 e1000_shift_out_ee_bits(struct e1000_hw *hw,
4762                         uint16_t data,
4763                         uint16_t count)
4764 {
4765     struct e1000_eeprom_info *eeprom = &hw->eeprom;
4766     uint32_t eecd;
4767     uint32_t mask;
4768 
4769     /* We need to shift "count" bits out to the EEPROM. So, value in the
4770      * "data" parameter will be shifted out to the EEPROM one bit at a time.
4771      * In order to do this, "data" must be broken down into bits.
4772      */
4773     mask = 0x01 << (count - 1);
4774     eecd = E1000_READ_REG(hw, EECD);
4775     if (eeprom->type == e1000_eeprom_microwire) {
4776         eecd &= ~E1000_EECD_DO;
4777     } else if (eeprom->type == e1000_eeprom_spi) {
4778         eecd |= E1000_EECD_DO;
4779     }
4780     do {
4781         /* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",
4782          * and then raising and then lowering the clock (the SK bit controls
4783          * the clock input to the EEPROM).  A "0" is shifted out to the EEPROM
4784          * by setting "DI" to "0" and then raising and then lowering the clock.
4785          */
4786         eecd &= ~E1000_EECD_DI;
4787 
4788         if (data & mask)
4789             eecd |= E1000_EECD_DI;
4790 
4791         E1000_WRITE_REG(hw, EECD, eecd);
4792         E1000_WRITE_FLUSH(hw);
4793 
4794         udelay(eeprom->delay_usec);
4795 
4796         e1000_raise_ee_clk(hw, &eecd);
4797         e1000_lower_ee_clk(hw, &eecd);
4798 
4799         mask = mask >> 1;
4800 
4801     } while (mask);
4802 
4803     /* We leave the "DI" bit set to "0" when we leave this routine. */
4804     eecd &= ~E1000_EECD_DI;
4805     E1000_WRITE_REG(hw, EECD, eecd);
4806 }
4807 
4808 /******************************************************************************
4809  * Shift data bits in from the EEPROM
4810  *
4811  * hw - Struct containing variables accessed by shared code
4812  *****************************************************************************/
4813 static uint16_t
e1000_shift_in_ee_bits(struct e1000_hw * hw,uint16_t count)4814 e1000_shift_in_ee_bits(struct e1000_hw *hw,
4815                        uint16_t count)
4816 {
4817     uint32_t eecd;
4818     uint32_t i;
4819     uint16_t data;
4820 
4821     /* In order to read a register from the EEPROM, we need to shift 'count'
4822      * bits in from the EEPROM. Bits are "shifted in" by raising the clock
4823      * input to the EEPROM (setting the SK bit), and then reading the value of
4824      * the "DO" bit.  During this "shifting in" process the "DI" bit should
4825      * always be clear.
4826      */
4827 
4828     eecd = E1000_READ_REG(hw, EECD);
4829 
4830     eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
4831     data = 0;
4832 
4833     for (i = 0; i < count; i++) {
4834         data = data << 1;
4835         e1000_raise_ee_clk(hw, &eecd);
4836 
4837         eecd = E1000_READ_REG(hw, EECD);
4838 
4839         eecd &= ~(E1000_EECD_DI);
4840         if (eecd & E1000_EECD_DO)
4841             data |= 1;
4842 
4843         e1000_lower_ee_clk(hw, &eecd);
4844     }
4845 
4846     return data;
4847 }
4848 
4849 /******************************************************************************
4850  * Prepares EEPROM for access
4851  *
4852  * hw - Struct containing variables accessed by shared code
4853  *
4854  * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
4855  * function should be called before issuing a command to the EEPROM.
4856  *****************************************************************************/
4857 static int32_t
e1000_acquire_eeprom(struct e1000_hw * hw)4858 e1000_acquire_eeprom(struct e1000_hw *hw)
4859 {
4860     struct e1000_eeprom_info *eeprom = &hw->eeprom;
4861     uint32_t eecd, i=0;
4862 
4863     DEBUGFUNC("e1000_acquire_eeprom");
4864 
4865     if (e1000_swfw_sync_acquire(hw, E1000_SWFW_EEP_SM))
4866         return -E1000_ERR_SWFW_SYNC;
4867     eecd = E1000_READ_REG(hw, EECD);
4868 
4869     if (hw->mac_type != e1000_82573) {
4870         /* Request EEPROM Access */
4871         if (hw->mac_type > e1000_82544) {
4872             eecd |= E1000_EECD_REQ;
4873             E1000_WRITE_REG(hw, EECD, eecd);
4874             eecd = E1000_READ_REG(hw, EECD);
4875             while ((!(eecd & E1000_EECD_GNT)) &&
4876                   (i < E1000_EEPROM_GRANT_ATTEMPTS)) {
4877                 i++;
4878                 udelay(5);
4879                 eecd = E1000_READ_REG(hw, EECD);
4880             }
4881             if (!(eecd & E1000_EECD_GNT)) {
4882                 eecd &= ~E1000_EECD_REQ;
4883                 E1000_WRITE_REG(hw, EECD, eecd);
4884                 DEBUGOUT("Could not acquire EEPROM grant\n");
4885                 e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
4886                 return -E1000_ERR_EEPROM;
4887             }
4888         }
4889     }
4890 
4891     /* Setup EEPROM for Read/Write */
4892 
4893     if (eeprom->type == e1000_eeprom_microwire) {
4894         /* Clear SK and DI */
4895         eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
4896         E1000_WRITE_REG(hw, EECD, eecd);
4897 
4898         /* Set CS */
4899         eecd |= E1000_EECD_CS;
4900         E1000_WRITE_REG(hw, EECD, eecd);
4901     } else if (eeprom->type == e1000_eeprom_spi) {
4902         /* Clear SK and CS */
4903         eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
4904         E1000_WRITE_REG(hw, EECD, eecd);
4905         udelay(1);
4906     }
4907 
4908     return E1000_SUCCESS;
4909 }
4910 
4911 /******************************************************************************
4912  * Returns EEPROM to a "standby" state
4913  *
4914  * hw - Struct containing variables accessed by shared code
4915  *****************************************************************************/
4916 static void
e1000_standby_eeprom(struct e1000_hw * hw)4917 e1000_standby_eeprom(struct e1000_hw *hw)
4918 {
4919     struct e1000_eeprom_info *eeprom = &hw->eeprom;
4920     uint32_t eecd;
4921 
4922     eecd = E1000_READ_REG(hw, EECD);
4923 
4924     if (eeprom->type == e1000_eeprom_microwire) {
4925         eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
4926         E1000_WRITE_REG(hw, EECD, eecd);
4927         E1000_WRITE_FLUSH(hw);
4928         udelay(eeprom->delay_usec);
4929 
4930         /* Clock high */
4931         eecd |= E1000_EECD_SK;
4932         E1000_WRITE_REG(hw, EECD, eecd);
4933         E1000_WRITE_FLUSH(hw);
4934         udelay(eeprom->delay_usec);
4935 
4936         /* Select EEPROM */
4937         eecd |= E1000_EECD_CS;
4938         E1000_WRITE_REG(hw, EECD, eecd);
4939         E1000_WRITE_FLUSH(hw);
4940         udelay(eeprom->delay_usec);
4941 
4942         /* Clock low */
4943         eecd &= ~E1000_EECD_SK;
4944         E1000_WRITE_REG(hw, EECD, eecd);
4945         E1000_WRITE_FLUSH(hw);
4946         udelay(eeprom->delay_usec);
4947     } else if (eeprom->type == e1000_eeprom_spi) {
4948         /* Toggle CS to flush commands */
4949         eecd |= E1000_EECD_CS;
4950         E1000_WRITE_REG(hw, EECD, eecd);
4951         E1000_WRITE_FLUSH(hw);
4952         udelay(eeprom->delay_usec);
4953         eecd &= ~E1000_EECD_CS;
4954         E1000_WRITE_REG(hw, EECD, eecd);
4955         E1000_WRITE_FLUSH(hw);
4956         udelay(eeprom->delay_usec);
4957     }
4958 }
4959 
4960 /******************************************************************************
4961  * Terminates a command by inverting the EEPROM's chip select pin
4962  *
4963  * hw - Struct containing variables accessed by shared code
4964  *****************************************************************************/
4965 static void
e1000_release_eeprom(struct e1000_hw * hw)4966 e1000_release_eeprom(struct e1000_hw *hw)
4967 {
4968     uint32_t eecd;
4969 
4970     DEBUGFUNC("e1000_release_eeprom");
4971 
4972     eecd = E1000_READ_REG(hw, EECD);
4973 
4974     if (hw->eeprom.type == e1000_eeprom_spi) {
4975         eecd |= E1000_EECD_CS;  /* Pull CS high */
4976         eecd &= ~E1000_EECD_SK; /* Lower SCK */
4977 
4978         E1000_WRITE_REG(hw, EECD, eecd);
4979 
4980         udelay(hw->eeprom.delay_usec);
4981     } else if (hw->eeprom.type == e1000_eeprom_microwire) {
4982         /* cleanup eeprom */
4983 
4984         /* CS on Microwire is active-high */
4985         eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
4986 
4987         E1000_WRITE_REG(hw, EECD, eecd);
4988 
4989         /* Rising edge of clock */
4990         eecd |= E1000_EECD_SK;
4991         E1000_WRITE_REG(hw, EECD, eecd);
4992         E1000_WRITE_FLUSH(hw);
4993         udelay(hw->eeprom.delay_usec);
4994 
4995         /* Falling edge of clock */
4996         eecd &= ~E1000_EECD_SK;
4997         E1000_WRITE_REG(hw, EECD, eecd);
4998         E1000_WRITE_FLUSH(hw);
4999         udelay(hw->eeprom.delay_usec);
5000     }
5001 
5002     /* Stop requesting EEPROM access */
5003     if (hw->mac_type > e1000_82544) {
5004         eecd &= ~E1000_EECD_REQ;
5005         E1000_WRITE_REG(hw, EECD, eecd);
5006     }
5007 
5008     e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
5009 }
5010 
5011 /******************************************************************************
5012  * Reads a 16 bit word from the EEPROM.
5013  *
5014  * hw - Struct containing variables accessed by shared code
5015  *****************************************************************************/
5016 static int32_t
e1000_spi_eeprom_ready(struct e1000_hw * hw)5017 e1000_spi_eeprom_ready(struct e1000_hw *hw)
5018 {
5019     uint16_t retry_count = 0;
5020     uint8_t spi_stat_reg;
5021 
5022     DEBUGFUNC("e1000_spi_eeprom_ready");
5023 
5024     /* Read "Status Register" repeatedly until the LSB is cleared.  The
5025      * EEPROM will signal that the command has been completed by clearing
5026      * bit 0 of the internal status register.  If it's not cleared within
5027      * 5 milliseconds, then error out.
5028      */
5029     retry_count = 0;
5030     do {
5031         e1000_shift_out_ee_bits(hw, EEPROM_RDSR_OPCODE_SPI,
5032                                 hw->eeprom.opcode_bits);
5033         spi_stat_reg = (uint8_t)e1000_shift_in_ee_bits(hw, 8);
5034         if (!(spi_stat_reg & EEPROM_STATUS_RDY_SPI))
5035             break;
5036 
5037         udelay(5);
5038         retry_count += 5;
5039 
5040         e1000_standby_eeprom(hw);
5041     } while (retry_count < EEPROM_MAX_RETRY_SPI);
5042 
5043     /* ATMEL SPI write time could vary from 0-20mSec on 3.3V devices (and
5044      * only 0-5mSec on 5V devices)
5045      */
5046     if (retry_count >= EEPROM_MAX_RETRY_SPI) {
5047         DEBUGOUT("SPI EEPROM Status error\n");
5048         return -E1000_ERR_EEPROM;
5049     }
5050 
5051     return E1000_SUCCESS;
5052 }
5053 
5054 /******************************************************************************
5055  * Reads a 16 bit word from the EEPROM.
5056  *
5057  * hw - Struct containing variables accessed by shared code
5058  * offset - offset of  word in the EEPROM to read
5059  * data - word read from the EEPROM
5060  * words - number of words to read
5061  *****************************************************************************/
5062 int32_t
e1000_read_eeprom(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5063 e1000_read_eeprom(struct e1000_hw *hw,
5064                   uint16_t offset,
5065                   uint16_t words,
5066                   uint16_t *data)
5067 {
5068     struct e1000_eeprom_info *eeprom = &hw->eeprom;
5069     uint32_t i = 0;
5070 
5071     DEBUGFUNC("e1000_read_eeprom");
5072 
5073     /* If eeprom is not yet detected, do so now */
5074     if (eeprom->word_size == 0)
5075         e1000_init_eeprom_params(hw);
5076 
5077     /* A check for invalid values:  offset too large, too many words, and not
5078      * enough words.
5079      */
5080     if ((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
5081        (words == 0)) {
5082         DEBUGOUT2("\"words\" parameter out of bounds. Words = %d, size = %d\n", offset, eeprom->word_size);
5083         return -E1000_ERR_EEPROM;
5084     }
5085 
5086     /* EEPROM's that don't use EERD to read require us to bit-bang the SPI
5087      * directly. In this case, we need to acquire the EEPROM so that
5088      * FW or other port software does not interrupt.
5089      */
5090     if (hw->eeprom.use_eerd == FALSE && e1000_is_onboard_nvm_eeprom(hw)) {
5091         /* Prepare the EEPROM for bit-bang reading */
5092         if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
5093             return -E1000_ERR_EEPROM;
5094     }
5095 
5096     /* Eerd register EEPROM access requires no eeprom aquire/release */
5097     if (eeprom->use_eerd == TRUE)
5098         return e1000_read_eeprom_eerd(hw, offset, words, data);
5099 
5100     /* ICH EEPROM access is done via the ICH flash controller */
5101     if (eeprom->type == e1000_eeprom_ich8)
5102         return e1000_read_eeprom_ich8(hw, offset, words, data);
5103 
5104     /* Set up the SPI or Microwire EEPROM for bit-bang reading.  We have
5105      * acquired the EEPROM at this point, so any returns should relase it */
5106     if (eeprom->type == e1000_eeprom_spi) {
5107         uint16_t word_in;
5108         uint8_t read_opcode = EEPROM_READ_OPCODE_SPI;
5109 
5110         if (e1000_spi_eeprom_ready(hw)) {
5111             e1000_release_eeprom(hw);
5112             return -E1000_ERR_EEPROM;
5113         }
5114 
5115         e1000_standby_eeprom(hw);
5116 
5117         /* Some SPI eeproms use the 8th address bit embedded in the opcode */
5118         if ((eeprom->address_bits == 8) && (offset >= 128))
5119             read_opcode |= EEPROM_A8_OPCODE_SPI;
5120 
5121         /* Send the READ command (opcode + addr)  */
5122         e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits);
5123         e1000_shift_out_ee_bits(hw, (uint16_t)(offset*2), eeprom->address_bits);
5124 
5125         /* Read the data.  The address of the eeprom internally increments with
5126          * each byte (spi) being read, saving on the overhead of eeprom setup
5127          * and tear-down.  The address counter will roll over if reading beyond
5128          * the size of the eeprom, thus allowing the entire memory to be read
5129          * starting from any offset. */
5130         for (i = 0; i < words; i++) {
5131             word_in = e1000_shift_in_ee_bits(hw, 16);
5132             data[i] = (word_in >> 8) | (word_in << 8);
5133         }
5134     } else if (eeprom->type == e1000_eeprom_microwire) {
5135         for (i = 0; i < words; i++) {
5136             /* Send the READ command (opcode + addr)  */
5137             e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE_MICROWIRE,
5138                                     eeprom->opcode_bits);
5139             e1000_shift_out_ee_bits(hw, (uint16_t)(offset + i),
5140                                     eeprom->address_bits);
5141 
5142             /* Read the data.  For microwire, each word requires the overhead
5143              * of eeprom setup and tear-down. */
5144             data[i] = e1000_shift_in_ee_bits(hw, 16);
5145             e1000_standby_eeprom(hw);
5146         }
5147     }
5148 
5149     /* End this read operation */
5150     e1000_release_eeprom(hw);
5151 
5152     return E1000_SUCCESS;
5153 }
5154 
5155 /******************************************************************************
5156  * Reads a 16 bit word from the EEPROM using the EERD register.
5157  *
5158  * hw - Struct containing variables accessed by shared code
5159  * offset - offset of  word in the EEPROM to read
5160  * data - word read from the EEPROM
5161  * words - number of words to read
5162  *****************************************************************************/
5163 static int32_t
e1000_read_eeprom_eerd(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5164 e1000_read_eeprom_eerd(struct e1000_hw *hw,
5165                   uint16_t offset,
5166                   uint16_t words,
5167                   uint16_t *data)
5168 {
5169     uint32_t i, eerd = 0;
5170     int32_t error = 0;
5171 
5172     for (i = 0; i < words; i++) {
5173         eerd = ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) +
5174                          E1000_EEPROM_RW_REG_START;
5175 
5176         E1000_WRITE_REG(hw, EERD, eerd);
5177         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_READ);
5178 
5179         if (error) {
5180             break;
5181         }
5182         data[i] = (E1000_READ_REG(hw, EERD) >> E1000_EEPROM_RW_REG_DATA);
5183 
5184     }
5185 
5186     return error;
5187 }
5188 
5189 /******************************************************************************
5190  * Writes a 16 bit word from the EEPROM using the EEWR register.
5191  *
5192  * hw - Struct containing variables accessed by shared code
5193  * offset - offset of  word in the EEPROM to read
5194  * data - word read from the EEPROM
5195  * words - number of words to read
5196  *****************************************************************************/
5197 static int32_t
e1000_write_eeprom_eewr(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5198 e1000_write_eeprom_eewr(struct e1000_hw *hw,
5199                    uint16_t offset,
5200                    uint16_t words,
5201                    uint16_t *data)
5202 {
5203     uint32_t    register_value = 0;
5204     uint32_t    i              = 0;
5205     int32_t     error          = 0;
5206 
5207     if (e1000_swfw_sync_acquire(hw, E1000_SWFW_EEP_SM))
5208         return -E1000_ERR_SWFW_SYNC;
5209 
5210     for (i = 0; i < words; i++) {
5211         register_value = (data[i] << E1000_EEPROM_RW_REG_DATA) |
5212                          ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) |
5213                          E1000_EEPROM_RW_REG_START;
5214 
5215         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
5216         if (error) {
5217             break;
5218         }
5219 
5220         E1000_WRITE_REG(hw, EEWR, register_value);
5221 
5222         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
5223 
5224         if (error) {
5225             break;
5226         }
5227     }
5228 
5229     e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
5230     return error;
5231 }
5232 
5233 /******************************************************************************
5234  * Polls the status bit (bit 1) of the EERD to determine when the read is done.
5235  *
5236  * hw - Struct containing variables accessed by shared code
5237  *****************************************************************************/
5238 static int32_t
e1000_poll_eerd_eewr_done(struct e1000_hw * hw,int eerd)5239 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd)
5240 {
5241     uint32_t attempts = 100000;
5242     uint32_t i, reg = 0;
5243     int32_t done = E1000_ERR_EEPROM;
5244 
5245     for (i = 0; i < attempts; i++) {
5246         if (eerd == E1000_EEPROM_POLL_READ)
5247             reg = E1000_READ_REG(hw, EERD);
5248         else
5249             reg = E1000_READ_REG(hw, EEWR);
5250 
5251         if (reg & E1000_EEPROM_RW_REG_DONE) {
5252             done = E1000_SUCCESS;
5253             break;
5254         }
5255         udelay(5);
5256     }
5257 
5258     return done;
5259 }
5260 
5261 /***************************************************************************
5262 * Description:     Determines if the onboard NVM is FLASH or EEPROM.
5263 *
5264 * hw - Struct containing variables accessed by shared code
5265 ****************************************************************************/
5266 static boolean_t
e1000_is_onboard_nvm_eeprom(struct e1000_hw * hw)5267 e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw)
5268 {
5269     uint32_t eecd = 0;
5270 
5271     DEBUGFUNC("e1000_is_onboard_nvm_eeprom");
5272 
5273     assert(hw->mac_type != e1000_82576);
5274 
5275     if (hw->mac_type == e1000_ich8lan)
5276         return FALSE;
5277 
5278     if (hw->mac_type == e1000_82573) {
5279         eecd = E1000_READ_REG(hw, EECD);
5280 
5281         /* Isolate bits 15 & 16 */
5282         eecd = ((eecd >> 15) & 0x03);
5283 
5284         /* If both bits are set, device is Flash type */
5285         if (eecd == 0x03) {
5286             return FALSE;
5287         }
5288     }
5289     return TRUE;
5290 }
5291 
5292 /******************************************************************************
5293  * Verifies that the EEPROM has a valid checksum
5294  *
5295  * hw - Struct containing variables accessed by shared code
5296  *
5297  * Reads the first 64 16 bit words of the EEPROM and sums the values read.
5298  * If the the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
5299  * valid.
5300  *****************************************************************************/
5301 int32_t
e1000_validate_eeprom_checksum(struct e1000_hw * hw)5302 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
5303 {
5304     uint16_t checksum = 0;
5305     uint16_t i, eeprom_data;
5306 
5307     DEBUGFUNC("e1000_validate_eeprom_checksum");
5308 
5309     if ((hw->mac_type == e1000_82573) &&
5310         (e1000_is_onboard_nvm_eeprom(hw) == FALSE)) {
5311         /* Check bit 4 of word 10h.  If it is 0, firmware is done updating
5312          * 10h-12h.  Checksum may need to be fixed. */
5313         e1000_read_eeprom(hw, 0x10, 1, &eeprom_data);
5314         if ((eeprom_data & 0x10) == 0) {
5315             /* Read 0x23 and check bit 15.  This bit is a 1 when the checksum
5316              * has already been fixed.  If the checksum is still wrong and this
5317              * bit is a 1, we need to return bad checksum.  Otherwise, we need
5318              * to set this bit to a 1 and update the checksum. */
5319             e1000_read_eeprom(hw, 0x23, 1, &eeprom_data);
5320             if ((eeprom_data & 0x8000) == 0) {
5321                 eeprom_data |= 0x8000;
5322                 e1000_write_eeprom(hw, 0x23, 1, &eeprom_data);
5323                 e1000_update_eeprom_checksum(hw);
5324             }
5325         }
5326     }
5327 
5328     if (hw->mac_type == e1000_ich8lan) {
5329         /* Drivers must allocate the shadow ram structure for the
5330          * EEPROM checksum to be updated.  Otherwise, this bit as well
5331          * as the checksum must both be set correctly for this
5332          * validation to pass.
5333          */
5334         e1000_read_eeprom(hw, 0x19, 1, &eeprom_data);
5335         if ((eeprom_data & 0x40) == 0) {
5336             eeprom_data |= 0x40;
5337             e1000_write_eeprom(hw, 0x19, 1, &eeprom_data);
5338             e1000_update_eeprom_checksum(hw);
5339         }
5340     }
5341 
5342     for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
5343         if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
5344             DEBUGOUT("EEPROM Read Error\n");
5345             return -E1000_ERR_EEPROM;
5346         }
5347         checksum += eeprom_data;
5348     }
5349 
5350     if (checksum == (uint16_t) EEPROM_SUM)
5351         return E1000_SUCCESS;
5352     else {
5353         DEBUGOUT("EEPROM Checksum Invalid\n");
5354         return -E1000_ERR_EEPROM;
5355     }
5356 }
5357 
5358 /******************************************************************************
5359  * Calculates the EEPROM checksum and writes it to the EEPROM
5360  *
5361  * hw - Struct containing variables accessed by shared code
5362  *
5363  * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
5364  * Writes the difference to word offset 63 of the EEPROM.
5365  *****************************************************************************/
5366 int32_t
e1000_update_eeprom_checksum(struct e1000_hw * hw)5367 e1000_update_eeprom_checksum(struct e1000_hw *hw)
5368 {
5369     uint32_t ctrl_ext;
5370     uint16_t checksum = 0;
5371     uint16_t i, eeprom_data;
5372 
5373     DEBUGFUNC("e1000_update_eeprom_checksum");
5374 
5375     for (i = 0; i < EEPROM_CHECKSUM_REG; i++) {
5376         if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
5377             DEBUGOUT("EEPROM Read Error\n");
5378             return -E1000_ERR_EEPROM;
5379         }
5380         checksum += eeprom_data;
5381     }
5382     checksum = (uint16_t) EEPROM_SUM - checksum;
5383     if (e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
5384         DEBUGOUT("EEPROM Write Error\n");
5385         return -E1000_ERR_EEPROM;
5386     } else if (hw->eeprom.type == e1000_eeprom_flash) {
5387         e1000_commit_shadow_ram(hw);
5388     } else if (hw->eeprom.type == e1000_eeprom_ich8) {
5389         e1000_commit_shadow_ram(hw);
5390         /* Reload the EEPROM, or else modifications will not appear
5391          * until after next adapter reset. */
5392         ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
5393         ctrl_ext |= E1000_CTRL_EXT_EE_RST;
5394         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
5395         msleep(10);
5396     }
5397     return E1000_SUCCESS;
5398 }
5399 
5400 /******************************************************************************
5401  * Parent function for writing words to the different EEPROM types.
5402  *
5403  * hw - Struct containing variables accessed by shared code
5404  * offset - offset within the EEPROM to be written to
5405  * words - number of words to write
5406  * data - 16 bit word to be written to the EEPROM
5407  *
5408  * If e1000_update_eeprom_checksum is not called after this function, the
5409  * EEPROM will most likely contain an invalid checksum.
5410  *****************************************************************************/
5411 int32_t
e1000_write_eeprom(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5412 e1000_write_eeprom(struct e1000_hw *hw,
5413                    uint16_t offset,
5414                    uint16_t words,
5415                    uint16_t *data)
5416 {
5417     struct e1000_eeprom_info *eeprom = &hw->eeprom;
5418     int32_t status = 0;
5419 
5420     DEBUGFUNC("e1000_write_eeprom");
5421 
5422     /* If eeprom is not yet detected, do so now */
5423     if (eeprom->word_size == 0)
5424         e1000_init_eeprom_params(hw);
5425 
5426     /* A check for invalid values:  offset too large, too many words, and not
5427      * enough words.
5428      */
5429     if ((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
5430        (words == 0)) {
5431         DEBUGOUT("\"words\" parameter out of bounds\n");
5432         return -E1000_ERR_EEPROM;
5433     }
5434 
5435     /* 82573 writes only through eewr */
5436     if (eeprom->use_eewr == TRUE)
5437         return e1000_write_eeprom_eewr(hw, offset, words, data);
5438 
5439     if (eeprom->type == e1000_eeprom_ich8)
5440         return e1000_write_eeprom_ich8(hw, offset, words, data);
5441 
5442     /* Prepare the EEPROM for writing  */
5443     if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
5444         return -E1000_ERR_EEPROM;
5445 
5446     if (eeprom->type == e1000_eeprom_microwire) {
5447         status = e1000_write_eeprom_microwire(hw, offset, words, data);
5448     } else {
5449         status = e1000_write_eeprom_spi(hw, offset, words, data);
5450         msleep(10);
5451     }
5452 
5453     /* Done with writing */
5454     e1000_release_eeprom(hw);
5455 
5456     return status;
5457 }
5458 
5459 /******************************************************************************
5460  * Writes a 16 bit word to a given offset in an SPI EEPROM.
5461  *
5462  * hw - Struct containing variables accessed by shared code
5463  * offset - offset within the EEPROM to be written to
5464  * words - number of words to write
5465  * data - pointer to array of 8 bit words to be written to the EEPROM
5466  *
5467  *****************************************************************************/
5468 static int32_t
e1000_write_eeprom_spi(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5469 e1000_write_eeprom_spi(struct e1000_hw *hw,
5470                        uint16_t offset,
5471                        uint16_t words,
5472                        uint16_t *data)
5473 {
5474     struct e1000_eeprom_info *eeprom = &hw->eeprom;
5475     uint16_t widx = 0;
5476 
5477     DEBUGFUNC("e1000_write_eeprom_spi");
5478 
5479     while (widx < words) {
5480         uint8_t write_opcode = EEPROM_WRITE_OPCODE_SPI;
5481 
5482         if (e1000_spi_eeprom_ready(hw)) return -E1000_ERR_EEPROM;
5483 
5484         e1000_standby_eeprom(hw);
5485 
5486         /*  Send the WRITE ENABLE command (8 bit opcode )  */
5487         e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
5488                                     eeprom->opcode_bits);
5489 
5490         e1000_standby_eeprom(hw);
5491 
5492         /* Some SPI eeproms use the 8th address bit embedded in the opcode */
5493         if ((eeprom->address_bits == 8) && (offset >= 128))
5494             write_opcode |= EEPROM_A8_OPCODE_SPI;
5495 
5496         /* Send the Write command (8-bit opcode + addr) */
5497         e1000_shift_out_ee_bits(hw, write_opcode, eeprom->opcode_bits);
5498 
5499         e1000_shift_out_ee_bits(hw, (uint16_t)((offset + widx)*2),
5500                                 eeprom->address_bits);
5501 
5502         /* Send the data */
5503 
5504         /* Loop to allow for up to whole page write (32 bytes) of eeprom */
5505         while (widx < words) {
5506             uint16_t word_out = data[widx];
5507             word_out = (word_out >> 8) | (word_out << 8);
5508             e1000_shift_out_ee_bits(hw, word_out, 16);
5509             widx++;
5510 
5511             /* Some larger eeprom sizes are capable of a 32-byte PAGE WRITE
5512              * operation, while the smaller eeproms are capable of an 8-byte
5513              * PAGE WRITE operation.  Break the inner loop to pass new address
5514              */
5515             if ((((offset + widx)*2) % eeprom->page_size) == 0) {
5516                 e1000_standby_eeprom(hw);
5517                 break;
5518             }
5519         }
5520     }
5521 
5522     return E1000_SUCCESS;
5523 }
5524 
5525 /******************************************************************************
5526  * Writes a 16 bit word to a given offset in a Microwire EEPROM.
5527  *
5528  * hw - Struct containing variables accessed by shared code
5529  * offset - offset within the EEPROM to be written to
5530  * words - number of words to write
5531  * data - pointer to array of 16 bit words to be written to the EEPROM
5532  *
5533  *****************************************************************************/
5534 static int32_t
e1000_write_eeprom_microwire(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)5535 e1000_write_eeprom_microwire(struct e1000_hw *hw,
5536                              uint16_t offset,
5537                              uint16_t words,
5538                              uint16_t *data)
5539 {
5540     struct e1000_eeprom_info *eeprom = &hw->eeprom;
5541     uint32_t eecd;
5542     uint16_t words_written = 0;
5543     uint16_t i = 0;
5544 
5545     DEBUGFUNC("e1000_write_eeprom_microwire");
5546 
5547     /* Send the write enable command to the EEPROM (3-bit opcode plus
5548      * 6/8-bit dummy address beginning with 11).  It's less work to include
5549      * the 11 of the dummy address as part of the opcode than it is to shift
5550      * it over the correct number of bits for the address.  This puts the
5551      * EEPROM into write/erase mode.
5552      */
5553     e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE_MICROWIRE,
5554                             (uint16_t)(eeprom->opcode_bits + 2));
5555 
5556     e1000_shift_out_ee_bits(hw, 0, (uint16_t)(eeprom->address_bits - 2));
5557 
5558     /* Prepare the EEPROM */
5559     e1000_standby_eeprom(hw);
5560 
5561     while (words_written < words) {
5562         /* Send the Write command (3-bit opcode + addr) */
5563         e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE_MICROWIRE,
5564                                 eeprom->opcode_bits);
5565 
5566         e1000_shift_out_ee_bits(hw, (uint16_t)(offset + words_written),
5567                                 eeprom->address_bits);
5568 
5569         /* Send the data */
5570         e1000_shift_out_ee_bits(hw, data[words_written], 16);
5571 
5572         /* Toggle the CS line.  This in effect tells the EEPROM to execute
5573          * the previous command.
5574          */
5575         e1000_standby_eeprom(hw);
5576 
5577         /* Read DO repeatedly until it is high (equal to '1').  The EEPROM will
5578          * signal that the command has been completed by raising the DO signal.
5579          * If DO does not go high in 10 milliseconds, then error out.
5580          */
5581         for (i = 0; i < 200; i++) {
5582             eecd = E1000_READ_REG(hw, EECD);
5583             if (eecd & E1000_EECD_DO) break;
5584             udelay(50);
5585         }
5586         if (i == 200) {
5587             DEBUGOUT("EEPROM Write did not complete\n");
5588             return -E1000_ERR_EEPROM;
5589         }
5590 
5591         /* Recover from write */
5592         e1000_standby_eeprom(hw);
5593 
5594         words_written++;
5595     }
5596 
5597     /* Send the write disable command to the EEPROM (3-bit opcode plus
5598      * 6/8-bit dummy address beginning with 10).  It's less work to include
5599      * the 10 of the dummy address as part of the opcode than it is to shift
5600      * it over the correct number of bits for the address.  This takes the
5601      * EEPROM out of write/erase mode.
5602      */
5603     e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE_MICROWIRE,
5604                             (uint16_t)(eeprom->opcode_bits + 2));
5605 
5606     e1000_shift_out_ee_bits(hw, 0, (uint16_t)(eeprom->address_bits - 2));
5607 
5608     return E1000_SUCCESS;
5609 }
5610 
5611 /******************************************************************************
5612  * Flushes the cached eeprom to NVM. This is done by saving the modified values
5613  * in the eeprom cache and the non modified values in the currently active bank
5614  * to the new bank.
5615  *
5616  * hw - Struct containing variables accessed by shared code
5617  * offset - offset of  word in the EEPROM to read
5618  * data - word read from the EEPROM
5619  * words - number of words to read
5620  *****************************************************************************/
5621 static int32_t
e1000_commit_shadow_ram(struct e1000_hw * hw)5622 e1000_commit_shadow_ram(struct e1000_hw *hw)
5623 {
5624     uint32_t attempts = 100000;
5625     uint32_t eecd = 0;
5626     uint32_t flop = 0;
5627     uint32_t i = 0;
5628     int32_t error = E1000_SUCCESS;
5629     uint32_t old_bank_offset = 0;
5630     uint32_t new_bank_offset = 0;
5631     uint8_t low_byte = 0;
5632     uint8_t high_byte = 0;
5633     boolean_t sector_write_failed = FALSE;
5634 
5635     if (hw->mac_type == e1000_82573) {
5636         /* The flop register will be used to determine if flash type is STM */
5637         flop = E1000_READ_REG(hw, FLOP);
5638         for (i=0; i < attempts; i++) {
5639             eecd = E1000_READ_REG(hw, EECD);
5640             if ((eecd & E1000_EECD_FLUPD) == 0) {
5641                 break;
5642             }
5643             udelay(5);
5644         }
5645 
5646         if (i == attempts) {
5647             return -E1000_ERR_EEPROM;
5648         }
5649 
5650         /* If STM opcode located in bits 15:8 of flop, reset firmware */
5651         if ((flop & 0xFF00) == E1000_STM_OPCODE) {
5652             E1000_WRITE_REG(hw, HICR, E1000_HICR_FW_RESET);
5653         }
5654 
5655         /* Perform the flash update */
5656         E1000_WRITE_REG(hw, EECD, eecd | E1000_EECD_FLUPD);
5657 
5658         for (i=0; i < attempts; i++) {
5659             eecd = E1000_READ_REG(hw, EECD);
5660             if ((eecd & E1000_EECD_FLUPD) == 0) {
5661                 break;
5662             }
5663             udelay(5);
5664         }
5665 
5666         if (i == attempts) {
5667             return -E1000_ERR_EEPROM;
5668         }
5669     }
5670 
5671     if (hw->mac_type == e1000_ich8lan && hw->eeprom_shadow_ram != NULL) {
5672         /* We're writing to the opposite bank so if we're on bank 1,
5673          * write to bank 0 etc.  We also need to erase the segment that
5674          * is going to be written */
5675         if (!(E1000_READ_REG(hw, EECD) & E1000_EECD_SEC1VAL)) {
5676             new_bank_offset = hw->flash_bank_size * 2;
5677             old_bank_offset = 0;
5678             e1000_erase_ich8_4k_segment(hw, 1);
5679         } else {
5680             old_bank_offset = hw->flash_bank_size * 2;
5681             new_bank_offset = 0;
5682             e1000_erase_ich8_4k_segment(hw, 0);
5683         }
5684 
5685         sector_write_failed = FALSE;
5686         /* Loop for every byte in the shadow RAM,
5687          * which is in units of words. */
5688         for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
5689             /* Determine whether to write the value stored
5690              * in the other NVM bank or a modified value stored
5691              * in the shadow RAM */
5692             if (hw->eeprom_shadow_ram[i].modified == TRUE) {
5693                 low_byte = (uint8_t)hw->eeprom_shadow_ram[i].eeprom_word;
5694                 udelay(100);
5695                 error = e1000_verify_write_ich8_byte(hw,
5696                             (i << 1) + new_bank_offset, low_byte);
5697 
5698                 if (error != E1000_SUCCESS)
5699                     sector_write_failed = TRUE;
5700                 else {
5701                     high_byte =
5702                         (uint8_t)(hw->eeprom_shadow_ram[i].eeprom_word >> 8);
5703                     udelay(100);
5704                 }
5705             } else {
5706                 e1000_read_ich8_byte(hw, (i << 1) + old_bank_offset,
5707                                      &low_byte);
5708                 udelay(100);
5709                 error = e1000_verify_write_ich8_byte(hw,
5710                             (i << 1) + new_bank_offset, low_byte);
5711 
5712                 if (error != E1000_SUCCESS)
5713                     sector_write_failed = TRUE;
5714                 else {
5715                     e1000_read_ich8_byte(hw, (i << 1) + old_bank_offset + 1,
5716                                          &high_byte);
5717                     udelay(100);
5718                 }
5719             }
5720 
5721             /* If the write of the low byte was successful, go ahread and
5722              * write the high byte while checking to make sure that if it
5723              * is the signature byte, then it is handled properly */
5724             if (sector_write_failed == FALSE) {
5725                 /* If the word is 0x13, then make sure the signature bits
5726                  * (15:14) are 11b until the commit has completed.
5727                  * This will allow us to write 10b which indicates the
5728                  * signature is valid.  We want to do this after the write
5729                  * has completed so that we don't mark the segment valid
5730                  * while the write is still in progress */
5731                 if (i == E1000_ICH_NVM_SIG_WORD)
5732                     high_byte = E1000_ICH_NVM_SIG_MASK | high_byte;
5733 
5734                 error = e1000_verify_write_ich8_byte(hw,
5735                             (i << 1) + new_bank_offset + 1, high_byte);
5736                 if (error != E1000_SUCCESS)
5737                     sector_write_failed = TRUE;
5738 
5739             } else {
5740                 /* If the write failed then break from the loop and
5741                  * return an error */
5742                 break;
5743             }
5744         }
5745 
5746         /* Don't bother writing the segment valid bits if sector
5747          * programming failed. */
5748         if (sector_write_failed == FALSE) {
5749             /* Finally validate the new segment by setting bit 15:14
5750              * to 10b in word 0x13 , this can be done without an
5751              * erase as well since these bits are 11 to start with
5752              * and we need to change bit 14 to 0b */
5753             e1000_read_ich8_byte(hw,
5754                                  E1000_ICH_NVM_SIG_WORD * 2 + 1 + new_bank_offset,
5755                                  &high_byte);
5756             high_byte &= 0xBF;
5757             error = e1000_verify_write_ich8_byte(hw,
5758                         E1000_ICH_NVM_SIG_WORD * 2 + 1 + new_bank_offset, high_byte);
5759             /* And invalidate the previously valid segment by setting
5760              * its signature word (0x13) high_byte to 0b. This can be
5761              * done without an erase because flash erase sets all bits
5762              * to 1's. We can write 1's to 0's without an erase */
5763             if (error == E1000_SUCCESS) {
5764                 error = e1000_verify_write_ich8_byte(hw,
5765                             E1000_ICH_NVM_SIG_WORD * 2 + 1 + old_bank_offset, 0);
5766             }
5767 
5768             /* Clear the now not used entry in the cache */
5769             for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
5770                 hw->eeprom_shadow_ram[i].modified = FALSE;
5771                 hw->eeprom_shadow_ram[i].eeprom_word = 0xFFFF;
5772             }
5773         }
5774     }
5775 
5776     return error;
5777 }
5778 
5779 /******************************************************************************
5780  * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
5781  * second function of dual function devices
5782  *
5783  * hw - Struct containing variables accessed by shared code
5784  *****************************************************************************/
5785 int32_t
e1000_read_mac_addr(struct e1000_hw * hw)5786 e1000_read_mac_addr(struct e1000_hw * hw)
5787 {
5788     uint16_t offset, mac_addr_offset = 0;
5789     uint16_t eeprom_data, i;
5790     int32_t ret_val;
5791 
5792     DEBUGFUNC("e1000_read_mac_addr");
5793 
5794     if (hw->mac_type == e1000_82571) {
5795         /* Check for an alternate MAC address.  An alternate MAC
5796          * address can be setup by pre-boot software and must be
5797          * treated like a permanent address and must override the
5798          * actual permanent MAC address.*/
5799         ret_val = e1000_read_eeprom(hw, EEPROM_ALT_MAC_ADDR_PTR, 1,
5800                                     &mac_addr_offset);
5801         if (ret_val) {
5802             DEBUGOUT("EEPROM Read Error\n");
5803             return -E1000_ERR_EEPROM;
5804         }
5805         if (mac_addr_offset == 0xFFFF)
5806             mac_addr_offset = 0;
5807 
5808         if (mac_addr_offset) {
5809             if (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)
5810                 mac_addr_offset += NODE_ADDRESS_SIZE/sizeof(u16);
5811 
5812                 /* make sure we have a valid mac address here
5813                  * before using it */
5814                ret_val = e1000_read_eeprom(hw, mac_addr_offset, 1,
5815                                            &eeprom_data);
5816                if (ret_val) {
5817                    DEBUGOUT("EEPROM Read Error\n");
5818                    return -E1000_ERR_EEPROM;
5819                }
5820                if (eeprom_data & 0x0001)
5821                    mac_addr_offset = 0;
5822         }
5823 
5824         if (mac_addr_offset)
5825             hw->laa_is_present = TRUE;
5826     }
5827 
5828     for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
5829         offset = mac_addr_offset + (i >> 1);
5830         if (e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
5831             DEBUGOUT("EEPROM Read Error\n");
5832             return -E1000_ERR_EEPROM;
5833         }
5834         hw->perm_mac_addr[i] = (uint8_t) (eeprom_data & 0x00FF);
5835         hw->perm_mac_addr[i+1] = (uint8_t) (eeprom_data >> 8);
5836     }
5837 
5838     switch (hw->mac_type) {
5839     default:
5840         break;
5841     case e1000_82546:
5842     case e1000_82546_rev_3:
5843     case e1000_82571:
5844     case e1000_82576:
5845     case e1000_80003es2lan:
5846         if (!mac_addr_offset &&
5847             E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)
5848             hw->perm_mac_addr[5] ^= 0x01;
5849         break;
5850     }
5851 
5852     for (i = 0; i < NODE_ADDRESS_SIZE; i++)
5853         hw->mac_addr[i] = hw->perm_mac_addr[i];
5854     return E1000_SUCCESS;
5855 }
5856 
5857 /******************************************************************************
5858  * Initializes receive address filters.
5859  *
5860  * hw - Struct containing variables accessed by shared code
5861  *
5862  * Places the MAC address in receive address register 0 and clears the rest
5863  * of the receive addresss registers. Clears the multicast table. Assumes
5864  * the receiver is in reset when the routine is called.
5865  *****************************************************************************/
5866 static void
e1000_init_rx_addrs(struct e1000_hw * hw)5867 e1000_init_rx_addrs(struct e1000_hw *hw)
5868 {
5869     uint32_t i;
5870     uint32_t rar_num;
5871 
5872     DEBUGFUNC("e1000_init_rx_addrs");
5873 
5874     /* Setup the receive address. */
5875     DEBUGOUT("Programming MAC Address into RAR[0]\n");
5876 
5877     e1000_rar_set(hw, hw->mac_addr, 0);
5878 
5879     rar_num = E1000_RAR_ENTRIES;
5880 
5881     /* Reserve a spot for the Locally Administered Address to work around
5882      * an 82571 issue in which a reset on one port will reload the MAC on
5883      * the other port. */
5884     if ((hw->mac_type == e1000_82571) && (hw->laa_is_present == TRUE))
5885         rar_num -= 1;
5886     if (hw->mac_type == e1000_ich8lan)
5887         rar_num = E1000_RAR_ENTRIES_ICH8LAN;
5888 
5889     /* Zero out the other 15 receive addresses. */
5890     DEBUGOUT("Clearing RAR[1-15]\n");
5891     for (i = 1; i < rar_num; i++) {
5892         E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
5893         E1000_WRITE_FLUSH(hw);
5894         E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
5895         E1000_WRITE_FLUSH(hw);
5896     }
5897 }
5898 
5899 /******************************************************************************
5900  * Hashes an address to determine its location in the multicast table
5901  *
5902  * hw - Struct containing variables accessed by shared code
5903  * mc_addr - the multicast address to hash
5904  *****************************************************************************/
5905 uint32_t
e1000_hash_mc_addr(struct e1000_hw * hw,uint8_t * mc_addr)5906 e1000_hash_mc_addr(struct e1000_hw *hw,
5907                    uint8_t *mc_addr)
5908 {
5909     uint32_t hash_value = 0;
5910 
5911     /* The portion of the address that is used for the hash table is
5912      * determined by the mc_filter_type setting.
5913      */
5914     switch (hw->mc_filter_type) {
5915     /* [0] [1] [2] [3] [4] [5]
5916      * 01  AA  00  12  34  56
5917      * LSB                 MSB
5918      */
5919     case 0:
5920         if (hw->mac_type == e1000_ich8lan) {
5921             /* [47:38] i.e. 0x158 for above example address */
5922             hash_value = ((mc_addr[4] >> 6) | (((uint16_t) mc_addr[5]) << 2));
5923         } else {
5924             /* [47:36] i.e. 0x563 for above example address */
5925             hash_value = ((mc_addr[4] >> 4) | (((uint16_t) mc_addr[5]) << 4));
5926         }
5927         break;
5928     case 1:
5929         if (hw->mac_type == e1000_ich8lan) {
5930             /* [46:37] i.e. 0x2B1 for above example address */
5931             hash_value = ((mc_addr[4] >> 5) | (((uint16_t) mc_addr[5]) << 3));
5932         } else {
5933             /* [46:35] i.e. 0xAC6 for above example address */
5934             hash_value = ((mc_addr[4] >> 3) | (((uint16_t) mc_addr[5]) << 5));
5935         }
5936         break;
5937     case 2:
5938         if (hw->mac_type == e1000_ich8lan) {
5939             /*[45:36] i.e. 0x163 for above example address */
5940             hash_value = ((mc_addr[4] >> 4) | (((uint16_t) mc_addr[5]) << 4));
5941         } else {
5942             /* [45:34] i.e. 0x5D8 for above example address */
5943             hash_value = ((mc_addr[4] >> 2) | (((uint16_t) mc_addr[5]) << 6));
5944         }
5945         break;
5946     case 3:
5947         if (hw->mac_type == e1000_ich8lan) {
5948             /* [43:34] i.e. 0x18D for above example address */
5949             hash_value = ((mc_addr[4] >> 2) | (((uint16_t) mc_addr[5]) << 6));
5950         } else {
5951             /* [43:32] i.e. 0x634 for above example address */
5952             hash_value = ((mc_addr[4]) | (((uint16_t) mc_addr[5]) << 8));
5953         }
5954         break;
5955     }
5956 
5957     hash_value &= 0xFFF;
5958     if (hw->mac_type == e1000_ich8lan)
5959         hash_value &= 0x3FF;
5960 
5961     return hash_value;
5962 }
5963 
5964 /******************************************************************************
5965  * Sets the bit in the multicast table corresponding to the hash value.
5966  *
5967  * hw - Struct containing variables accessed by shared code
5968  * hash_value - Multicast address hash value
5969  *****************************************************************************/
5970 void
e1000_mta_set(struct e1000_hw * hw,uint32_t hash_value)5971 e1000_mta_set(struct e1000_hw *hw,
5972               uint32_t hash_value)
5973 {
5974     uint32_t hash_bit, hash_reg;
5975     uint32_t mta;
5976     uint32_t temp;
5977 
5978     /* The MTA is a register array of 128 32-bit registers.
5979      * It is treated like an array of 4096 bits.  We want to set
5980      * bit BitArray[hash_value]. So we figure out what register
5981      * the bit is in, read it, OR in the new bit, then write
5982      * back the new value.  The register is determined by the
5983      * upper 7 bits of the hash value and the bit within that
5984      * register are determined by the lower 5 bits of the value.
5985      */
5986     hash_reg = (hash_value >> 5) & 0x7F;
5987     if (hw->mac_type == e1000_ich8lan)
5988         hash_reg &= 0x1F;
5989 
5990     hash_bit = hash_value & 0x1F;
5991 
5992     mta = E1000_READ_REG_ARRAY(hw, MTA, hash_reg);
5993 
5994     mta |= (1 << hash_bit);
5995 
5996     /* If we are on an 82544 and we are trying to write an odd offset
5997      * in the MTA, save off the previous entry before writing and
5998      * restore the old value after writing.
5999      */
6000     if ((hw->mac_type == e1000_82544) && ((hash_reg & 0x1) == 1)) {
6001         temp = E1000_READ_REG_ARRAY(hw, MTA, (hash_reg - 1));
6002         E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
6003         E1000_WRITE_FLUSH(hw);
6004         E1000_WRITE_REG_ARRAY(hw, MTA, (hash_reg - 1), temp);
6005         E1000_WRITE_FLUSH(hw);
6006     } else {
6007         E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
6008         E1000_WRITE_FLUSH(hw);
6009     }
6010 }
6011 
6012 /******************************************************************************
6013  * Puts an ethernet address into a receive address register.
6014  *
6015  * hw - Struct containing variables accessed by shared code
6016  * addr - Address to put into receive address register
6017  * index - Receive address register to write
6018  *****************************************************************************/
6019 void
e1000_rar_set(struct e1000_hw * hw,uint8_t * addr,uint32_t index)6020 e1000_rar_set(struct e1000_hw *hw,
6021               uint8_t *addr,
6022               uint32_t index)
6023 {
6024     uint32_t rar_low, rar_high;
6025 
6026     /* HW expects these in little endian so we reverse the byte order
6027      * from network order (big endian) to little endian
6028      */
6029     rar_low = ((uint32_t) addr[0] |
6030                ((uint32_t) addr[1] << 8) |
6031                ((uint32_t) addr[2] << 16) | ((uint32_t) addr[3] << 24));
6032     rar_high = ((uint32_t) addr[4] | ((uint32_t) addr[5] << 8));
6033 
6034     /* Disable Rx and flush all Rx frames before enabling RSS to avoid Rx
6035      * unit hang.
6036      *
6037      * Description:
6038      * If there are any Rx frames queued up or otherwise present in the HW
6039      * before RSS is enabled, and then we enable RSS, the HW Rx unit will
6040      * hang.  To work around this issue, we have to disable receives and
6041      * flush out all Rx frames before we enable RSS. To do so, we modify we
6042      * redirect all Rx traffic to manageability and then reset the HW.
6043      * This flushes away Rx frames, and (since the redirections to
6044      * manageability persists across resets) keeps new ones from coming in
6045      * while we work.  Then, we clear the Address Valid AV bit for all MAC
6046      * addresses and undo the re-direction to manageability.
6047      * Now, frames are coming in again, but the MAC won't accept them, so
6048      * far so good.  We now proceed to initialize RSS (if necessary) and
6049      * configure the Rx unit.  Last, we re-enable the AV bits and continue
6050      * on our merry way.
6051      */
6052     switch (hw->mac_type) {
6053     case e1000_82571:
6054     case e1000_82572:
6055     case e1000_80003es2lan:
6056         if (hw->leave_av_bit_off == TRUE)
6057             break;
6058     case e1000_82576:
6059         /* If MAC address zero, no need to set the AV bit */
6060         if (rar_low || rar_high)
6061             rar_high |= E1000_RAH_AV;
6062             // Only neded when Multiple Receive Queues are enabmed in MRQC
6063         rar_high |= E1000_RAH_POOL_1;
6064         break;
6065     default:
6066         /* Indicate to hardware the Address is Valid. */
6067         rar_high |= E1000_RAH_AV;
6068         break;
6069     }
6070 
6071     E1000_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
6072     E1000_WRITE_FLUSH(hw);
6073     E1000_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
6074     E1000_WRITE_FLUSH(hw);
6075 }
6076 
6077 /******************************************************************************
6078  * Writes a value to the specified offset in the VLAN filter table.
6079  *
6080  * hw - Struct containing variables accessed by shared code
6081  * offset - Offset in VLAN filer table to write
6082  * value - Value to write into VLAN filter table
6083  *****************************************************************************/
6084 void
e1000_write_vfta(struct e1000_hw * hw,uint32_t offset,uint32_t value)6085 e1000_write_vfta(struct e1000_hw *hw,
6086                  uint32_t offset,
6087                  uint32_t value)
6088 {
6089     uint32_t temp;
6090 
6091     if (hw->mac_type == e1000_ich8lan)
6092         return;
6093 
6094     if ((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
6095         temp = E1000_READ_REG_ARRAY(hw, VFTA, (offset - 1));
6096         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
6097         E1000_WRITE_FLUSH(hw);
6098         E1000_WRITE_REG_ARRAY(hw, VFTA, (offset - 1), temp);
6099         E1000_WRITE_FLUSH(hw);
6100     } else {
6101         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
6102         E1000_WRITE_FLUSH(hw);
6103     }
6104 }
6105 
6106 /******************************************************************************
6107  * Clears the VLAN filer table
6108  *
6109  * hw - Struct containing variables accessed by shared code
6110  *****************************************************************************/
6111 static void
e1000_clear_vfta(struct e1000_hw * hw)6112 e1000_clear_vfta(struct e1000_hw *hw)
6113 {
6114     uint32_t offset;
6115     uint32_t vfta_value = 0;
6116     uint32_t vfta_offset = 0;
6117     uint32_t vfta_bit_in_reg = 0;
6118 
6119     if (hw->mac_type == e1000_ich8lan)
6120         return;
6121 
6122     if (hw->mac_type == e1000_82573) {
6123         if (hw->mng_cookie.vlan_id != 0) {
6124             /* The VFTA is a 4096b bit-field, each identifying a single VLAN
6125              * ID.  The following operations determine which 32b entry
6126              * (i.e. offset) into the array we want to set the VLAN ID
6127              * (i.e. bit) of the manageability unit. */
6128             vfta_offset = (hw->mng_cookie.vlan_id >>
6129                            E1000_VFTA_ENTRY_SHIFT) &
6130                           E1000_VFTA_ENTRY_MASK;
6131             vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
6132                                     E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
6133         }
6134     }
6135     for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
6136         /* If the offset we want to clear is the same offset of the
6137          * manageability VLAN ID, then clear all bits except that of the
6138          * manageability unit */
6139         vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
6140         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, vfta_value);
6141         E1000_WRITE_FLUSH(hw);
6142     }
6143 }
6144 
6145 static int32_t
e1000_id_led_init(struct e1000_hw * hw)6146 e1000_id_led_init(struct e1000_hw * hw)
6147 {
6148     uint32_t ledctl;
6149     const uint32_t ledctl_mask = 0x000000FF;
6150     const uint32_t ledctl_on = E1000_LEDCTL_MODE_LED_ON;
6151     const uint32_t ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
6152     uint16_t eeprom_data, i, temp;
6153     const uint16_t led_mask = 0x0F;
6154 
6155     DEBUGFUNC("e1000_id_led_init");
6156 
6157     if (hw->mac_type < e1000_82540) {
6158         /* Nothing to do */
6159         return E1000_SUCCESS;
6160     }
6161 
6162     ledctl = E1000_READ_REG(hw, LEDCTL);
6163     hw->ledctl_default = ledctl;
6164     hw->ledctl_mode1 = hw->ledctl_default;
6165     hw->ledctl_mode2 = hw->ledctl_default;
6166 
6167     if (e1000_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
6168         DEBUGOUT("EEPROM Read Error\n");
6169         return -E1000_ERR_EEPROM;
6170     }
6171 
6172     if ((hw->mac_type == e1000_82573) &&
6173         (eeprom_data == ID_LED_RESERVED_82573))
6174         eeprom_data = ID_LED_DEFAULT_82573;
6175     else if ((eeprom_data == ID_LED_RESERVED_0000) ||
6176             (eeprom_data == ID_LED_RESERVED_FFFF)) {
6177         if (hw->mac_type == e1000_ich8lan)
6178             eeprom_data = ID_LED_DEFAULT_ICH8LAN;
6179         else
6180             eeprom_data = ID_LED_DEFAULT;
6181     }
6182 
6183     for (i = 0; i < 4; i++) {
6184         temp = (eeprom_data >> (i << 2)) & led_mask;
6185         switch (temp) {
6186         case ID_LED_ON1_DEF2:
6187         case ID_LED_ON1_ON2:
6188         case ID_LED_ON1_OFF2:
6189             hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
6190             hw->ledctl_mode1 |= ledctl_on << (i << 3);
6191             break;
6192         case ID_LED_OFF1_DEF2:
6193         case ID_LED_OFF1_ON2:
6194         case ID_LED_OFF1_OFF2:
6195             hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
6196             hw->ledctl_mode1 |= ledctl_off << (i << 3);
6197             break;
6198         default:
6199             /* Do nothing */
6200             break;
6201         }
6202         switch (temp) {
6203         case ID_LED_DEF1_ON2:
6204         case ID_LED_ON1_ON2:
6205         case ID_LED_OFF1_ON2:
6206             hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
6207             hw->ledctl_mode2 |= ledctl_on << (i << 3);
6208             break;
6209         case ID_LED_DEF1_OFF2:
6210         case ID_LED_ON1_OFF2:
6211         case ID_LED_OFF1_OFF2:
6212             hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
6213             hw->ledctl_mode2 |= ledctl_off << (i << 3);
6214             break;
6215         default:
6216             /* Do nothing */
6217             break;
6218         }
6219     }
6220     return E1000_SUCCESS;
6221 }
6222 
6223 /******************************************************************************
6224  * Prepares SW controlable LED for use and saves the current state of the LED.
6225  *
6226  * hw - Struct containing variables accessed by shared code
6227  *****************************************************************************/
6228 int32_t
e1000_setup_led(struct e1000_hw * hw)6229 e1000_setup_led(struct e1000_hw *hw)
6230 {
6231     uint32_t ledctl;
6232     int32_t ret_val = E1000_SUCCESS;
6233 
6234     DEBUGFUNC("e1000_setup_led");
6235 
6236     switch (hw->mac_type) {
6237     case e1000_82542_rev2_0:
6238     case e1000_82542_rev2_1:
6239     case e1000_82543:
6240     case e1000_82544:
6241         /* No setup necessary */
6242         break;
6243     case e1000_82541:
6244     case e1000_82547:
6245     case e1000_82541_rev_2:
6246     case e1000_82547_rev_2:
6247         /* Turn off PHY Smart Power Down (if enabled) */
6248         ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO,
6249                                      &hw->phy_spd_default);
6250         if (ret_val)
6251             return ret_val;
6252         ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
6253                                       (uint16_t)(hw->phy_spd_default &
6254                                       ~IGP01E1000_GMII_SPD));
6255         if (ret_val)
6256             return ret_val;
6257         /* Fall Through */
6258     default:
6259         if (hw->media_type == e1000_media_type_fiber) {
6260             ledctl = E1000_READ_REG(hw, LEDCTL);
6261             /* Save current LEDCTL settings */
6262             hw->ledctl_default = ledctl;
6263             /* Turn off LED0 */
6264             ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
6265                         E1000_LEDCTL_LED0_BLINK |
6266                         E1000_LEDCTL_LED0_MODE_MASK);
6267             ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
6268                        E1000_LEDCTL_LED0_MODE_SHIFT);
6269             E1000_WRITE_REG(hw, LEDCTL, ledctl);
6270         } else if (hw->media_type == e1000_media_type_copper)
6271             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1);
6272         break;
6273     }
6274 
6275     return E1000_SUCCESS;
6276 }
6277 
6278 
6279 /******************************************************************************
6280  * Used on 82571 and later Si that has LED blink bits.
6281  * Callers must use their own timer and should have already called
6282  * e1000_id_led_init()
6283  * Call e1000_cleanup led() to stop blinking
6284  *
6285  * hw - Struct containing variables accessed by shared code
6286  *****************************************************************************/
6287 int32_t
e1000_blink_led_start(struct e1000_hw * hw)6288 e1000_blink_led_start(struct e1000_hw *hw)
6289 {
6290     int16_t  i;
6291     uint32_t ledctl_blink = 0;
6292 
6293     DEBUGFUNC("e1000_id_led_blink_on");
6294 
6295     if (hw->mac_type < e1000_82571) {
6296         /* Nothing to do */
6297         return E1000_SUCCESS;
6298     }
6299     if (hw->media_type == e1000_media_type_fiber) {
6300         /* always blink LED0 for PCI-E fiber */
6301         ledctl_blink = E1000_LEDCTL_LED0_BLINK |
6302                      (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT);
6303     } else {
6304         /* set the blink bit for each LED that's "on" (0x0E) in ledctl_mode2 */
6305         ledctl_blink = hw->ledctl_mode2;
6306         for (i=0; i < 4; i++)
6307             if (((hw->ledctl_mode2 >> (i * 8)) & 0xFF) ==
6308                 E1000_LEDCTL_MODE_LED_ON)
6309                 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK << (i * 8));
6310     }
6311 
6312     E1000_WRITE_REG(hw, LEDCTL, ledctl_blink);
6313 
6314     return E1000_SUCCESS;
6315 }
6316 
6317 /******************************************************************************
6318  * Restores the saved state of the SW controlable LED.
6319  *
6320  * hw - Struct containing variables accessed by shared code
6321  *****************************************************************************/
6322 int32_t
e1000_cleanup_led(struct e1000_hw * hw)6323 e1000_cleanup_led(struct e1000_hw *hw)
6324 {
6325     int32_t ret_val = E1000_SUCCESS;
6326 
6327     DEBUGFUNC("e1000_cleanup_led");
6328 
6329     switch (hw->mac_type) {
6330     case e1000_82542_rev2_0:
6331     case e1000_82542_rev2_1:
6332     case e1000_82543:
6333     case e1000_82544:
6334         /* No cleanup necessary */
6335         break;
6336     case e1000_82541:
6337     case e1000_82547:
6338     case e1000_82541_rev_2:
6339     case e1000_82547_rev_2:
6340         /* Turn on PHY Smart Power Down (if previously enabled) */
6341         ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
6342                                       hw->phy_spd_default);
6343         if (ret_val)
6344             return ret_val;
6345         /* Fall Through */
6346     default:
6347         if (hw->phy_type == e1000_phy_ife) {
6348             e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED, 0);
6349             break;
6350         }
6351         /* Restore LEDCTL settings */
6352         E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_default);
6353         break;
6354     }
6355 
6356     return E1000_SUCCESS;
6357 }
6358 
6359 /******************************************************************************
6360  * Turns on the software controllable LED
6361  *
6362  * hw - Struct containing variables accessed by shared code
6363  *****************************************************************************/
6364 int32_t
e1000_led_on(struct e1000_hw * hw)6365 e1000_led_on(struct e1000_hw *hw)
6366 {
6367     uint32_t ctrl = E1000_READ_REG(hw, CTRL);
6368 
6369     DEBUGFUNC("e1000_led_on");
6370 
6371     switch (hw->mac_type) {
6372     case e1000_82542_rev2_0:
6373     case e1000_82542_rev2_1:
6374     case e1000_82543:
6375         /* Set SW Defineable Pin 0 to turn on the LED */
6376         ctrl |= E1000_CTRL_SWDPIN0;
6377         ctrl |= E1000_CTRL_SWDPIO0;
6378         break;
6379     case e1000_82544:
6380         if (hw->media_type == e1000_media_type_fiber) {
6381             /* Set SW Defineable Pin 0 to turn on the LED */
6382             ctrl |= E1000_CTRL_SWDPIN0;
6383             ctrl |= E1000_CTRL_SWDPIO0;
6384         } else {
6385             /* Clear SW Defineable Pin 0 to turn on the LED */
6386             ctrl &= ~E1000_CTRL_SWDPIN0;
6387             ctrl |= E1000_CTRL_SWDPIO0;
6388         }
6389         break;
6390     default:
6391         if (hw->media_type == e1000_media_type_fiber) {
6392             /* Clear SW Defineable Pin 0 to turn on the LED */
6393             ctrl &= ~E1000_CTRL_SWDPIN0;
6394             ctrl |= E1000_CTRL_SWDPIO0;
6395         } else if (hw->phy_type == e1000_phy_ife) {
6396             e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED,
6397                  (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_ON));
6398         } else if (hw->media_type == e1000_media_type_copper) {
6399             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode2);
6400             return E1000_SUCCESS;
6401         }
6402         break;
6403     }
6404 
6405     E1000_WRITE_REG(hw, CTRL, ctrl);
6406 
6407     return E1000_SUCCESS;
6408 }
6409 
6410 /******************************************************************************
6411  * Turns off the software controllable LED
6412  *
6413  * hw - Struct containing variables accessed by shared code
6414  *****************************************************************************/
6415 int32_t
e1000_led_off(struct e1000_hw * hw)6416 e1000_led_off(struct e1000_hw *hw)
6417 {
6418     uint32_t ctrl = E1000_READ_REG(hw, CTRL);
6419 
6420     DEBUGFUNC("e1000_led_off");
6421 
6422     switch (hw->mac_type) {
6423     case e1000_82542_rev2_0:
6424     case e1000_82542_rev2_1:
6425     case e1000_82543:
6426         /* Clear SW Defineable Pin 0 to turn off the LED */
6427         ctrl &= ~E1000_CTRL_SWDPIN0;
6428         ctrl |= E1000_CTRL_SWDPIO0;
6429         break;
6430     case e1000_82544:
6431         if (hw->media_type == e1000_media_type_fiber) {
6432             /* Clear SW Defineable Pin 0 to turn off the LED */
6433             ctrl &= ~E1000_CTRL_SWDPIN0;
6434             ctrl |= E1000_CTRL_SWDPIO0;
6435         } else {
6436             /* Set SW Defineable Pin 0 to turn off the LED */
6437             ctrl |= E1000_CTRL_SWDPIN0;
6438             ctrl |= E1000_CTRL_SWDPIO0;
6439         }
6440         break;
6441     default:
6442         if (hw->media_type == e1000_media_type_fiber) {
6443             /* Set SW Defineable Pin 0 to turn off the LED */
6444             ctrl |= E1000_CTRL_SWDPIN0;
6445             ctrl |= E1000_CTRL_SWDPIO0;
6446         } else if (hw->phy_type == e1000_phy_ife) {
6447             e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED,
6448                  (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_OFF));
6449         } else if (hw->media_type == e1000_media_type_copper) {
6450             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1);
6451             return E1000_SUCCESS;
6452         }
6453         break;
6454     }
6455 
6456     E1000_WRITE_REG(hw, CTRL, ctrl);
6457 
6458     return E1000_SUCCESS;
6459 }
6460 
6461 /******************************************************************************
6462  * Clears all hardware statistics counters.
6463  *
6464  * hw - Struct containing variables accessed by shared code
6465  *****************************************************************************/
6466 static void
e1000_clear_hw_cntrs(struct e1000_hw * hw)6467 e1000_clear_hw_cntrs(struct e1000_hw *hw)
6468 {
6469     volatile uint32_t temp;
6470 
6471     temp = E1000_READ_REG(hw, CRCERRS);
6472     temp = E1000_READ_REG(hw, SYMERRS);
6473     temp = E1000_READ_REG(hw, MPC);
6474     temp = E1000_READ_REG(hw, SCC);
6475     temp = E1000_READ_REG(hw, ECOL);
6476     temp = E1000_READ_REG(hw, MCC);
6477     temp = E1000_READ_REG(hw, LATECOL);
6478     temp = E1000_READ_REG(hw, COLC);
6479     temp = E1000_READ_REG(hw, DC);
6480     temp = E1000_READ_REG(hw, SEC);
6481     temp = E1000_READ_REG(hw, RLEC);
6482     temp = E1000_READ_REG(hw, XONRXC);
6483     temp = E1000_READ_REG(hw, XONTXC);
6484     temp = E1000_READ_REG(hw, XOFFRXC);
6485     temp = E1000_READ_REG(hw, XOFFTXC);
6486     temp = E1000_READ_REG(hw, FCRUC);
6487 
6488     if (hw->mac_type != e1000_ich8lan) {
6489     temp = E1000_READ_REG(hw, PRC64);
6490     temp = E1000_READ_REG(hw, PRC127);
6491     temp = E1000_READ_REG(hw, PRC255);
6492     temp = E1000_READ_REG(hw, PRC511);
6493     temp = E1000_READ_REG(hw, PRC1023);
6494     temp = E1000_READ_REG(hw, PRC1522);
6495     }
6496 
6497     temp = E1000_READ_REG(hw, GPRC);
6498     temp = E1000_READ_REG(hw, BPRC);
6499     temp = E1000_READ_REG(hw, MPRC);
6500     temp = E1000_READ_REG(hw, GPTC);
6501     temp = E1000_READ_REG(hw, GORCL);
6502     temp = E1000_READ_REG(hw, GORCH);
6503     temp = E1000_READ_REG(hw, GOTCL);
6504     temp = E1000_READ_REG(hw, GOTCH);
6505     temp = E1000_READ_REG(hw, RNBC);
6506     temp = E1000_READ_REG(hw, RUC);
6507     temp = E1000_READ_REG(hw, RFC);
6508     temp = E1000_READ_REG(hw, ROC);
6509     temp = E1000_READ_REG(hw, RJC);
6510     temp = E1000_READ_REG(hw, TORL);
6511     temp = E1000_READ_REG(hw, TORH);
6512     temp = E1000_READ_REG(hw, TOTL);
6513     temp = E1000_READ_REG(hw, TOTH);
6514     temp = E1000_READ_REG(hw, TPR);
6515     temp = E1000_READ_REG(hw, TPT);
6516 
6517     if (hw->mac_type != e1000_ich8lan) {
6518     temp = E1000_READ_REG(hw, PTC64);
6519     temp = E1000_READ_REG(hw, PTC127);
6520     temp = E1000_READ_REG(hw, PTC255);
6521     temp = E1000_READ_REG(hw, PTC511);
6522     temp = E1000_READ_REG(hw, PTC1023);
6523     temp = E1000_READ_REG(hw, PTC1522);
6524     }
6525 
6526     temp = E1000_READ_REG(hw, MPTC);
6527     temp = E1000_READ_REG(hw, BPTC);
6528 
6529     if (hw->mac_type < e1000_82543) return;
6530 
6531     temp = E1000_READ_REG(hw, ALGNERRC);
6532     temp = E1000_READ_REG(hw, RXERRC);
6533     temp = E1000_READ_REG(hw, TNCRS);
6534     temp = E1000_READ_REG(hw, CEXTERR);
6535     temp = E1000_READ_REG(hw, TSCTC);
6536     temp = E1000_READ_REG(hw, TSCTFC);
6537 
6538     if (hw->mac_type <= e1000_82544) return;
6539 
6540     temp = E1000_READ_REG(hw, MGTPRC);
6541     temp = E1000_READ_REG(hw, MGTPDC);
6542     temp = E1000_READ_REG(hw, MGTPTC);
6543 
6544     if (hw->mac_type <= e1000_82547_rev_2) return;
6545 
6546     temp = E1000_READ_REG(hw, IAC);
6547     temp = E1000_READ_REG(hw, ICRXOC);
6548 
6549     if (hw->mac_type == e1000_ich8lan) return;
6550 
6551     temp = E1000_READ_REG(hw, ICRXPTC);
6552     temp = E1000_READ_REG(hw, ICRXATC);
6553     temp = E1000_READ_REG(hw, ICTXPTC);
6554     temp = E1000_READ_REG(hw, ICTXATC);
6555     temp = E1000_READ_REG(hw, ICTXQEC);
6556     temp = E1000_READ_REG(hw, ICTXQMTC);
6557     temp = E1000_READ_REG(hw, ICRXDMTC);
6558 }
6559 
6560 /******************************************************************************
6561  * Resets Adaptive IFS to its default state.
6562  *
6563  * hw - Struct containing variables accessed by shared code
6564  *
6565  * Call this after e1000_init_hw. You may override the IFS defaults by setting
6566  * hw->ifs_params_forced to TRUE. However, you must initialize hw->
6567  * current_ifs_val, ifs_min_val, ifs_max_val, ifs_step_size, and ifs_ratio
6568  * before calling this function.
6569  *****************************************************************************/
6570 void
e1000_reset_adaptive(struct e1000_hw * hw)6571 e1000_reset_adaptive(struct e1000_hw *hw)
6572 {
6573     DEBUGFUNC("e1000_reset_adaptive");
6574 
6575     if (hw->adaptive_ifs) {
6576         if (!hw->ifs_params_forced) {
6577             hw->current_ifs_val = 0;
6578             hw->ifs_min_val = IFS_MIN;
6579             hw->ifs_max_val = IFS_MAX;
6580             hw->ifs_step_size = IFS_STEP;
6581             hw->ifs_ratio = IFS_RATIO;
6582         }
6583         hw->in_ifs_mode = FALSE;
6584         E1000_WRITE_REG(hw, AIT, 0);
6585     } else {
6586         DEBUGOUT("Not in Adaptive IFS mode!\n");
6587     }
6588 }
6589 
6590 /******************************************************************************
6591  * Called during the callback/watchdog routine to update IFS value based on
6592  * the ratio of transmits to collisions.
6593  *
6594  * hw - Struct containing variables accessed by shared code
6595  * tx_packets - Number of transmits since last callback
6596  * total_collisions - Number of collisions since last callback
6597  *****************************************************************************/
6598 void
e1000_update_adaptive(struct e1000_hw * hw)6599 e1000_update_adaptive(struct e1000_hw *hw)
6600 {
6601     DEBUGFUNC("e1000_update_adaptive");
6602 
6603     if (hw->adaptive_ifs) {
6604         if ((hw->collision_delta * hw->ifs_ratio) > hw->tx_packet_delta) {
6605             if (hw->tx_packet_delta > MIN_NUM_XMITS) {
6606                 hw->in_ifs_mode = TRUE;
6607                 if (hw->current_ifs_val < hw->ifs_max_val) {
6608                     if (hw->current_ifs_val == 0)
6609                         hw->current_ifs_val = hw->ifs_min_val;
6610                     else
6611                         hw->current_ifs_val += hw->ifs_step_size;
6612                     E1000_WRITE_REG(hw, AIT, hw->current_ifs_val);
6613                 }
6614             }
6615         } else {
6616             if (hw->in_ifs_mode && (hw->tx_packet_delta <= MIN_NUM_XMITS)) {
6617                 hw->current_ifs_val = 0;
6618                 hw->in_ifs_mode = FALSE;
6619                 E1000_WRITE_REG(hw, AIT, 0);
6620             }
6621         }
6622     } else {
6623         DEBUGOUT("Not in Adaptive IFS mode!\n");
6624     }
6625 }
6626 
6627 /******************************************************************************
6628  * Adjusts the statistic counters when a frame is accepted by TBI_ACCEPT
6629  *
6630  * hw - Struct containing variables accessed by shared code
6631  * frame_len - The length of the frame in question
6632  * mac_addr - The Ethernet destination address of the frame in question
6633  *****************************************************************************/
6634 void
e1000_tbi_adjust_stats(struct e1000_hw * hw,struct e1000_hw_stats * stats,uint32_t frame_len,uint8_t * mac_addr)6635 e1000_tbi_adjust_stats(struct e1000_hw *hw,
6636                        struct e1000_hw_stats *stats,
6637                        uint32_t frame_len,
6638                        uint8_t *mac_addr)
6639 {
6640     uint64_t carry_bit;
6641 
6642     /* First adjust the frame length. */
6643     frame_len--;
6644     /* We need to adjust the statistics counters, since the hardware
6645      * counters overcount this packet as a CRC error and undercount
6646      * the packet as a good packet
6647      */
6648     /* This packet should not be counted as a CRC error.    */
6649     stats->crcerrs--;
6650     /* This packet does count as a Good Packet Received.    */
6651     stats->gprc++;
6652 
6653     /* Adjust the Good Octets received counters             */
6654     carry_bit = 0x80000000 & stats->gorcl;
6655     stats->gorcl += frame_len;
6656     /* If the high bit of Gorcl (the low 32 bits of the Good Octets
6657      * Received Count) was one before the addition,
6658      * AND it is zero after, then we lost the carry out,
6659      * need to add one to Gorch (Good Octets Received Count High).
6660      * This could be simplified if all environments supported
6661      * 64-bit integers.
6662      */
6663     if (carry_bit && ((stats->gorcl & 0x80000000) == 0))
6664         stats->gorch++;
6665     /* Is this a broadcast or multicast?  Check broadcast first,
6666      * since the test for a multicast frame will test positive on
6667      * a broadcast frame.
6668      */
6669     if ((mac_addr[0] == (uint8_t) 0xff) && (mac_addr[1] == (uint8_t) 0xff))
6670         /* Broadcast packet */
6671         stats->bprc++;
6672     else if (*mac_addr & 0x01)
6673         /* Multicast packet */
6674         stats->mprc++;
6675 
6676     if (frame_len == hw->max_frame_size) {
6677         /* In this case, the hardware has overcounted the number of
6678          * oversize frames.
6679          */
6680         if (stats->roc > 0)
6681             stats->roc--;
6682     }
6683 
6684     /* Adjust the bin counters when the extra byte put the frame in the
6685      * wrong bin. Remember that the frame_len was adjusted above.
6686      */
6687     if (frame_len == 64) {
6688         stats->prc64++;
6689         stats->prc127--;
6690     } else if (frame_len == 127) {
6691         stats->prc127++;
6692         stats->prc255--;
6693     } else if (frame_len == 255) {
6694         stats->prc255++;
6695         stats->prc511--;
6696     } else if (frame_len == 511) {
6697         stats->prc511++;
6698         stats->prc1023--;
6699     } else if (frame_len == 1023) {
6700         stats->prc1023++;
6701         stats->prc1522--;
6702     } else if (frame_len == 1522) {
6703         stats->prc1522++;
6704     }
6705 }
6706 
6707 /******************************************************************************
6708  * Gets the current PCI bus type, speed, and width of the hardware
6709  *
6710  * hw - Struct containing variables accessed by shared code
6711  *****************************************************************************/
6712 void
e1000_get_bus_info(struct e1000_hw * hw)6713 e1000_get_bus_info(struct e1000_hw *hw)
6714 {
6715     int32_t ret_val;
6716     uint16_t pci_ex_link_status;
6717     uint32_t status;
6718 
6719     switch (hw->mac_type) {
6720     case e1000_82542_rev2_0:
6721     case e1000_82542_rev2_1:
6722         hw->bus_type = e1000_bus_type_pci;
6723         hw->bus_speed = e1000_bus_speed_unknown;
6724         hw->bus_width = e1000_bus_width_unknown;
6725         break;
6726     case e1000_82571:
6727     case e1000_82572:
6728     case e1000_82573:
6729     case e1000_80003es2lan:
6730     case e1000_82576:
6731         hw->bus_type = e1000_bus_type_pci_express;
6732         hw->bus_speed = e1000_bus_speed_2500;
6733         ret_val = e1000_read_pcie_cap_reg(hw,
6734                                       PCI_EX_LINK_STATUS,
6735                                       &pci_ex_link_status);
6736         if (ret_val)
6737             hw->bus_width = e1000_bus_width_unknown;
6738         else
6739             hw->bus_width = (pci_ex_link_status & PCI_EX_LINK_WIDTH_MASK) >>
6740                           PCI_EX_LINK_WIDTH_SHIFT;
6741         break;
6742     case e1000_ich8lan:
6743         hw->bus_type = e1000_bus_type_pci_express;
6744         hw->bus_speed = e1000_bus_speed_2500;
6745         hw->bus_width = e1000_bus_width_pciex_1;
6746         break;
6747     default:
6748         status = E1000_READ_REG(hw, STATUS);
6749         hw->bus_type = (status & E1000_STATUS_PCIX_MODE) ?
6750                        e1000_bus_type_pcix : e1000_bus_type_pci;
6751 
6752         if (hw->device_id == E1000_DEV_ID_82546EB_QUAD_COPPER) {
6753             hw->bus_speed = (hw->bus_type == e1000_bus_type_pci) ?
6754                             e1000_bus_speed_66 : e1000_bus_speed_120;
6755         } else if (hw->bus_type == e1000_bus_type_pci) {
6756             hw->bus_speed = (status & E1000_STATUS_PCI66) ?
6757                             e1000_bus_speed_66 : e1000_bus_speed_33;
6758         } else {
6759             switch (status & E1000_STATUS_PCIX_SPEED) {
6760             case E1000_STATUS_PCIX_SPEED_66:
6761                 hw->bus_speed = e1000_bus_speed_66;
6762                 break;
6763             case E1000_STATUS_PCIX_SPEED_100:
6764                 hw->bus_speed = e1000_bus_speed_100;
6765                 break;
6766             case E1000_STATUS_PCIX_SPEED_133:
6767                 hw->bus_speed = e1000_bus_speed_133;
6768                 break;
6769             default:
6770                 hw->bus_speed = e1000_bus_speed_reserved;
6771                 break;
6772             }
6773         }
6774         hw->bus_width = (status & E1000_STATUS_BUS64) ?
6775                         e1000_bus_width_64 : e1000_bus_width_32;
6776         break;
6777     }
6778 }
6779 
6780 /******************************************************************************
6781  * Writes a value to one of the devices registers using port I/O (as opposed to
6782  * memory mapped I/O). Only 82544 and newer devices support port I/O.
6783  *
6784  * hw - Struct containing variables accessed by shared code
6785  * offset - offset to write to
6786  * value - value to write
6787  *****************************************************************************/
6788 static void
e1000_write_reg_io(struct e1000_hw * hw,uint32_t offset,uint32_t value)6789 e1000_write_reg_io(struct e1000_hw *hw,
6790                    uint32_t offset,
6791                    uint32_t value)
6792 {
6793     unsigned long io_addr = hw->io_base;
6794     unsigned long io_data = hw->io_base + 4;
6795 
6796     e1000_io_write(hw, io_addr, offset);
6797     e1000_io_write(hw, io_data, value);
6798 }
6799 
6800 /******************************************************************************
6801  * Estimates the cable length.
6802  *
6803  * hw - Struct containing variables accessed by shared code
6804  * min_length - The estimated minimum length
6805  * max_length - The estimated maximum length
6806  *
6807  * returns: - E1000_ERR_XXX
6808  *            E1000_SUCCESS
6809  *
6810  * This function always returns a ranged length (minimum & maximum).
6811  * So for M88 phy's, this function interprets the one value returned from the
6812  * register to the minimum and maximum range.
6813  * For IGP phy's, the function calculates the range by the AGC registers.
6814  *****************************************************************************/
6815 static int32_t
e1000_get_cable_length(struct e1000_hw * hw,uint16_t * min_length,uint16_t * max_length)6816 e1000_get_cable_length(struct e1000_hw *hw,
6817                        uint16_t *min_length,
6818                        uint16_t *max_length)
6819 {
6820     int32_t ret_val;
6821     uint16_t agc_value = 0;
6822     uint16_t i, phy_data;
6823     uint16_t cable_length;
6824 
6825     DEBUGFUNC("e1000_get_cable_length");
6826 
6827     *min_length = *max_length = 0;
6828 
6829     /* Use old method for Phy older than IGP */
6830     if (hw->phy_type == e1000_phy_m88) {
6831 
6832         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
6833                                      &phy_data);
6834         if (ret_val)
6835             return ret_val;
6836         cable_length = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
6837                        M88E1000_PSSR_CABLE_LENGTH_SHIFT;
6838 
6839         /* Convert the enum value to ranged values */
6840         switch (cable_length) {
6841         case e1000_cable_length_50:
6842             *min_length = 0;
6843             *max_length = e1000_igp_cable_length_50;
6844             break;
6845         case e1000_cable_length_50_80:
6846             *min_length = e1000_igp_cable_length_50;
6847             *max_length = e1000_igp_cable_length_80;
6848             break;
6849         case e1000_cable_length_80_110:
6850             *min_length = e1000_igp_cable_length_80;
6851             *max_length = e1000_igp_cable_length_110;
6852             break;
6853         case e1000_cable_length_110_140:
6854             *min_length = e1000_igp_cable_length_110;
6855             *max_length = e1000_igp_cable_length_140;
6856             break;
6857         case e1000_cable_length_140:
6858             *min_length = e1000_igp_cable_length_140;
6859             *max_length = e1000_igp_cable_length_170;
6860             break;
6861         default:
6862             return -E1000_ERR_PHY;
6863             break;
6864         }
6865     } else if (hw->phy_type == e1000_phy_gg82563) {
6866         ret_val = e1000_read_phy_reg(hw, GG82563_PHY_DSP_DISTANCE,
6867                                      &phy_data);
6868         if (ret_val)
6869             return ret_val;
6870         cable_length = phy_data & GG82563_DSPD_CABLE_LENGTH;
6871 
6872         switch (cable_length) {
6873         case e1000_gg_cable_length_60:
6874             *min_length = 0;
6875             *max_length = e1000_igp_cable_length_60;
6876             break;
6877         case e1000_gg_cable_length_60_115:
6878             *min_length = e1000_igp_cable_length_60;
6879             *max_length = e1000_igp_cable_length_115;
6880             break;
6881         case e1000_gg_cable_length_115_150:
6882             *min_length = e1000_igp_cable_length_115;
6883             *max_length = e1000_igp_cable_length_150;
6884             break;
6885         case e1000_gg_cable_length_150:
6886             *min_length = e1000_igp_cable_length_150;
6887             *max_length = e1000_igp_cable_length_180;
6888             break;
6889         default:
6890             return -E1000_ERR_PHY;
6891             break;
6892         }
6893     } else if (hw->phy_type == e1000_phy_igp) { /* For IGP PHY */
6894         uint16_t cur_agc_value;
6895         uint16_t min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
6896         uint16_t agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
6897                                                          {IGP01E1000_PHY_AGC_A,
6898                                                           IGP01E1000_PHY_AGC_B,
6899                                                           IGP01E1000_PHY_AGC_C,
6900                                                           IGP01E1000_PHY_AGC_D};
6901         /* Read the AGC registers for all channels */
6902         for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
6903 
6904             ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
6905             if (ret_val)
6906                 return ret_val;
6907 
6908             cur_agc_value = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT;
6909 
6910             /* Value bound check. */
6911             if ((cur_agc_value >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
6912                 (cur_agc_value == 0))
6913                 return -E1000_ERR_PHY;
6914 
6915             agc_value += cur_agc_value;
6916 
6917             /* Update minimal AGC value. */
6918             if (min_agc_value > cur_agc_value)
6919                 min_agc_value = cur_agc_value;
6920         }
6921 
6922         /* Remove the minimal AGC result for length < 50m */
6923         if (agc_value < IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) {
6924             agc_value -= min_agc_value;
6925 
6926             /* Get the average length of the remaining 3 channels */
6927             agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
6928         } else {
6929             /* Get the average length of all the 4 channels. */
6930             agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
6931         }
6932 
6933         /* Set the range of the calculated length. */
6934         *min_length = ((e1000_igp_cable_length_table[agc_value] -
6935                        IGP01E1000_AGC_RANGE) > 0) ?
6936                        (e1000_igp_cable_length_table[agc_value] -
6937                        IGP01E1000_AGC_RANGE) : 0;
6938         *max_length = e1000_igp_cable_length_table[agc_value] +
6939                       IGP01E1000_AGC_RANGE;
6940     } else if (hw->phy_type == e1000_phy_igp_2 ||
6941                hw->phy_type == e1000_phy_igp_3) {
6942         uint16_t cur_agc_index, max_agc_index = 0;
6943         uint16_t min_agc_index = IGP02E1000_AGC_LENGTH_TABLE_SIZE - 1;
6944         uint16_t agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] =
6945                                                          {IGP02E1000_PHY_AGC_A,
6946                                                           IGP02E1000_PHY_AGC_B,
6947                                                           IGP02E1000_PHY_AGC_C,
6948                                                           IGP02E1000_PHY_AGC_D};
6949         /* Read the AGC registers for all channels */
6950         for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
6951             ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
6952             if (ret_val)
6953                 return ret_val;
6954 
6955             /* Getting bits 15:9, which represent the combination of course and
6956              * fine gain values.  The result is a number that can be put into
6957              * the lookup table to obtain the approximate cable length. */
6958             cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
6959                             IGP02E1000_AGC_LENGTH_MASK;
6960 
6961             /* Array index bound check. */
6962             if ((cur_agc_index >= IGP02E1000_AGC_LENGTH_TABLE_SIZE) ||
6963                 (cur_agc_index == 0))
6964                 return -E1000_ERR_PHY;
6965 
6966             /* Remove min & max AGC values from calculation. */
6967             if (e1000_igp_2_cable_length_table[min_agc_index] >
6968                 e1000_igp_2_cable_length_table[cur_agc_index])
6969                 min_agc_index = cur_agc_index;
6970             if (e1000_igp_2_cable_length_table[max_agc_index] <
6971                 e1000_igp_2_cable_length_table[cur_agc_index])
6972                 max_agc_index = cur_agc_index;
6973 
6974             agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
6975         }
6976 
6977         agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
6978                       e1000_igp_2_cable_length_table[max_agc_index]);
6979         agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
6980 
6981         /* Calculate cable length with the error range of +/- 10 meters. */
6982         *min_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
6983                        (agc_value - IGP02E1000_AGC_RANGE) : 0;
6984         *max_length = agc_value + IGP02E1000_AGC_RANGE;
6985     }
6986 
6987     return E1000_SUCCESS;
6988 }
6989 
6990 /******************************************************************************
6991  * Check the cable polarity
6992  *
6993  * hw - Struct containing variables accessed by shared code
6994  * polarity - output parameter : 0 - Polarity is not reversed
6995  *                               1 - Polarity is reversed.
6996  *
6997  * returns: - E1000_ERR_XXX
6998  *            E1000_SUCCESS
6999  *
7000  * For phy's older then IGP, this function simply reads the polarity bit in the
7001  * Phy Status register.  For IGP phy's, this bit is valid only if link speed is
7002  * 10 Mbps.  If the link speed is 100 Mbps there is no polarity so this bit will
7003  * return 0.  If the link speed is 1000 Mbps the polarity status is in the
7004  * IGP01E1000_PHY_PCS_INIT_REG.
7005  *****************************************************************************/
7006 static int32_t
e1000_check_polarity(struct e1000_hw * hw,e1000_rev_polarity * polarity)7007 e1000_check_polarity(struct e1000_hw *hw,
7008                      e1000_rev_polarity *polarity)
7009 {
7010     int32_t ret_val;
7011     uint16_t phy_data;
7012 
7013     DEBUGFUNC("e1000_check_polarity");
7014 
7015     if ((hw->phy_type == e1000_phy_m88) ||
7016         (hw->phy_type == e1000_phy_gg82563)) {
7017         /* return the Polarity bit in the Status register. */
7018         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
7019                                      &phy_data);
7020         if (ret_val)
7021             return ret_val;
7022         *polarity = ((phy_data & M88E1000_PSSR_REV_POLARITY) >>
7023                      M88E1000_PSSR_REV_POLARITY_SHIFT) ?
7024                      e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
7025 
7026     } else if (hw->phy_type == e1000_phy_igp ||
7027               hw->phy_type == e1000_phy_igp_3 ||
7028               hw->phy_type == e1000_phy_igp_2) {
7029         /* Read the Status register to check the speed */
7030         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS,
7031                                      &phy_data);
7032         if (ret_val)
7033             return ret_val;
7034 
7035         /* If speed is 1000 Mbps, must read the IGP01E1000_PHY_PCS_INIT_REG to
7036          * find the polarity status */
7037         if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
7038            IGP01E1000_PSSR_SPEED_1000MBPS) {
7039 
7040             /* Read the GIG initialization PCS register (0x00B4) */
7041             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG,
7042                                          &phy_data);
7043             if (ret_val)
7044                 return ret_val;
7045 
7046             /* Check the polarity bits */
7047             *polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ?
7048                          e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
7049         } else {
7050             /* For 10 Mbps, read the polarity bit in the status register. (for
7051              * 100 Mbps this bit is always 0) */
7052             *polarity = (phy_data & IGP01E1000_PSSR_POLARITY_REVERSED) ?
7053                          e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
7054         }
7055     } else if (hw->phy_type == e1000_phy_ife) {
7056         ret_val = e1000_read_phy_reg(hw, IFE_PHY_EXTENDED_STATUS_CONTROL,
7057                                      &phy_data);
7058         if (ret_val)
7059             return ret_val;
7060         *polarity = ((phy_data & IFE_PESC_POLARITY_REVERSED) >>
7061                      IFE_PESC_POLARITY_REVERSED_SHIFT) ?
7062                      e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
7063     }
7064     return E1000_SUCCESS;
7065 }
7066 
7067 /******************************************************************************
7068  * Check if Downshift occured
7069  *
7070  * hw - Struct containing variables accessed by shared code
7071  * downshift - output parameter : 0 - No Downshift ocured.
7072  *                                1 - Downshift ocured.
7073  *
7074  * returns: - E1000_ERR_XXX
7075  *            E1000_SUCCESS
7076  *
7077  * For phy's older then IGP, this function reads the Downshift bit in the Phy
7078  * Specific Status register.  For IGP phy's, it reads the Downgrade bit in the
7079  * Link Health register.  In IGP this bit is latched high, so the driver must
7080  * read it immediately after link is established.
7081  *****************************************************************************/
7082 static int32_t
e1000_check_downshift(struct e1000_hw * hw)7083 e1000_check_downshift(struct e1000_hw *hw)
7084 {
7085     int32_t ret_val;
7086     uint16_t phy_data;
7087 
7088     DEBUGFUNC("e1000_check_downshift");
7089 
7090     if (hw->phy_type == e1000_phy_igp ||
7091         hw->phy_type == e1000_phy_igp_3 ||
7092         hw->phy_type == e1000_phy_igp_2) {
7093         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
7094                                      &phy_data);
7095         if (ret_val)
7096             return ret_val;
7097 
7098         hw->speed_downgraded = (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0;
7099     } else if ((hw->phy_type == e1000_phy_m88) ||
7100                (hw->phy_type == e1000_phy_gg82563)) {
7101         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
7102                                      &phy_data);
7103         if (ret_val)
7104             return ret_val;
7105 
7106         hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >>
7107                                M88E1000_PSSR_DOWNSHIFT_SHIFT;
7108     } else if (hw->phy_type == e1000_phy_ife) {
7109         /* e1000_phy_ife supports 10/100 speed only */
7110         hw->speed_downgraded = FALSE;
7111     }
7112 
7113     return E1000_SUCCESS;
7114 }
7115 
7116 /*****************************************************************************
7117  *
7118  * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
7119  * gigabit link is achieved to improve link quality.
7120  *
7121  * hw: Struct containing variables accessed by shared code
7122  *
7123  * returns: - E1000_ERR_PHY if fail to read/write the PHY
7124  *            E1000_SUCCESS at any other case.
7125  *
7126  ****************************************************************************/
7127 
7128 static int32_t
e1000_config_dsp_after_link_change(struct e1000_hw * hw,boolean_t link_up)7129 e1000_config_dsp_after_link_change(struct e1000_hw *hw,
7130                                    boolean_t link_up)
7131 {
7132     int32_t ret_val;
7133     uint16_t phy_data, phy_saved_data, speed, duplex, i;
7134     uint16_t dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
7135                                         {IGP01E1000_PHY_AGC_PARAM_A,
7136                                         IGP01E1000_PHY_AGC_PARAM_B,
7137                                         IGP01E1000_PHY_AGC_PARAM_C,
7138                                         IGP01E1000_PHY_AGC_PARAM_D};
7139     uint16_t min_length, max_length;
7140 
7141     DEBUGFUNC("e1000_config_dsp_after_link_change");
7142 
7143     if (hw->phy_type != e1000_phy_igp)
7144         return E1000_SUCCESS;
7145 
7146     if (link_up) {
7147         ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
7148         if (ret_val) {
7149             DEBUGOUT("Error getting link speed and duplex\n");
7150             return ret_val;
7151         }
7152 
7153         if (speed == SPEED_1000) {
7154 
7155             ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
7156             if (ret_val)
7157                 return ret_val;
7158 
7159             if ((hw->dsp_config_state == e1000_dsp_config_enabled) &&
7160                 min_length >= e1000_igp_cable_length_50) {
7161 
7162                 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
7163                     ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i],
7164                                                  &phy_data);
7165                     if (ret_val)
7166                         return ret_val;
7167 
7168                     phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
7169 
7170                     ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i],
7171                                                   phy_data);
7172                     if (ret_val)
7173                         return ret_val;
7174                 }
7175                 hw->dsp_config_state = e1000_dsp_config_activated;
7176             }
7177 
7178             if ((hw->ffe_config_state == e1000_ffe_config_enabled) &&
7179                (min_length < e1000_igp_cable_length_50)) {
7180 
7181                 uint16_t ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
7182                 uint32_t idle_errs = 0;
7183 
7184                 /* clear previous idle error counts */
7185                 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
7186                                              &phy_data);
7187                 if (ret_val)
7188                     return ret_val;
7189 
7190                 for (i = 0; i < ffe_idle_err_timeout; i++) {
7191                     udelay(1000);
7192                     ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
7193                                                  &phy_data);
7194                     if (ret_val)
7195                         return ret_val;
7196 
7197                     idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
7198                     if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
7199                         hw->ffe_config_state = e1000_ffe_config_active;
7200 
7201                         ret_val = e1000_write_phy_reg(hw,
7202                                     IGP01E1000_PHY_DSP_FFE,
7203                                     IGP01E1000_PHY_DSP_FFE_CM_CP);
7204                         if (ret_val)
7205                             return ret_val;
7206                         break;
7207                     }
7208 
7209                     if (idle_errs)
7210                         ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_100;
7211                 }
7212             }
7213         }
7214     } else {
7215         if (hw->dsp_config_state == e1000_dsp_config_activated) {
7216             /* Save off the current value of register 0x2F5B to be restored at
7217              * the end of the routines. */
7218             ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
7219 
7220             if (ret_val)
7221                 return ret_val;
7222 
7223             /* Disable the PHY transmitter */
7224             ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
7225 
7226             if (ret_val)
7227                 return ret_val;
7228 
7229             mdelay(20);
7230 
7231             ret_val = e1000_write_phy_reg(hw, 0x0000,
7232                                           IGP01E1000_IEEE_FORCE_GIGA);
7233             if (ret_val)
7234                 return ret_val;
7235             for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
7236                 ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i], &phy_data);
7237                 if (ret_val)
7238                     return ret_val;
7239 
7240                 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
7241                 phy_data |=  IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
7242 
7243                 ret_val = e1000_write_phy_reg(hw,dsp_reg_array[i], phy_data);
7244                 if (ret_val)
7245                     return ret_val;
7246             }
7247 
7248             ret_val = e1000_write_phy_reg(hw, 0x0000,
7249                                           IGP01E1000_IEEE_RESTART_AUTONEG);
7250             if (ret_val)
7251                 return ret_val;
7252 
7253             mdelay(20);
7254 
7255             /* Now enable the transmitter */
7256             ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
7257 
7258             if (ret_val)
7259                 return ret_val;
7260 
7261             hw->dsp_config_state = e1000_dsp_config_enabled;
7262         }
7263 
7264         if (hw->ffe_config_state == e1000_ffe_config_active) {
7265             /* Save off the current value of register 0x2F5B to be restored at
7266              * the end of the routines. */
7267             ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
7268 
7269             if (ret_val)
7270                 return ret_val;
7271 
7272             /* Disable the PHY transmitter */
7273             ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
7274 
7275             if (ret_val)
7276                 return ret_val;
7277 
7278             mdelay(20);
7279 
7280             ret_val = e1000_write_phy_reg(hw, 0x0000,
7281                                           IGP01E1000_IEEE_FORCE_GIGA);
7282             if (ret_val)
7283                 return ret_val;
7284             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE,
7285                                           IGP01E1000_PHY_DSP_FFE_DEFAULT);
7286             if (ret_val)
7287                 return ret_val;
7288 
7289             ret_val = e1000_write_phy_reg(hw, 0x0000,
7290                                           IGP01E1000_IEEE_RESTART_AUTONEG);
7291             if (ret_val)
7292                 return ret_val;
7293 
7294             mdelay(20);
7295 
7296             /* Now enable the transmitter */
7297             ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
7298 
7299             if (ret_val)
7300                 return ret_val;
7301 
7302             hw->ffe_config_state = e1000_ffe_config_enabled;
7303         }
7304     }
7305     return E1000_SUCCESS;
7306 }
7307 
7308 /*****************************************************************************
7309  * Set PHY to class A mode
7310  * Assumes the following operations will follow to enable the new class mode.
7311  *  1. Do a PHY soft reset
7312  *  2. Restart auto-negotiation or force link.
7313  *
7314  * hw - Struct containing variables accessed by shared code
7315  ****************************************************************************/
7316 static int32_t
e1000_set_phy_mode(struct e1000_hw * hw)7317 e1000_set_phy_mode(struct e1000_hw *hw)
7318 {
7319     int32_t ret_val;
7320     uint16_t eeprom_data;
7321 
7322     DEBUGFUNC("e1000_set_phy_mode");
7323 
7324     if ((hw->mac_type == e1000_82545_rev_3) &&
7325         (hw->media_type == e1000_media_type_copper)) {
7326         ret_val = e1000_read_eeprom(hw, EEPROM_PHY_CLASS_WORD, 1, &eeprom_data);
7327         if (ret_val) {
7328             return ret_val;
7329         }
7330 
7331         if ((eeprom_data != EEPROM_RESERVED_WORD) &&
7332             (eeprom_data & EEPROM_PHY_CLASS_A)) {
7333             ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x000B);
7334             if (ret_val)
7335                 return ret_val;
7336             ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x8104);
7337             if (ret_val)
7338                 return ret_val;
7339 
7340             hw->phy_reset_disable = FALSE;
7341         }
7342     }
7343 
7344     return E1000_SUCCESS;
7345 }
7346 
7347 /*****************************************************************************
7348  *
7349  * This function sets the lplu state according to the active flag.  When
7350  * activating lplu this function also disables smart speed and vise versa.
7351  * lplu will not be activated unless the device autonegotiation advertisment
7352  * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
7353  * hw: Struct containing variables accessed by shared code
7354  * active - true to enable lplu false to disable lplu.
7355  *
7356  * returns: - E1000_ERR_PHY if fail to read/write the PHY
7357  *            E1000_SUCCESS at any other case.
7358  *
7359  ****************************************************************************/
7360 
7361 static int32_t
e1000_set_d3_lplu_state(struct e1000_hw * hw,boolean_t active)7362 e1000_set_d3_lplu_state(struct e1000_hw *hw,
7363                         boolean_t active)
7364 {
7365     uint32_t phy_ctrl = 0;
7366     int32_t ret_val;
7367     uint16_t phy_data;
7368     DEBUGFUNC("e1000_set_d3_lplu_state");
7369 
7370     if (hw->phy_type != e1000_phy_igp && hw->phy_type != e1000_phy_igp_2
7371         && hw->phy_type != e1000_phy_igp_3)
7372         return E1000_SUCCESS;
7373 
7374     /* During driver activity LPLU should not be used or it will attain link
7375      * from the lowest speeds starting from 10Mbps. The capability is used for
7376      * Dx transitions and states */
7377     if (hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2) {
7378         ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
7379         if (ret_val)
7380             return ret_val;
7381     } else if (hw->mac_type == e1000_ich8lan) {
7382         /* MAC writes into PHY register based on the state transition
7383          * and start auto-negotiation. SW driver can overwrite the settings
7384          * in CSR PHY power control E1000_PHY_CTRL register. */
7385         phy_ctrl = E1000_READ_REG(hw, PHY_CTRL);
7386     } else {
7387         ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
7388         if (ret_val)
7389             return ret_val;
7390     }
7391 
7392     if (!active) {
7393         if (hw->mac_type == e1000_82541_rev_2 ||
7394             hw->mac_type == e1000_82547_rev_2) {
7395             phy_data &= ~IGP01E1000_GMII_FLEX_SPD;
7396             ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
7397             if (ret_val)
7398                 return ret_val;
7399         } else {
7400             if (hw->mac_type == e1000_ich8lan) {
7401                 phy_ctrl &= ~E1000_PHY_CTRL_NOND0A_LPLU;
7402                 E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
7403             } else {
7404                 phy_data &= ~IGP02E1000_PM_D3_LPLU;
7405                 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
7406                                               phy_data);
7407                 if (ret_val)
7408                     return ret_val;
7409             }
7410         }
7411 
7412         /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used during
7413          * Dx states where the power conservation is most important.  During
7414          * driver activity we should enable SmartSpeed, so performance is
7415          * maintained. */
7416         if (hw->smart_speed == e1000_smart_speed_on) {
7417             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7418                                          &phy_data);
7419             if (ret_val)
7420                 return ret_val;
7421 
7422             phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
7423             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7424                                           phy_data);
7425             if (ret_val)
7426                 return ret_val;
7427         } else if (hw->smart_speed == e1000_smart_speed_off) {
7428             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7429                                          &phy_data);
7430             if (ret_val)
7431                 return ret_val;
7432 
7433             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7434             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7435                                           phy_data);
7436             if (ret_val)
7437                 return ret_val;
7438         }
7439 
7440     } else if ((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT) ||
7441                (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL ) ||
7442                (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_100_ALL)) {
7443 
7444         if (hw->mac_type == e1000_82541_rev_2 ||
7445             hw->mac_type == e1000_82547_rev_2) {
7446             phy_data |= IGP01E1000_GMII_FLEX_SPD;
7447             ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
7448             if (ret_val)
7449                 return ret_val;
7450         } else {
7451             if (hw->mac_type == e1000_ich8lan) {
7452                 phy_ctrl |= E1000_PHY_CTRL_NOND0A_LPLU;
7453                 E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
7454             } else {
7455                 phy_data |= IGP02E1000_PM_D3_LPLU;
7456                 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
7457                                               phy_data);
7458                 if (ret_val)
7459                     return ret_val;
7460             }
7461         }
7462 
7463         /* When LPLU is enabled we should disable SmartSpeed */
7464         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
7465         if (ret_val)
7466             return ret_val;
7467 
7468         phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7469         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
7470         if (ret_val)
7471             return ret_val;
7472 
7473     }
7474     return E1000_SUCCESS;
7475 }
7476 
7477 /*****************************************************************************
7478  *
7479  * This function sets the lplu d0 state according to the active flag.  When
7480  * activating lplu this function also disables smart speed and vise versa.
7481  * lplu will not be activated unless the device autonegotiation advertisment
7482  * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
7483  * hw: Struct containing variables accessed by shared code
7484  * active - true to enable lplu false to disable lplu.
7485  *
7486  * returns: - E1000_ERR_PHY if fail to read/write the PHY
7487  *            E1000_SUCCESS at any other case.
7488  *
7489  ****************************************************************************/
7490 
7491 static int32_t
e1000_set_d0_lplu_state(struct e1000_hw * hw,boolean_t active)7492 e1000_set_d0_lplu_state(struct e1000_hw *hw,
7493                         boolean_t active)
7494 {
7495     uint32_t phy_ctrl = 0;
7496     int32_t ret_val;
7497     uint16_t phy_data;
7498     DEBUGFUNC("e1000_set_d0_lplu_state");
7499 
7500     if (hw->mac_type <= e1000_82547_rev_2)
7501         return E1000_SUCCESS;
7502 
7503     if (hw->mac_type == e1000_ich8lan) {
7504         phy_ctrl = E1000_READ_REG(hw, PHY_CTRL);
7505     } else {
7506         ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
7507         if (ret_val)
7508             return ret_val;
7509     }
7510 
7511     if (!active) {
7512         if (hw->mac_type == e1000_ich8lan) {
7513             phy_ctrl &= ~E1000_PHY_CTRL_D0A_LPLU;
7514             E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
7515         } else {
7516             phy_data &= ~IGP02E1000_PM_D0_LPLU;
7517             ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
7518             if (ret_val)
7519                 return ret_val;
7520         }
7521 
7522         /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used during
7523          * Dx states where the power conservation is most important.  During
7524          * driver activity we should enable SmartSpeed, so performance is
7525          * maintained. */
7526         if (hw->smart_speed == e1000_smart_speed_on) {
7527             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7528                                          &phy_data);
7529             if (ret_val)
7530                 return ret_val;
7531 
7532             phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
7533             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7534                                           phy_data);
7535             if (ret_val)
7536                 return ret_val;
7537         } else if (hw->smart_speed == e1000_smart_speed_off) {
7538             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7539                                          &phy_data);
7540             if (ret_val)
7541                 return ret_val;
7542 
7543             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7544             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7545                                           phy_data);
7546             if (ret_val)
7547                 return ret_val;
7548         }
7549 
7550 
7551     } else {
7552 
7553         if (hw->mac_type == e1000_ich8lan) {
7554             phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU;
7555             E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
7556         } else {
7557             phy_data |= IGP02E1000_PM_D0_LPLU;
7558             ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
7559             if (ret_val)
7560                 return ret_val;
7561         }
7562 
7563         /* When LPLU is enabled we should disable SmartSpeed */
7564         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
7565         if (ret_val)
7566             return ret_val;
7567 
7568         phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7569         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
7570         if (ret_val)
7571             return ret_val;
7572 
7573     }
7574     return E1000_SUCCESS;
7575 }
7576 
7577 /******************************************************************************
7578  * Change VCO speed register to improve Bit Error Rate performance of SERDES.
7579  *
7580  * hw - Struct containing variables accessed by shared code
7581  *****************************************************************************/
7582 static int32_t
e1000_set_vco_speed(struct e1000_hw * hw)7583 e1000_set_vco_speed(struct e1000_hw *hw)
7584 {
7585     int32_t  ret_val;
7586     uint16_t default_page = 0;
7587     uint16_t phy_data;
7588 
7589     DEBUGFUNC("e1000_set_vco_speed");
7590 
7591     switch (hw->mac_type) {
7592     case e1000_82545_rev_3:
7593     case e1000_82546_rev_3:
7594        break;
7595     default:
7596         return E1000_SUCCESS;
7597     }
7598 
7599     /* Set PHY register 30, page 5, bit 8 to 0 */
7600 
7601     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, &default_page);
7602     if (ret_val)
7603         return ret_val;
7604 
7605     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005);
7606     if (ret_val)
7607         return ret_val;
7608 
7609     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
7610     if (ret_val)
7611         return ret_val;
7612 
7613     phy_data &= ~M88E1000_PHY_VCO_REG_BIT8;
7614     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
7615     if (ret_val)
7616         return ret_val;
7617 
7618     /* Set PHY register 30, page 4, bit 11 to 1 */
7619 
7620     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004);
7621     if (ret_val)
7622         return ret_val;
7623 
7624     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
7625     if (ret_val)
7626         return ret_val;
7627 
7628     phy_data |= M88E1000_PHY_VCO_REG_BIT11;
7629     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
7630     if (ret_val)
7631         return ret_val;
7632 
7633     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, default_page);
7634     if (ret_val)
7635         return ret_val;
7636 
7637     return E1000_SUCCESS;
7638 }
7639 
7640 
7641 /*****************************************************************************
7642  * This function reads the cookie from ARC ram.
7643  *
7644  * returns: - E1000_SUCCESS .
7645  ****************************************************************************/
7646 static int32_t
e1000_host_if_read_cookie(struct e1000_hw * hw,uint8_t * buffer)7647 e1000_host_if_read_cookie(struct e1000_hw * hw, uint8_t *buffer)
7648 {
7649     uint8_t i;
7650     uint32_t offset = E1000_MNG_DHCP_COOKIE_OFFSET;
7651     uint8_t length = E1000_MNG_DHCP_COOKIE_LENGTH;
7652 
7653     length = (length >> 2);
7654     offset = (offset >> 2);
7655 
7656     for (i = 0; i < length; i++) {
7657         *((uint32_t *) buffer + i) =
7658             E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset + i);
7659     }
7660     return E1000_SUCCESS;
7661 }
7662 
7663 
7664 /*****************************************************************************
7665  * This function checks whether the HOST IF is enabled for command operaton
7666  * and also checks whether the previous command is completed.
7667  * It busy waits in case of previous command is not completed.
7668  *
7669  * returns: - E1000_ERR_HOST_INTERFACE_COMMAND in case if is not ready or
7670  *            timeout
7671  *          - E1000_SUCCESS for success.
7672  ****************************************************************************/
7673 static int32_t
e1000_mng_enable_host_if(struct e1000_hw * hw)7674 e1000_mng_enable_host_if(struct e1000_hw * hw)
7675 {
7676     uint32_t hicr;
7677     uint8_t i;
7678 
7679     /* Check that the host interface is enabled. */
7680     hicr = E1000_READ_REG(hw, HICR);
7681     if ((hicr & E1000_HICR_EN) == 0) {
7682         DEBUGOUT("E1000_HOST_EN bit disabled.\n");
7683         return -E1000_ERR_HOST_INTERFACE_COMMAND;
7684     }
7685     /* check the previous command is completed */
7686     for (i = 0; i < E1000_MNG_DHCP_COMMAND_TIMEOUT; i++) {
7687         hicr = E1000_READ_REG(hw, HICR);
7688         if (!(hicr & E1000_HICR_C))
7689             break;
7690         mdelay(1);
7691     }
7692 
7693     if (i == E1000_MNG_DHCP_COMMAND_TIMEOUT) {
7694         DEBUGOUT("Previous command timeout failed .\n");
7695         return -E1000_ERR_HOST_INTERFACE_COMMAND;
7696     }
7697     return E1000_SUCCESS;
7698 }
7699 
7700 /*****************************************************************************
7701  * This function writes the buffer content at the offset given on the host if.
7702  * It also does alignment considerations to do the writes in most efficient way.
7703  * Also fills up the sum of the buffer in *buffer parameter.
7704  *
7705  * returns  - E1000_SUCCESS for success.
7706  ****************************************************************************/
7707 static int32_t
e1000_mng_host_if_write(struct e1000_hw * hw,uint8_t * buffer,uint16_t length,uint16_t offset,uint8_t * sum)7708 e1000_mng_host_if_write(struct e1000_hw * hw, uint8_t *buffer,
7709                         uint16_t length, uint16_t offset, uint8_t *sum)
7710 {
7711     uint8_t *tmp;
7712     uint8_t *bufptr = buffer;
7713     uint32_t data = 0;
7714     uint16_t remaining, i, j, prev_bytes;
7715 
7716     /* sum = only sum of the data and it is not checksum */
7717 
7718     if (length == 0 || offset + length > E1000_HI_MAX_MNG_DATA_LENGTH) {
7719         return -E1000_ERR_PARAM;
7720     }
7721 
7722     tmp = (uint8_t *)&data;
7723     prev_bytes = offset & 0x3;
7724     offset &= 0xFFFC;
7725     offset >>= 2;
7726 
7727     if (prev_bytes) {
7728         data = E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset);
7729         for (j = prev_bytes; j < sizeof(uint32_t); j++) {
7730             *(tmp + j) = *bufptr++;
7731             *sum += *(tmp + j);
7732         }
7733         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset, data);
7734         length -= j - prev_bytes;
7735         offset++;
7736     }
7737 
7738     remaining = length & 0x3;
7739     length -= remaining;
7740 
7741     /* Calculate length in DWORDs */
7742     length >>= 2;
7743 
7744     /* The device driver writes the relevant command block into the
7745      * ram area. */
7746     for (i = 0; i < length; i++) {
7747         for (j = 0; j < sizeof(uint32_t); j++) {
7748             *(tmp + j) = *bufptr++;
7749             *sum += *(tmp + j);
7750         }
7751 
7752         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
7753     }
7754     if (remaining) {
7755         for (j = 0; j < sizeof(uint32_t); j++) {
7756             if (j < remaining)
7757                 *(tmp + j) = *bufptr++;
7758             else
7759                 *(tmp + j) = 0;
7760 
7761             *sum += *(tmp + j);
7762         }
7763         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
7764     }
7765 
7766     return E1000_SUCCESS;
7767 }
7768 
7769 
7770 /*****************************************************************************
7771  * This function writes the command header after does the checksum calculation.
7772  *
7773  * returns  - E1000_SUCCESS for success.
7774  ****************************************************************************/
7775 static int32_t
e1000_mng_write_cmd_header(struct e1000_hw * hw,struct e1000_host_mng_command_header * hdr)7776 e1000_mng_write_cmd_header(struct e1000_hw * hw,
7777                            struct e1000_host_mng_command_header * hdr)
7778 {
7779     uint16_t i;
7780     uint8_t sum;
7781     uint8_t *buffer;
7782 
7783     /* Write the whole command header structure which includes sum of
7784      * the buffer */
7785 
7786     uint16_t length = sizeof(struct e1000_host_mng_command_header);
7787 
7788     sum = hdr->checksum;
7789     hdr->checksum = 0;
7790 
7791     buffer = (uint8_t *) hdr;
7792     i = length;
7793     while (i--)
7794         sum += buffer[i];
7795 
7796     hdr->checksum = 0 - sum;
7797 
7798     length >>= 2;
7799     /* The device driver writes the relevant command block into the ram area. */
7800     for (i = 0; i < length; i++) {
7801         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, i, *((uint32_t *) hdr + i));
7802         E1000_WRITE_FLUSH(hw);
7803     }
7804 
7805     return E1000_SUCCESS;
7806 }
7807 
7808 
7809 /*****************************************************************************
7810  * This function indicates to ARC that a new command is pending which completes
7811  * one write operation by the driver.
7812  *
7813  * returns  - E1000_SUCCESS for success.
7814  ****************************************************************************/
7815 static int32_t
e1000_mng_write_commit(struct e1000_hw * hw)7816 e1000_mng_write_commit(struct e1000_hw * hw)
7817 {
7818     uint32_t hicr;
7819 
7820     hicr = E1000_READ_REG(hw, HICR);
7821     /* Setting this bit tells the ARC that a new command is pending. */
7822     E1000_WRITE_REG(hw, HICR, hicr | E1000_HICR_C);
7823 
7824     return E1000_SUCCESS;
7825 }
7826 
7827 
7828 /*****************************************************************************
7829  * This function checks the mode of the firmware.
7830  *
7831  * returns  - TRUE when the mode is IAMT or FALSE.
7832  ****************************************************************************/
7833 boolean_t
e1000_check_mng_mode(struct e1000_hw * hw)7834 e1000_check_mng_mode(struct e1000_hw *hw)
7835 {
7836     uint32_t fwsm;
7837 
7838     fwsm = E1000_READ_REG(hw, FWSM);
7839 
7840     if (hw->mac_type == e1000_ich8lan) {
7841         if ((fwsm & E1000_FWSM_MODE_MASK) ==
7842             (E1000_MNG_ICH_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
7843             return TRUE;
7844     } else if ((fwsm & E1000_FWSM_MODE_MASK) ==
7845                (E1000_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
7846         return TRUE;
7847 
7848     return FALSE;
7849 }
7850 
7851 
7852 /*****************************************************************************
7853  * This function writes the dhcp info .
7854  ****************************************************************************/
7855 int32_t
e1000_mng_write_dhcp_info(struct e1000_hw * hw,uint8_t * buffer,uint16_t length)7856 e1000_mng_write_dhcp_info(struct e1000_hw * hw, uint8_t *buffer,
7857                           uint16_t length)
7858 {
7859     int32_t ret_val;
7860     struct e1000_host_mng_command_header hdr;
7861 
7862     hdr.command_id = E1000_MNG_DHCP_TX_PAYLOAD_CMD;
7863     hdr.command_length = length;
7864     hdr.reserved1 = 0;
7865     hdr.reserved2 = 0;
7866     hdr.checksum = 0;
7867 
7868     ret_val = e1000_mng_enable_host_if(hw);
7869     if (ret_val == E1000_SUCCESS) {
7870         ret_val = e1000_mng_host_if_write(hw, buffer, length, sizeof(hdr),
7871                                           &(hdr.checksum));
7872         if (ret_val == E1000_SUCCESS) {
7873             ret_val = e1000_mng_write_cmd_header(hw, &hdr);
7874             if (ret_val == E1000_SUCCESS)
7875                 ret_val = e1000_mng_write_commit(hw);
7876         }
7877     }
7878     return ret_val;
7879 }
7880 
7881 
7882 /*****************************************************************************
7883  * This function calculates the checksum.
7884  *
7885  * returns  - checksum of buffer contents.
7886  ****************************************************************************/
7887 static uint8_t
e1000_calculate_mng_checksum(char * buffer,uint32_t length)7888 e1000_calculate_mng_checksum(char *buffer, uint32_t length)
7889 {
7890     uint8_t sum = 0;
7891     uint32_t i;
7892 
7893     if (!buffer)
7894         return 0;
7895 
7896     for (i=0; i < length; i++)
7897         sum += buffer[i];
7898 
7899     return (uint8_t) (0 - sum);
7900 }
7901 
7902 /*****************************************************************************
7903  * This function checks whether tx pkt filtering needs to be enabled or not.
7904  *
7905  * returns  - TRUE for packet filtering or FALSE.
7906  ****************************************************************************/
7907 boolean_t
e1000_enable_tx_pkt_filtering(struct e1000_hw * hw)7908 e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
7909 {
7910     /* called in init as well as watchdog timer functions */
7911 
7912     int32_t ret_val, checksum;
7913     boolean_t tx_filter = FALSE;
7914     struct e1000_host_mng_dhcp_cookie *hdr = &(hw->mng_cookie);
7915     uint8_t *buffer = (uint8_t *) &(hw->mng_cookie);
7916 
7917     if (e1000_check_mng_mode(hw)) {
7918         ret_val = e1000_mng_enable_host_if(hw);
7919         if (ret_val == E1000_SUCCESS) {
7920             ret_val = e1000_host_if_read_cookie(hw, buffer);
7921             if (ret_val == E1000_SUCCESS) {
7922                 checksum = hdr->checksum;
7923                 hdr->checksum = 0;
7924                 if ((hdr->signature == E1000_IAMT_SIGNATURE) &&
7925                     checksum == e1000_calculate_mng_checksum((char *)buffer,
7926                                                E1000_MNG_DHCP_COOKIE_LENGTH)) {
7927                     if (hdr->status &
7928                         E1000_MNG_DHCP_COOKIE_STATUS_PARSING_SUPPORT)
7929                         tx_filter = TRUE;
7930                 } else
7931                     tx_filter = TRUE;
7932             } else
7933                 tx_filter = TRUE;
7934         }
7935     }
7936 
7937     hw->tx_pkt_filtering = tx_filter;
7938     return tx_filter;
7939 }
7940 
7941 /******************************************************************************
7942  * Verifies the hardware needs to allow ARPs to be processed by the host
7943  *
7944  * hw - Struct containing variables accessed by shared code
7945  *
7946  * returns: - TRUE/FALSE
7947  *
7948  *****************************************************************************/
7949 uint32_t
e1000_enable_mng_pass_thru(struct e1000_hw * hw)7950 e1000_enable_mng_pass_thru(struct e1000_hw *hw)
7951 {
7952     uint32_t manc;
7953     uint32_t fwsm, factps;
7954 
7955     if (hw->asf_firmware_present) {
7956         manc = E1000_READ_REG(hw, MANC);
7957 
7958         if (!(manc & E1000_MANC_RCV_TCO_EN) ||
7959             !(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
7960             return FALSE;
7961         if (e1000_arc_subsystem_valid(hw) == TRUE) {
7962             fwsm = E1000_READ_REG(hw, FWSM);
7963             factps = E1000_READ_REG(hw, FACTPS);
7964 
7965             if ((((fwsm & E1000_FWSM_MODE_MASK) >> E1000_FWSM_MODE_SHIFT) ==
7966                    e1000_mng_mode_pt) && !(factps & E1000_FACTPS_MNGCG))
7967                 return TRUE;
7968         } else
7969             if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
7970                 return TRUE;
7971     }
7972     return FALSE;
7973 }
7974 
7975 static int32_t
e1000_polarity_reversal_workaround(struct e1000_hw * hw)7976 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
7977 {
7978     int32_t ret_val;
7979     uint16_t mii_status_reg;
7980     uint16_t i;
7981 
7982     /* Polarity reversal workaround for forced 10F/10H links. */
7983 
7984     /* Disable the transmitter on the PHY */
7985 
7986     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
7987     if (ret_val)
7988         return ret_val;
7989     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFFF);
7990     if (ret_val)
7991         return ret_val;
7992 
7993     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
7994     if (ret_val)
7995         return ret_val;
7996 
7997     /* This loop will early-out if the NO link condition has been met. */
7998     for (i = PHY_FORCE_TIME; i > 0; i--) {
7999         /* Read the MII Status Register and wait for Link Status bit
8000          * to be clear.
8001          */
8002 
8003         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
8004         if (ret_val)
8005             return ret_val;
8006 
8007         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
8008         if (ret_val)
8009             return ret_val;
8010 
8011         if ((mii_status_reg & ~MII_SR_LINK_STATUS) == 0) break;
8012         mdelay(100);
8013     }
8014 
8015     /* Recommended delay time after link has been lost */
8016     mdelay(1000);
8017 
8018     /* Now we will re-enable th transmitter on the PHY */
8019 
8020     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
8021     if (ret_val)
8022         return ret_val;
8023     mdelay(50);
8024     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFF0);
8025     if (ret_val)
8026         return ret_val;
8027     mdelay(50);
8028     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFF00);
8029     if (ret_val)
8030         return ret_val;
8031     mdelay(50);
8032     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x0000);
8033     if (ret_val)
8034         return ret_val;
8035 
8036     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
8037     if (ret_val)
8038         return ret_val;
8039 
8040     /* This loop will early-out if the link condition has been met. */
8041     for (i = PHY_FORCE_TIME; i > 0; i--) {
8042         /* Read the MII Status Register and wait for Link Status bit
8043          * to be set.
8044          */
8045 
8046         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
8047         if (ret_val)
8048             return ret_val;
8049 
8050         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
8051         if (ret_val)
8052             return ret_val;
8053 
8054         if (mii_status_reg & MII_SR_LINK_STATUS) break;
8055         mdelay(100);
8056     }
8057     return E1000_SUCCESS;
8058 }
8059 
8060 /***************************************************************************
8061  *
8062  * Disables PCI-Express master access.
8063  *
8064  * hw: Struct containing variables accessed by shared code
8065  *
8066  * returns: - none.
8067  *
8068  ***************************************************************************/
8069 static void
e1000_set_pci_express_master_disable(struct e1000_hw * hw)8070 e1000_set_pci_express_master_disable(struct e1000_hw *hw)
8071 {
8072     uint32_t ctrl;
8073 
8074     DEBUGFUNC("e1000_set_pci_express_master_disable");
8075 
8076     if (hw->bus_type != e1000_bus_type_pci_express)
8077         return;
8078 
8079     ctrl = E1000_READ_REG(hw, CTRL);
8080     ctrl |= E1000_CTRL_GIO_MASTER_DISABLE;
8081     E1000_WRITE_REG(hw, CTRL, ctrl);
8082 }
8083 
8084 /*******************************************************************************
8085  *
8086  * Disables PCI-Express master access and verifies there are no pending requests
8087  *
8088  * hw: Struct containing variables accessed by shared code
8089  *
8090  * returns: - E1000_ERR_MASTER_REQUESTS_PENDING if master disable bit hasn't
8091  *            caused the master requests to be disabled.
8092  *            E1000_SUCCESS master requests disabled.
8093  *
8094  ******************************************************************************/
8095 int32_t
e1000_disable_pciex_master(struct e1000_hw * hw)8096 e1000_disable_pciex_master(struct e1000_hw *hw)
8097 {
8098     int32_t timeout = MASTER_DISABLE_TIMEOUT;   /* 80ms */
8099 
8100     DEBUGFUNC("e1000_disable_pciex_master");
8101 
8102     if (hw->bus_type != e1000_bus_type_pci_express)
8103         return E1000_SUCCESS;
8104 
8105     e1000_set_pci_express_master_disable(hw);
8106 
8107     while (timeout) {
8108         if (!(E1000_READ_REG(hw, STATUS) & E1000_STATUS_GIO_MASTER_ENABLE))
8109             break;
8110         else
8111             udelay(100);
8112         timeout--;
8113     }
8114 
8115     if (!timeout) {
8116         DEBUGOUT("Master requests are pending.\n");
8117         return -E1000_ERR_MASTER_REQUESTS_PENDING;
8118     }
8119 
8120     return E1000_SUCCESS;
8121 }
8122 
8123 /*******************************************************************************
8124  *
8125  * Check for EEPROM Auto Read bit done.
8126  *
8127  * hw: Struct containing variables accessed by shared code
8128  *
8129  * returns: - E1000_ERR_RESET if fail to reset MAC
8130  *            E1000_SUCCESS at any other case.
8131  *
8132  ******************************************************************************/
8133 static int32_t
e1000_get_auto_rd_done(struct e1000_hw * hw)8134 e1000_get_auto_rd_done(struct e1000_hw *hw)
8135 {
8136     int32_t timeout = AUTO_READ_DONE_TIMEOUT;
8137 
8138     DEBUGFUNC("e1000_get_auto_rd_done");
8139 
8140     switch (hw->mac_type) {
8141     default:
8142         msleep(5);
8143         break;
8144     case e1000_82571:
8145     case e1000_82572:
8146     case e1000_82573:
8147     case e1000_80003es2lan:
8148     case e1000_ich8lan:
8149     case e1000_82576:
8150         while (timeout) {
8151             if (E1000_READ_REG(hw, EECD) & E1000_EECD_AUTO_RD)
8152                 break;
8153             else msleep(1);
8154             timeout--;
8155         }
8156 
8157         if (!timeout) {
8158             DEBUGOUT("Auto read by HW from EEPROM has not completed.\n");
8159             return -E1000_ERR_RESET;
8160         }
8161         break;
8162     }
8163 
8164     /* PHY configuration from NVM just starts after EECD_AUTO_RD sets to high.
8165      * Need to wait for PHY configuration completion before accessing NVM
8166      * and PHY. */
8167     if (hw->mac_type == e1000_82573)
8168         msleep(25);
8169 
8170     return E1000_SUCCESS;
8171 }
8172 
8173 /***************************************************************************
8174  * Checks if the PHY configuration is done
8175  *
8176  * hw: Struct containing variables accessed by shared code
8177  *
8178  * returns: - E1000_ERR_RESET if fail to reset MAC
8179  *            E1000_SUCCESS at any other case.
8180  *
8181  ***************************************************************************/
8182 static int32_t
e1000_get_phy_cfg_done(struct e1000_hw * hw)8183 e1000_get_phy_cfg_done(struct e1000_hw *hw)
8184 {
8185     int32_t timeout = PHY_CFG_TIMEOUT;
8186     uint32_t cfg_mask = E1000_EEPROM_CFG_DONE;
8187 
8188     DEBUGFUNC("e1000_get_phy_cfg_done");
8189 
8190     switch (hw->mac_type) {
8191     default:
8192         mdelay(10);
8193         break;
8194     case e1000_80003es2lan:
8195     case e1000_82576:
8196         /* Separate *_CFG_DONE_* bit for each port */
8197         if (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)
8198             cfg_mask = E1000_EEPROM_CFG_DONE_PORT_1;
8199         /* Fall Through */
8200     case e1000_82571:
8201     case e1000_82572:
8202         while (timeout) {
8203             if (E1000_READ_REG(hw, EEMNGCTL) & cfg_mask)
8204                 break;
8205             else
8206                 msleep(1);
8207             timeout--;
8208         }
8209         if (!timeout) {
8210             DEBUGOUT("MNG configuration cycle has not completed.\n");
8211             return -E1000_ERR_RESET;
8212         }
8213         break;
8214     }
8215 
8216     return E1000_SUCCESS;
8217 }
8218 
8219 /***************************************************************************
8220  *
8221  * Using the combination of SMBI and SWESMBI semaphore bits when resetting
8222  * adapter or Eeprom access.
8223  *
8224  * hw: Struct containing variables accessed by shared code
8225  *
8226  * returns: - E1000_ERR_EEPROM if fail to access EEPROM.
8227  *            E1000_SUCCESS at any other case.
8228  *
8229  ***************************************************************************/
8230 static int32_t
e1000_get_hw_eeprom_semaphore(struct e1000_hw * hw)8231 e1000_get_hw_eeprom_semaphore(struct e1000_hw *hw)
8232 {
8233     int32_t timeout;
8234     uint32_t swsm;
8235 
8236     DEBUGFUNC("e1000_get_hw_eeprom_semaphore");
8237 
8238     if (!hw->eeprom_semaphore_present)
8239         return E1000_SUCCESS;
8240 
8241     if (hw->mac_type == e1000_80003es2lan) {
8242         /* Get the SW semaphore. */
8243         if (e1000_get_software_semaphore(hw) != E1000_SUCCESS)
8244             return -E1000_ERR_EEPROM;
8245     }
8246 
8247     /* Get the FW semaphore. */
8248     timeout = hw->eeprom.word_size + 1;
8249     while (timeout) {
8250         swsm = E1000_READ_REG(hw, SWSM);
8251         swsm |= E1000_SWSM_SWESMBI;
8252         E1000_WRITE_REG(hw, SWSM, swsm);
8253         /* if we managed to set the bit we got the semaphore. */
8254         swsm = E1000_READ_REG(hw, SWSM);
8255         if (swsm & E1000_SWSM_SWESMBI)
8256             break;
8257 
8258         udelay(50);
8259         timeout--;
8260     }
8261 
8262     if (!timeout) {
8263         /* Release semaphores */
8264         e1000_put_hw_eeprom_semaphore(hw);
8265         DEBUGOUT("Driver can't access the Eeprom - SWESMBI bit is set.\n");
8266         return -E1000_ERR_EEPROM;
8267     }
8268 
8269     return E1000_SUCCESS;
8270 }
8271 
8272 /***************************************************************************
8273  * This function clears HW semaphore bits.
8274  *
8275  * hw: Struct containing variables accessed by shared code
8276  *
8277  * returns: - None.
8278  *
8279  ***************************************************************************/
8280 static void
e1000_put_hw_eeprom_semaphore(struct e1000_hw * hw)8281 e1000_put_hw_eeprom_semaphore(struct e1000_hw *hw)
8282 {
8283     uint32_t swsm;
8284 
8285     DEBUGFUNC("e1000_put_hw_eeprom_semaphore");
8286 
8287     if (!hw->eeprom_semaphore_present)
8288         return;
8289 
8290     swsm = E1000_READ_REG(hw, SWSM);
8291     if (hw->mac_type == e1000_80003es2lan) {
8292         /* Release both semaphores. */
8293         swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
8294     } else
8295         swsm &= ~(E1000_SWSM_SWESMBI);
8296     E1000_WRITE_REG(hw, SWSM, swsm);
8297 }
8298 
8299 /***************************************************************************
8300  *
8301  * Obtaining software semaphore bit (SMBI) before resetting PHY.
8302  *
8303  * hw: Struct containing variables accessed by shared code
8304  *
8305  * returns: - E1000_ERR_RESET if fail to obtain semaphore.
8306  *            E1000_SUCCESS at any other case.
8307  *
8308  ***************************************************************************/
8309 static int32_t
e1000_get_software_semaphore(struct e1000_hw * hw)8310 e1000_get_software_semaphore(struct e1000_hw *hw)
8311 {
8312     int32_t timeout = hw->eeprom.word_size + 1;
8313     uint32_t swsm;
8314 
8315     DEBUGFUNC("e1000_get_software_semaphore");
8316 
8317     if (hw->mac_type != e1000_80003es2lan) {
8318         return E1000_SUCCESS;
8319     }
8320 
8321     while (timeout) {
8322         swsm = E1000_READ_REG(hw, SWSM);
8323         /* If SMBI bit cleared, it is now set and we hold the semaphore */
8324         if (!(swsm & E1000_SWSM_SMBI))
8325             break;
8326         mdelay(1);
8327         timeout--;
8328     }
8329 
8330     if (!timeout) {
8331         DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
8332         return -E1000_ERR_RESET;
8333     }
8334 
8335     return E1000_SUCCESS;
8336 }
8337 
8338 /***************************************************************************
8339  *
8340  * Release semaphore bit (SMBI).
8341  *
8342  * hw: Struct containing variables accessed by shared code
8343  *
8344  ***************************************************************************/
8345 static void
e1000_release_software_semaphore(struct e1000_hw * hw)8346 e1000_release_software_semaphore(struct e1000_hw *hw)
8347 {
8348     uint32_t swsm;
8349 
8350     DEBUGFUNC("e1000_release_software_semaphore");
8351 
8352     if (hw->mac_type != e1000_80003es2lan) {
8353         return;
8354     }
8355 
8356     swsm = E1000_READ_REG(hw, SWSM);
8357     /* Release the SW semaphores.*/
8358     swsm &= ~E1000_SWSM_SMBI;
8359     E1000_WRITE_REG(hw, SWSM, swsm);
8360 }
8361 
8362 /******************************************************************************
8363  * Checks if PHY reset is blocked due to SOL/IDER session, for example.
8364  * Returning E1000_BLK_PHY_RESET isn't necessarily an error.  But it's up to
8365  * the caller to figure out how to deal with it.
8366  *
8367  * hw - Struct containing variables accessed by shared code
8368  *
8369  * returns: - E1000_BLK_PHY_RESET
8370  *            E1000_SUCCESS
8371  *
8372  *****************************************************************************/
8373 int32_t
e1000_check_phy_reset_block(struct e1000_hw * hw)8374 e1000_check_phy_reset_block(struct e1000_hw *hw)
8375 {
8376     uint32_t manc = 0;
8377     uint32_t fwsm = 0;
8378 
8379     if (hw->mac_type == e1000_ich8lan) {
8380         fwsm = E1000_READ_REG(hw, FWSM);
8381         return (fwsm & E1000_FWSM_RSPCIPHY) ? E1000_SUCCESS
8382                                             : E1000_BLK_PHY_RESET;
8383     }
8384 
8385     if (hw->mac_type > e1000_82547_rev_2)
8386         manc = E1000_READ_REG(hw, MANC);
8387     return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
8388         E1000_BLK_PHY_RESET : E1000_SUCCESS;
8389 }
8390 
8391 static uint8_t
e1000_arc_subsystem_valid(struct e1000_hw * hw)8392 e1000_arc_subsystem_valid(struct e1000_hw *hw)
8393 {
8394     uint32_t fwsm;
8395 
8396     /* On 8257x silicon, registers in the range of 0x8800 - 0x8FFC
8397      * may not be provided a DMA clock when no manageability features are
8398      * enabled.  We do not want to perform any reads/writes to these registers
8399      * if this is the case.  We read FWSM to determine the manageability mode.
8400      */
8401     switch (hw->mac_type) {
8402     case e1000_82571:
8403     case e1000_82572:
8404     case e1000_82573:
8405     case e1000_80003es2lan:
8406     case e1000_82576:
8407         fwsm = E1000_READ_REG(hw, FWSM);
8408         if ((fwsm & E1000_FWSM_MODE_MASK) != 0)
8409             return TRUE;
8410         break;
8411     case e1000_ich8lan:
8412         return TRUE;
8413     default:
8414         break;
8415     }
8416     return FALSE;
8417 }
8418 
8419 
8420 /******************************************************************************
8421  * Configure PCI-Ex no-snoop
8422  *
8423  * hw - Struct containing variables accessed by shared code.
8424  * no_snoop - Bitmap of no-snoop events.
8425  *
8426  * returns: E1000_SUCCESS
8427  *
8428  *****************************************************************************/
8429 static int32_t
e1000_set_pci_ex_no_snoop(struct e1000_hw * hw,uint32_t no_snoop)8430 e1000_set_pci_ex_no_snoop(struct e1000_hw *hw, uint32_t no_snoop)
8431 {
8432     uint32_t gcr_reg = 0;
8433 
8434     DEBUGFUNC("e1000_set_pci_ex_no_snoop");
8435 
8436     if (hw->bus_type == e1000_bus_type_unknown)
8437         e1000_get_bus_info(hw);
8438 
8439     if (hw->bus_type != e1000_bus_type_pci_express)
8440         return E1000_SUCCESS;
8441 
8442     if (no_snoop) {
8443         gcr_reg = E1000_READ_REG(hw, GCR);
8444         gcr_reg &= ~(PCI_EX_NO_SNOOP_ALL);
8445         gcr_reg |= no_snoop;
8446         E1000_WRITE_REG(hw, GCR, gcr_reg);
8447     }
8448     if (hw->mac_type == e1000_ich8lan) {
8449         uint32_t ctrl_ext;
8450 
8451         E1000_WRITE_REG(hw, GCR, PCI_EX_82566_SNOOP_ALL);
8452 
8453         ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
8454         ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
8455         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
8456     }
8457 
8458     return E1000_SUCCESS;
8459 }
8460 
8461 /***************************************************************************
8462  *
8463  * Get software semaphore FLAG bit (SWFLAG).
8464  * SWFLAG is used to synchronize the access to all shared resource between
8465  * SW, FW and HW.
8466  *
8467  * hw: Struct containing variables accessed by shared code
8468  *
8469  ***************************************************************************/
8470 static int32_t
e1000_get_software_flag(struct e1000_hw * hw)8471 e1000_get_software_flag(struct e1000_hw *hw)
8472 {
8473     int32_t timeout = PHY_CFG_TIMEOUT;
8474     uint32_t extcnf_ctrl;
8475 
8476     DEBUGFUNC("e1000_get_software_flag");
8477 
8478     if (hw->mac_type == e1000_ich8lan) {
8479         while (timeout) {
8480             extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
8481             extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
8482             E1000_WRITE_REG(hw, EXTCNF_CTRL, extcnf_ctrl);
8483 
8484             extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
8485             if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
8486                 break;
8487             mdelay(1);
8488             timeout--;
8489         }
8490 
8491         if (!timeout) {
8492             DEBUGOUT("FW or HW locks the resource too long.\n");
8493             return -E1000_ERR_CONFIG;
8494         }
8495     }
8496 
8497     return E1000_SUCCESS;
8498 }
8499 
8500 /***************************************************************************
8501  *
8502  * Release software semaphore FLAG bit (SWFLAG).
8503  * SWFLAG is used to synchronize the access to all shared resource between
8504  * SW, FW and HW.
8505  *
8506  * hw: Struct containing variables accessed by shared code
8507  *
8508  ***************************************************************************/
8509 static void
e1000_release_software_flag(struct e1000_hw * hw)8510 e1000_release_software_flag(struct e1000_hw *hw)
8511 {
8512     uint32_t extcnf_ctrl;
8513 
8514     DEBUGFUNC("e1000_release_software_flag");
8515 
8516     if (hw->mac_type == e1000_ich8lan) {
8517         extcnf_ctrl= E1000_READ_REG(hw, EXTCNF_CTRL);
8518         extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
8519         E1000_WRITE_REG(hw, EXTCNF_CTRL, extcnf_ctrl);
8520     }
8521 
8522     return;
8523 }
8524 
8525 /******************************************************************************
8526  * Reads a 16 bit word or words from the EEPROM using the ICH8's flash access
8527  * register.
8528  *
8529  * hw - Struct containing variables accessed by shared code
8530  * offset - offset of word in the EEPROM to read
8531  * data - word read from the EEPROM
8532  * words - number of words to read
8533  *****************************************************************************/
8534 static int32_t
e1000_read_eeprom_ich8(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)8535 e1000_read_eeprom_ich8(struct e1000_hw *hw, uint16_t offset, uint16_t words,
8536                        uint16_t *data)
8537 {
8538     int32_t  error = E1000_SUCCESS;
8539     uint32_t flash_bank = 0;
8540     uint32_t act_offset = 0;
8541     uint32_t bank_offset = 0;
8542     uint16_t word = 0;
8543     uint16_t i = 0;
8544 
8545     /* We need to know which is the valid flash bank.  In the event
8546      * that we didn't allocate eeprom_shadow_ram, we may not be
8547      * managing flash_bank.  So it cannot be trusted and needs
8548      * to be updated with each read.
8549      */
8550     /* Value of bit 22 corresponds to the flash bank we're on. */
8551     flash_bank = (E1000_READ_REG(hw, EECD) & E1000_EECD_SEC1VAL) ? 1 : 0;
8552 
8553     /* Adjust offset appropriately if we're on bank 1 - adjust for word size */
8554     bank_offset = flash_bank * (hw->flash_bank_size * 2);
8555 
8556     error = e1000_get_software_flag(hw);
8557     if (error != E1000_SUCCESS)
8558         return error;
8559 
8560     for (i = 0; i < words; i++) {
8561         if (hw->eeprom_shadow_ram != NULL &&
8562             hw->eeprom_shadow_ram[offset+i].modified == TRUE) {
8563             data[i] = hw->eeprom_shadow_ram[offset+i].eeprom_word;
8564         } else {
8565             /* The NVM part needs a byte offset, hence * 2 */
8566             act_offset = bank_offset + ((offset + i) * 2);
8567             error = e1000_read_ich8_word(hw, act_offset, &word);
8568             if (error != E1000_SUCCESS)
8569                 break;
8570             data[i] = word;
8571         }
8572     }
8573 
8574     e1000_release_software_flag(hw);
8575 
8576     return error;
8577 }
8578 
8579 /******************************************************************************
8580  * Writes a 16 bit word or words to the EEPROM using the ICH8's flash access
8581  * register.  Actually, writes are written to the shadow ram cache in the hw
8582  * structure hw->e1000_shadow_ram.  e1000_commit_shadow_ram flushes this to
8583  * the NVM, which occurs when the NVM checksum is updated.
8584  *
8585  * hw - Struct containing variables accessed by shared code
8586  * offset - offset of word in the EEPROM to write
8587  * words - number of words to write
8588  * data - words to write to the EEPROM
8589  *****************************************************************************/
8590 static int32_t
e1000_write_eeprom_ich8(struct e1000_hw * hw,uint16_t offset,uint16_t words,uint16_t * data)8591 e1000_write_eeprom_ich8(struct e1000_hw *hw, uint16_t offset, uint16_t words,
8592                         uint16_t *data)
8593 {
8594     uint32_t i = 0;
8595     int32_t error = E1000_SUCCESS;
8596 
8597     error = e1000_get_software_flag(hw);
8598     if (error != E1000_SUCCESS)
8599         return error;
8600 
8601     /* A driver can write to the NVM only if it has eeprom_shadow_ram
8602      * allocated.  Subsequent reads to the modified words are read from
8603      * this cached structure as well.  Writes will only go into this
8604      * cached structure unless it's followed by a call to
8605      * e1000_update_eeprom_checksum() where it will commit the changes
8606      * and clear the "modified" field.
8607      */
8608     if (hw->eeprom_shadow_ram != NULL) {
8609         for (i = 0; i < words; i++) {
8610             if ((offset + i) < E1000_SHADOW_RAM_WORDS) {
8611                 hw->eeprom_shadow_ram[offset+i].modified = TRUE;
8612                 hw->eeprom_shadow_ram[offset+i].eeprom_word = data[i];
8613             } else {
8614                 error = -E1000_ERR_EEPROM;
8615                 break;
8616             }
8617         }
8618     } else {
8619         /* Drivers have the option to not allocate eeprom_shadow_ram as long
8620          * as they don't perform any NVM writes.  An attempt in doing so
8621          * will result in this error.
8622          */
8623         error = -E1000_ERR_EEPROM;
8624     }
8625 
8626     e1000_release_software_flag(hw);
8627 
8628     return error;
8629 }
8630 
8631 /******************************************************************************
8632  * This function does initial flash setup so that a new read/write/erase cycle
8633  * can be started.
8634  *
8635  * hw - The pointer to the hw structure
8636  ****************************************************************************/
8637 static int32_t
e1000_ich8_cycle_init(struct e1000_hw * hw)8638 e1000_ich8_cycle_init(struct e1000_hw *hw)
8639 {
8640     union ich8_hws_flash_status hsfsts;
8641     int32_t error = E1000_ERR_EEPROM;
8642     int32_t i     = 0;
8643 
8644     DEBUGFUNC("e1000_ich8_cycle_init");
8645 
8646     hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8647 
8648     /* May be check the Flash Des Valid bit in Hw status */
8649     if (hsfsts.hsf_status.fldesvalid == 0) {
8650         DEBUGOUT("Flash descriptor invalid.  SW Sequencing must be used.");
8651         return error;
8652     }
8653 
8654     /* Clear FCERR in Hw status by writing 1 */
8655     /* Clear DAEL in Hw status by writing a 1 */
8656     hsfsts.hsf_status.flcerr = 1;
8657     hsfsts.hsf_status.dael = 1;
8658 
8659     E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8660 
8661     /* Either we should have a hardware SPI cycle in progress bit to check
8662      * against, in order to start a new cycle or FDONE bit should be changed
8663      * in the hardware so that it is 1 after harware reset, which can then be
8664      * used as an indication whether a cycle is in progress or has been
8665      * completed .. we should also have some software semaphore mechanism to
8666      * guard FDONE or the cycle in progress bit so that two threads access to
8667      * those bits can be sequentiallized or a way so that 2 threads dont
8668      * start the cycle at the same time */
8669 
8670     if (hsfsts.hsf_status.flcinprog == 0) {
8671         /* There is no cycle running at present, so we can start a cycle */
8672         /* Begin by setting Flash Cycle Done. */
8673         hsfsts.hsf_status.flcdone = 1;
8674         E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8675         error = E1000_SUCCESS;
8676     } else {
8677         /* otherwise poll for sometime so the current cycle has a chance
8678          * to end before giving up. */
8679         for (i = 0; i < ICH_FLASH_COMMAND_TIMEOUT; i++) {
8680             hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8681             if (hsfsts.hsf_status.flcinprog == 0) {
8682                 error = E1000_SUCCESS;
8683                 break;
8684             }
8685             udelay(1);
8686         }
8687         if (error == E1000_SUCCESS) {
8688             /* Successful in waiting for previous cycle to timeout,
8689              * now set the Flash Cycle Done. */
8690             hsfsts.hsf_status.flcdone = 1;
8691             E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8692         } else {
8693             DEBUGOUT("Flash controller busy, cannot get access");
8694         }
8695     }
8696     return error;
8697 }
8698 
8699 /******************************************************************************
8700  * This function starts a flash cycle and waits for its completion
8701  *
8702  * hw - The pointer to the hw structure
8703  ****************************************************************************/
8704 static int32_t
e1000_ich8_flash_cycle(struct e1000_hw * hw,uint32_t timeout)8705 e1000_ich8_flash_cycle(struct e1000_hw *hw, uint32_t timeout)
8706 {
8707     union ich8_hws_flash_ctrl hsflctl;
8708     union ich8_hws_flash_status hsfsts;
8709     int32_t error = E1000_ERR_EEPROM;
8710     uint32_t i = 0;
8711 
8712     /* Start a cycle by writing 1 in Flash Cycle Go in Hw Flash Control */
8713     hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8714     hsflctl.hsf_ctrl.flcgo = 1;
8715     E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8716 
8717     /* wait till FDONE bit is set to 1 */
8718     do {
8719         hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8720         if (hsfsts.hsf_status.flcdone == 1)
8721             break;
8722         udelay(1);
8723         i++;
8724     } while (i < timeout);
8725     if (hsfsts.hsf_status.flcdone == 1 && hsfsts.hsf_status.flcerr == 0) {
8726         error = E1000_SUCCESS;
8727     }
8728     return error;
8729 }
8730 
8731 /******************************************************************************
8732  * Reads a byte or word from the NVM using the ICH8 flash access registers.
8733  *
8734  * hw - The pointer to the hw structure
8735  * index - The index of the byte or word to read.
8736  * size - Size of data to read, 1=byte 2=word
8737  * data - Pointer to the word to store the value read.
8738  *****************************************************************************/
8739 static int32_t
e1000_read_ich8_data(struct e1000_hw * hw,uint32_t index,uint32_t size,uint16_t * data)8740 e1000_read_ich8_data(struct e1000_hw *hw, uint32_t index,
8741                      uint32_t size, uint16_t* data)
8742 {
8743     union ich8_hws_flash_status hsfsts;
8744     union ich8_hws_flash_ctrl hsflctl;
8745     uint32_t flash_linear_address;
8746     uint32_t flash_data = 0;
8747     int32_t error = -E1000_ERR_EEPROM;
8748     int32_t count = 0;
8749 
8750     DEBUGFUNC("e1000_read_ich8_data");
8751 
8752     if (size < 1  || size > 2 || data == 0x0 ||
8753         index > ICH_FLASH_LINEAR_ADDR_MASK)
8754         return error;
8755 
8756     flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) +
8757                            hw->flash_base_addr;
8758 
8759     do {
8760         udelay(1);
8761         /* Steps */
8762         error = e1000_ich8_cycle_init(hw);
8763         if (error != E1000_SUCCESS)
8764             break;
8765 
8766         hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8767         /* 0b/1b corresponds to 1 or 2 byte size, respectively. */
8768         hsflctl.hsf_ctrl.fldbcount = size - 1;
8769         hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_READ;
8770         E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8771 
8772         /* Write the last 24 bits of index into Flash Linear address field in
8773          * Flash Address */
8774         /* TODO: TBD maybe check the index against the size of flash */
8775 
8776         E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
8777 
8778         error = e1000_ich8_flash_cycle(hw, ICH_FLASH_COMMAND_TIMEOUT);
8779 
8780         /* Check if FCERR is set to 1, if set to 1, clear it and try the whole
8781          * sequence a few more times, else read in (shift in) the Flash Data0,
8782          * the order is least significant byte first msb to lsb */
8783         if (error == E1000_SUCCESS) {
8784             flash_data = E1000_READ_ICH_FLASH_REG(hw, ICH_FLASH_FDATA0);
8785             if (size == 1) {
8786                 *data = (uint8_t)(flash_data & 0x000000FF);
8787             } else if (size == 2) {
8788                 *data = (uint16_t)(flash_data & 0x0000FFFF);
8789             }
8790             break;
8791         } else {
8792             /* If we've gotten here, then things are probably completely hosed,
8793              * but if the error condition is detected, it won't hurt to give
8794              * it another try...ICH_FLASH_CYCLE_REPEAT_COUNT times.
8795              */
8796             hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8797             if (hsfsts.hsf_status.flcerr == 1) {
8798                 /* Repeat for some time before giving up. */
8799                 continue;
8800             } else if (hsfsts.hsf_status.flcdone == 0) {
8801                 DEBUGOUT("Timeout error - flash cycle did not complete.");
8802                 break;
8803             }
8804         }
8805     } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
8806 
8807     return error;
8808 }
8809 
8810 /******************************************************************************
8811  * Writes One /two bytes to the NVM using the ICH8 flash access registers.
8812  *
8813  * hw - The pointer to the hw structure
8814  * index - The index of the byte/word to read.
8815  * size - Size of data to read, 1=byte 2=word
8816  * data - The byte(s) to write to the NVM.
8817  *****************************************************************************/
8818 static int32_t
e1000_write_ich8_data(struct e1000_hw * hw,uint32_t index,uint32_t size,uint16_t data)8819 e1000_write_ich8_data(struct e1000_hw *hw, uint32_t index, uint32_t size,
8820                       uint16_t data)
8821 {
8822     union ich8_hws_flash_status hsfsts;
8823     union ich8_hws_flash_ctrl hsflctl;
8824     uint32_t flash_linear_address;
8825     uint32_t flash_data = 0;
8826     int32_t error = -E1000_ERR_EEPROM;
8827     int32_t count = 0;
8828 
8829     DEBUGFUNC("e1000_write_ich8_data");
8830 
8831     if (size < 1  || size > 2 || data > size * 0xff ||
8832         index > ICH_FLASH_LINEAR_ADDR_MASK)
8833         return error;
8834 
8835     flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) +
8836                            hw->flash_base_addr;
8837 
8838     do {
8839         udelay(1);
8840         /* Steps */
8841         error = e1000_ich8_cycle_init(hw);
8842         if (error != E1000_SUCCESS)
8843             break;
8844 
8845         hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8846         /* 0b/1b corresponds to 1 or 2 byte size, respectively. */
8847         hsflctl.hsf_ctrl.fldbcount = size -1;
8848         hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_WRITE;
8849         E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8850 
8851         /* Write the last 24 bits of index into Flash Linear address field in
8852          * Flash Address */
8853         E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
8854 
8855         if (size == 1)
8856             flash_data = (uint32_t)data & 0x00FF;
8857         else
8858             flash_data = (uint32_t)data;
8859 
8860         E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FDATA0, flash_data);
8861 
8862         /* check if FCERR is set to 1 , if set to 1, clear it and try the whole
8863          * sequence a few more times else done */
8864         error = e1000_ich8_flash_cycle(hw, ICH_FLASH_COMMAND_TIMEOUT);
8865         if (error == E1000_SUCCESS) {
8866             break;
8867         } else {
8868             /* If we're here, then things are most likely completely hosed,
8869              * but if the error condition is detected, it won't hurt to give
8870              * it another try...ICH_FLASH_CYCLE_REPEAT_COUNT times.
8871              */
8872             hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8873             if (hsfsts.hsf_status.flcerr == 1) {
8874                 /* Repeat for some time before giving up. */
8875                 continue;
8876             } else if (hsfsts.hsf_status.flcdone == 0) {
8877                 DEBUGOUT("Timeout error - flash cycle did not complete.");
8878                 break;
8879             }
8880         }
8881     } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
8882 
8883     return error;
8884 }
8885 
8886 /******************************************************************************
8887  * Reads a single byte from the NVM using the ICH8 flash access registers.
8888  *
8889  * hw - pointer to e1000_hw structure
8890  * index - The index of the byte to read.
8891  * data - Pointer to a byte to store the value read.
8892  *****************************************************************************/
8893 static int32_t
e1000_read_ich8_byte(struct e1000_hw * hw,uint32_t index,uint8_t * data)8894 e1000_read_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t* data)
8895 {
8896     int32_t status = E1000_SUCCESS;
8897     uint16_t word = 0;
8898 
8899     status = e1000_read_ich8_data(hw, index, 1, &word);
8900     if (status == E1000_SUCCESS) {
8901         *data = (uint8_t)word;
8902     }
8903 
8904     return status;
8905 }
8906 
8907 /******************************************************************************
8908  * Writes a single byte to the NVM using the ICH8 flash access registers.
8909  * Performs verification by reading back the value and then going through
8910  * a retry algorithm before giving up.
8911  *
8912  * hw - pointer to e1000_hw structure
8913  * index - The index of the byte to write.
8914  * byte - The byte to write to the NVM.
8915  *****************************************************************************/
8916 static int32_t
e1000_verify_write_ich8_byte(struct e1000_hw * hw,uint32_t index,uint8_t byte)8917 e1000_verify_write_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t byte)
8918 {
8919     int32_t error = E1000_SUCCESS;
8920     int32_t program_retries = 0;
8921 
8922     DEBUGOUT2("Byte := %2.2X Offset := %d\n", byte, index);
8923 
8924     error = e1000_write_ich8_byte(hw, index, byte);
8925 
8926     if (error != E1000_SUCCESS) {
8927         for (program_retries = 0; program_retries < 100; program_retries++) {
8928             DEBUGOUT2("Retrying \t Byte := %2.2X Offset := %d\n", byte, index);
8929             error = e1000_write_ich8_byte(hw, index, byte);
8930             udelay(100);
8931             if (error == E1000_SUCCESS)
8932                 break;
8933         }
8934     }
8935 
8936     if (program_retries == 100)
8937         error = E1000_ERR_EEPROM;
8938 
8939     return error;
8940 }
8941 
8942 /******************************************************************************
8943  * Writes a single byte to the NVM using the ICH8 flash access registers.
8944  *
8945  * hw - pointer to e1000_hw structure
8946  * index - The index of the byte to read.
8947  * data - The byte to write to the NVM.
8948  *****************************************************************************/
8949 static int32_t
e1000_write_ich8_byte(struct e1000_hw * hw,uint32_t index,uint8_t data)8950 e1000_write_ich8_byte(struct e1000_hw *hw, uint32_t index, uint8_t data)
8951 {
8952     int32_t status = E1000_SUCCESS;
8953     uint16_t word = (uint16_t)data;
8954 
8955     status = e1000_write_ich8_data(hw, index, 1, word);
8956 
8957     return status;
8958 }
8959 
8960 /******************************************************************************
8961  * Reads a word from the NVM using the ICH8 flash access registers.
8962  *
8963  * hw - pointer to e1000_hw structure
8964  * index - The starting byte index of the word to read.
8965  * data - Pointer to a word to store the value read.
8966  *****************************************************************************/
8967 static int32_t
e1000_read_ich8_word(struct e1000_hw * hw,uint32_t index,uint16_t * data)8968 e1000_read_ich8_word(struct e1000_hw *hw, uint32_t index, uint16_t *data)
8969 {
8970     int32_t status = E1000_SUCCESS;
8971     status = e1000_read_ich8_data(hw, index, 2, data);
8972     return status;
8973 }
8974 
8975 /******************************************************************************
8976  * Erases the bank specified. Each bank may be a 4, 8 or 64k block. Banks are 0
8977  * based.
8978  *
8979  * hw - pointer to e1000_hw structure
8980  * bank - 0 for first bank, 1 for second bank
8981  *
8982  * Note that this function may actually erase as much as 8 or 64 KBytes.  The
8983  * amount of NVM used in each bank is a *minimum* of 4 KBytes, but in fact the
8984  * bank size may be 4, 8 or 64 KBytes
8985  *****************************************************************************/
8986 int32_t
e1000_erase_ich8_4k_segment(struct e1000_hw * hw,uint32_t bank)8987 e1000_erase_ich8_4k_segment(struct e1000_hw *hw, uint32_t bank)
8988 {
8989     union ich8_hws_flash_status hsfsts;
8990     union ich8_hws_flash_ctrl hsflctl;
8991     uint32_t flash_linear_address;
8992     int32_t  count = 0;
8993     int32_t  error = E1000_ERR_EEPROM;
8994     int32_t  iteration;
8995     int32_t  sub_sector_size = 0;
8996     int32_t  bank_size;
8997     int32_t  j = 0;
8998     int32_t  error_flag = 0;
8999 
9000     hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
9001 
9002     /* Determine HW Sector size: Read BERASE bits of Hw flash Status register */
9003     /* 00: The Hw sector is 256 bytes, hence we need to erase 16
9004      *     consecutive sectors.  The start index for the nth Hw sector can be
9005      *     calculated as bank * 4096 + n * 256
9006      * 01: The Hw sector is 4K bytes, hence we need to erase 1 sector.
9007      *     The start index for the nth Hw sector can be calculated
9008      *     as bank * 4096
9009      * 10: The HW sector is 8K bytes
9010      * 11: The Hw sector size is 64K bytes */
9011     if (hsfsts.hsf_status.berasesz == 0x0) {
9012         /* Hw sector size 256 */
9013         sub_sector_size = ICH_FLASH_SEG_SIZE_256;
9014         bank_size = ICH_FLASH_SECTOR_SIZE;
9015         iteration = ICH_FLASH_SECTOR_SIZE / ICH_FLASH_SEG_SIZE_256;
9016     } else if (hsfsts.hsf_status.berasesz == 0x1) {
9017         bank_size = ICH_FLASH_SEG_SIZE_4K;
9018         iteration = 1;
9019     } else if (hsfsts.hsf_status.berasesz == 0x3) {
9020         bank_size = ICH_FLASH_SEG_SIZE_64K;
9021         iteration = 1;
9022     } else {
9023         return error;
9024     }
9025 
9026     for (j = 0; j < iteration ; j++) {
9027         do {
9028             count++;
9029             /* Steps */
9030             error = e1000_ich8_cycle_init(hw);
9031             if (error != E1000_SUCCESS) {
9032                 error_flag = 1;
9033                 break;
9034             }
9035 
9036             /* Write a value 11 (block Erase) in Flash Cycle field in Hw flash
9037              * Control */
9038             hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
9039             hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_ERASE;
9040             E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
9041 
9042             /* Write the last 24 bits of an index within the block into Flash
9043              * Linear address field in Flash Address.  This probably needs to
9044              * be calculated here based off the on-chip erase sector size and
9045              * the software bank size (4, 8 or 64 KBytes) */
9046             flash_linear_address = bank * bank_size + j * sub_sector_size;
9047             flash_linear_address += hw->flash_base_addr;
9048             flash_linear_address &= ICH_FLASH_LINEAR_ADDR_MASK;
9049 
9050             E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
9051 
9052             error = e1000_ich8_flash_cycle(hw, ICH_FLASH_ERASE_TIMEOUT);
9053             /* Check if FCERR is set to 1.  If 1, clear it and try the whole
9054              * sequence a few more times else Done */
9055             if (error == E1000_SUCCESS) {
9056                 break;
9057             } else {
9058                 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
9059                 if (hsfsts.hsf_status.flcerr == 1) {
9060                     /* repeat for some time before giving up */
9061                     continue;
9062                 } else if (hsfsts.hsf_status.flcdone == 0) {
9063                     error_flag = 1;
9064                     break;
9065                 }
9066             }
9067         } while ((count < ICH_FLASH_CYCLE_REPEAT_COUNT) && !error_flag);
9068         if (error_flag == 1)
9069             break;
9070     }
9071     if (error_flag != 1)
9072         error = E1000_SUCCESS;
9073     return error;
9074 }
9075 
9076 static int32_t
e1000_init_lcd_from_nvm_config_region(struct e1000_hw * hw,uint32_t cnf_base_addr,uint32_t cnf_size)9077 e1000_init_lcd_from_nvm_config_region(struct e1000_hw *hw,
9078                                       uint32_t cnf_base_addr, uint32_t cnf_size)
9079 {
9080     uint32_t ret_val = E1000_SUCCESS;
9081     uint16_t word_addr, reg_data, reg_addr;
9082     uint16_t i;
9083 
9084     /* cnf_base_addr is in DWORD */
9085     word_addr = (uint16_t)(cnf_base_addr << 1);
9086 
9087     /* cnf_size is returned in size of dwords */
9088     for (i = 0; i < cnf_size; i++) {
9089         ret_val = e1000_read_eeprom(hw, (word_addr + i*2), 1, &reg_data);
9090         if (ret_val)
9091             return ret_val;
9092 
9093         ret_val = e1000_read_eeprom(hw, (word_addr + i*2 + 1), 1, &reg_addr);
9094         if (ret_val)
9095             return ret_val;
9096 
9097         ret_val = e1000_get_software_flag(hw);
9098         if (ret_val != E1000_SUCCESS)
9099             return ret_val;
9100 
9101         ret_val = e1000_write_phy_reg_ex(hw, (uint32_t)reg_addr, reg_data);
9102 
9103         e1000_release_software_flag(hw);
9104     }
9105 
9106     return ret_val;
9107 }
9108 
9109 
9110 /******************************************************************************
9111  * This function initializes the PHY from the NVM on ICH8 platforms. This
9112  * is needed due to an issue where the NVM configuration is not properly
9113  * autoloaded after power transitions. Therefore, after each PHY reset, we
9114  * will load the configuration data out of the NVM manually.
9115  *
9116  * hw: Struct containing variables accessed by shared code
9117  *****************************************************************************/
9118 static int32_t
e1000_init_lcd_from_nvm(struct e1000_hw * hw)9119 e1000_init_lcd_from_nvm(struct e1000_hw *hw)
9120 {
9121     uint32_t reg_data, cnf_base_addr, cnf_size, ret_val, loop;
9122 
9123     if (hw->phy_type != e1000_phy_igp_3)
9124           return E1000_SUCCESS;
9125 
9126     /* Check if SW needs configure the PHY */
9127     reg_data = E1000_READ_REG(hw, FEXTNVM);
9128     if (!(reg_data & FEXTNVM_SW_CONFIG))
9129         return E1000_SUCCESS;
9130 
9131     /* Wait for basic configuration completes before proceeding*/
9132     loop = 0;
9133     do {
9134         reg_data = E1000_READ_REG(hw, STATUS) & E1000_STATUS_LAN_INIT_DONE;
9135         udelay(100);
9136         loop++;
9137     } while ((!reg_data) && (loop < 50));
9138 
9139     /* Clear the Init Done bit for the next init event */
9140     reg_data = E1000_READ_REG(hw, STATUS);
9141     reg_data &= ~E1000_STATUS_LAN_INIT_DONE;
9142     E1000_WRITE_REG(hw, STATUS, reg_data);
9143 
9144     /* Make sure HW does not configure LCD from PHY extended configuration
9145        before SW configuration */
9146     reg_data = E1000_READ_REG(hw, EXTCNF_CTRL);
9147     if ((reg_data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE) == 0x0000) {
9148         reg_data = E1000_READ_REG(hw, EXTCNF_SIZE);
9149         cnf_size = reg_data & E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH;
9150         cnf_size >>= 16;
9151         if (cnf_size) {
9152             reg_data = E1000_READ_REG(hw, EXTCNF_CTRL);
9153             cnf_base_addr = reg_data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER;
9154             /* cnf_base_addr is in DWORD */
9155             cnf_base_addr >>= 16;
9156 
9157             /* Configure LCD from extended configuration region. */
9158             ret_val = e1000_init_lcd_from_nvm_config_region(hw, cnf_base_addr,
9159                                                             cnf_size);
9160             if (ret_val)
9161                 return ret_val;
9162         }
9163     }
9164 
9165     return E1000_SUCCESS;
9166 }
9167 
9168 /*
9169  * Local variables:
9170  *  c-basic-offset: 8
9171  *  c-indent-level: 8
9172  *  tab-width: 8
9173  * End:
9174  */
9175