1 /*******************************************************************************
2 
3   Intel PRO/10GbE Linux driver
4   Copyright(c) 1999 - 2008 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 /* ixgb_hw.c
30  * Shared functions for accessing and configuring the adapter
31  */
32 
33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
34 
35 #include "ixgb_hw.h"
36 #include "ixgb_ids.h"
37 
38 #include <linux/etherdevice.h>
39 
40 /*  Local function prototypes */
41 
42 static u32 ixgb_hash_mc_addr(struct ixgb_hw *hw, u8 * mc_addr);
43 
44 static void ixgb_mta_set(struct ixgb_hw *hw, u32 hash_value);
45 
46 static void ixgb_get_bus_info(struct ixgb_hw *hw);
47 
48 static bool ixgb_link_reset(struct ixgb_hw *hw);
49 
50 static void ixgb_optics_reset(struct ixgb_hw *hw);
51 
52 static void ixgb_optics_reset_bcm(struct ixgb_hw *hw);
53 
54 static ixgb_phy_type ixgb_identify_phy(struct ixgb_hw *hw);
55 
56 static void ixgb_clear_hw_cntrs(struct ixgb_hw *hw);
57 
58 static void ixgb_clear_vfta(struct ixgb_hw *hw);
59 
60 static void ixgb_init_rx_addrs(struct ixgb_hw *hw);
61 
62 static u16 ixgb_read_phy_reg(struct ixgb_hw *hw,
63 				  u32 reg_address,
64 				  u32 phy_address,
65 				  u32 device_type);
66 
67 static bool ixgb_setup_fc(struct ixgb_hw *hw);
68 
69 static bool mac_addr_valid(u8 *mac_addr);
70 
ixgb_mac_reset(struct ixgb_hw * hw)71 static u32 ixgb_mac_reset(struct ixgb_hw *hw)
72 {
73 	u32 ctrl_reg;
74 
75 	ctrl_reg =  IXGB_CTRL0_RST |
76 				IXGB_CTRL0_SDP3_DIR |   /* All pins are Output=1 */
77 				IXGB_CTRL0_SDP2_DIR |
78 				IXGB_CTRL0_SDP1_DIR |
79 				IXGB_CTRL0_SDP0_DIR |
80 				IXGB_CTRL0_SDP3	 |   /* Initial value 1101   */
81 				IXGB_CTRL0_SDP2	 |
82 				IXGB_CTRL0_SDP0;
83 
84 #ifdef HP_ZX1
85 	/* Workaround for 82597EX reset errata */
86 	IXGB_WRITE_REG_IO(hw, CTRL0, ctrl_reg);
87 #else
88 	IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
89 #endif
90 
91 	/* Delay a few ms just to allow the reset to complete */
92 	msleep(IXGB_DELAY_AFTER_RESET);
93 	ctrl_reg = IXGB_READ_REG(hw, CTRL0);
94 #ifdef DBG
95 	/* Make sure the self-clearing global reset bit did self clear */
96 	ASSERT(!(ctrl_reg & IXGB_CTRL0_RST));
97 #endif
98 
99 	if (hw->subsystem_vendor_id == SUN_SUBVENDOR_ID) {
100 		ctrl_reg =  /* Enable interrupt from XFP and SerDes */
101 			   IXGB_CTRL1_GPI0_EN |
102 			   IXGB_CTRL1_SDP6_DIR |
103 			   IXGB_CTRL1_SDP7_DIR |
104 			   IXGB_CTRL1_SDP6 |
105 			   IXGB_CTRL1_SDP7;
106 		IXGB_WRITE_REG(hw, CTRL1, ctrl_reg);
107 		ixgb_optics_reset_bcm(hw);
108 	}
109 
110 	if (hw->phy_type == ixgb_phy_type_txn17401)
111 		ixgb_optics_reset(hw);
112 
113 	return ctrl_reg;
114 }
115 
116 /******************************************************************************
117  * Reset the transmit and receive units; mask and clear all interrupts.
118  *
119  * hw - Struct containing variables accessed by shared code
120  *****************************************************************************/
121 bool
ixgb_adapter_stop(struct ixgb_hw * hw)122 ixgb_adapter_stop(struct ixgb_hw *hw)
123 {
124 	u32 ctrl_reg;
125 	u32 icr_reg;
126 
127 	ENTER();
128 
129 	/* If we are stopped or resetting exit gracefully and wait to be
130 	 * started again before accessing the hardware.
131 	 */
132 	if (hw->adapter_stopped) {
133 		pr_debug("Exiting because the adapter is already stopped!!!\n");
134 		return false;
135 	}
136 
137 	/* Set the Adapter Stopped flag so other driver functions stop
138 	 * touching the Hardware.
139 	 */
140 	hw->adapter_stopped = true;
141 
142 	/* Clear interrupt mask to stop board from generating interrupts */
143 	pr_debug("Masking off all interrupts\n");
144 	IXGB_WRITE_REG(hw, IMC, 0xFFFFFFFF);
145 
146 	/* Disable the Transmit and Receive units.  Then delay to allow
147 	 * any pending transactions to complete before we hit the MAC with
148 	 * the global reset.
149 	 */
150 	IXGB_WRITE_REG(hw, RCTL, IXGB_READ_REG(hw, RCTL) & ~IXGB_RCTL_RXEN);
151 	IXGB_WRITE_REG(hw, TCTL, IXGB_READ_REG(hw, TCTL) & ~IXGB_TCTL_TXEN);
152 	IXGB_WRITE_FLUSH(hw);
153 	msleep(IXGB_DELAY_BEFORE_RESET);
154 
155 	/* Issue a global reset to the MAC.  This will reset the chip's
156 	 * transmit, receive, DMA, and link units.  It will not effect
157 	 * the current PCI configuration.  The global reset bit is self-
158 	 * clearing, and should clear within a microsecond.
159 	 */
160 	pr_debug("Issuing a global reset to MAC\n");
161 
162 	ctrl_reg = ixgb_mac_reset(hw);
163 
164 	/* Clear interrupt mask to stop board from generating interrupts */
165 	pr_debug("Masking off all interrupts\n");
166 	IXGB_WRITE_REG(hw, IMC, 0xffffffff);
167 
168 	/* Clear any pending interrupt events. */
169 	icr_reg = IXGB_READ_REG(hw, ICR);
170 
171 	return ctrl_reg & IXGB_CTRL0_RST;
172 }
173 
174 
175 /******************************************************************************
176  * Identifies the vendor of the optics module on the adapter.  The SR adapters
177  * support two different types of XPAK optics, so it is necessary to determine
178  * which optics are present before applying any optics-specific workarounds.
179  *
180  * hw - Struct containing variables accessed by shared code.
181  *
182  * Returns: the vendor of the XPAK optics module.
183  *****************************************************************************/
184 static ixgb_xpak_vendor
ixgb_identify_xpak_vendor(struct ixgb_hw * hw)185 ixgb_identify_xpak_vendor(struct ixgb_hw *hw)
186 {
187 	u32 i;
188 	u16 vendor_name[5];
189 	ixgb_xpak_vendor xpak_vendor;
190 
191 	ENTER();
192 
193 	/* Read the first few bytes of the vendor string from the XPAK NVR
194 	 * registers.  These are standard XENPAK/XPAK registers, so all XPAK
195 	 * devices should implement them. */
196 	for (i = 0; i < 5; i++) {
197 		vendor_name[i] = ixgb_read_phy_reg(hw,
198 						   MDIO_PMA_PMD_XPAK_VENDOR_NAME
199 						   + i, IXGB_PHY_ADDRESS,
200 						   MDIO_MMD_PMAPMD);
201 	}
202 
203 	/* Determine the actual vendor */
204 	if (vendor_name[0] == 'I' &&
205 	    vendor_name[1] == 'N' &&
206 	    vendor_name[2] == 'T' &&
207 	    vendor_name[3] == 'E' && vendor_name[4] == 'L') {
208 		xpak_vendor = ixgb_xpak_vendor_intel;
209 	} else {
210 		xpak_vendor = ixgb_xpak_vendor_infineon;
211 	}
212 
213 	return xpak_vendor;
214 }
215 
216 /******************************************************************************
217  * Determine the physical layer module on the adapter.
218  *
219  * hw - Struct containing variables accessed by shared code.  The device_id
220  *      field must be (correctly) populated before calling this routine.
221  *
222  * Returns: the phy type of the adapter.
223  *****************************************************************************/
224 static ixgb_phy_type
ixgb_identify_phy(struct ixgb_hw * hw)225 ixgb_identify_phy(struct ixgb_hw *hw)
226 {
227 	ixgb_phy_type phy_type;
228 	ixgb_xpak_vendor xpak_vendor;
229 
230 	ENTER();
231 
232 	/* Infer the transceiver/phy type from the device id */
233 	switch (hw->device_id) {
234 	case IXGB_DEVICE_ID_82597EX:
235 		pr_debug("Identified TXN17401 optics\n");
236 		phy_type = ixgb_phy_type_txn17401;
237 		break;
238 
239 	case IXGB_DEVICE_ID_82597EX_SR:
240 		/* The SR adapters carry two different types of XPAK optics
241 		 * modules; read the vendor identifier to determine the exact
242 		 * type of optics. */
243 		xpak_vendor = ixgb_identify_xpak_vendor(hw);
244 		if (xpak_vendor == ixgb_xpak_vendor_intel) {
245 			pr_debug("Identified TXN17201 optics\n");
246 			phy_type = ixgb_phy_type_txn17201;
247 		} else {
248 			pr_debug("Identified G6005 optics\n");
249 			phy_type = ixgb_phy_type_g6005;
250 		}
251 		break;
252 	case IXGB_DEVICE_ID_82597EX_LR:
253 		pr_debug("Identified G6104 optics\n");
254 		phy_type = ixgb_phy_type_g6104;
255 		break;
256 	case IXGB_DEVICE_ID_82597EX_CX4:
257 		pr_debug("Identified CX4\n");
258 		xpak_vendor = ixgb_identify_xpak_vendor(hw);
259 		if (xpak_vendor == ixgb_xpak_vendor_intel) {
260 			pr_debug("Identified TXN17201 optics\n");
261 			phy_type = ixgb_phy_type_txn17201;
262 		} else {
263 			pr_debug("Identified G6005 optics\n");
264 			phy_type = ixgb_phy_type_g6005;
265 		}
266 		break;
267 	default:
268 		pr_debug("Unknown physical layer module\n");
269 		phy_type = ixgb_phy_type_unknown;
270 		break;
271 	}
272 
273 	/* update phy type for sun specific board */
274 	if (hw->subsystem_vendor_id == SUN_SUBVENDOR_ID)
275 		phy_type = ixgb_phy_type_bcm;
276 
277 	return phy_type;
278 }
279 
280 /******************************************************************************
281  * Performs basic configuration of the adapter.
282  *
283  * hw - Struct containing variables accessed by shared code
284  *
285  * Resets the controller.
286  * Reads and validates the EEPROM.
287  * Initializes the receive address registers.
288  * Initializes the multicast table.
289  * Clears all on-chip counters.
290  * Calls routine to setup flow control settings.
291  * Leaves the transmit and receive units disabled and uninitialized.
292  *
293  * Returns:
294  *      true if successful,
295  *      false if unrecoverable problems were encountered.
296  *****************************************************************************/
297 bool
ixgb_init_hw(struct ixgb_hw * hw)298 ixgb_init_hw(struct ixgb_hw *hw)
299 {
300 	u32 i;
301 	u32 ctrl_reg;
302 	bool status;
303 
304 	ENTER();
305 
306 	/* Issue a global reset to the MAC.  This will reset the chip's
307 	 * transmit, receive, DMA, and link units.  It will not effect
308 	 * the current PCI configuration.  The global reset bit is self-
309 	 * clearing, and should clear within a microsecond.
310 	 */
311 	pr_debug("Issuing a global reset to MAC\n");
312 
313 	ctrl_reg = ixgb_mac_reset(hw);
314 
315 	pr_debug("Issuing an EE reset to MAC\n");
316 #ifdef HP_ZX1
317 	/* Workaround for 82597EX reset errata */
318 	IXGB_WRITE_REG_IO(hw, CTRL1, IXGB_CTRL1_EE_RST);
319 #else
320 	IXGB_WRITE_REG(hw, CTRL1, IXGB_CTRL1_EE_RST);
321 #endif
322 
323 	/* Delay a few ms just to allow the reset to complete */
324 	msleep(IXGB_DELAY_AFTER_EE_RESET);
325 
326 	if (!ixgb_get_eeprom_data(hw))
327 		return false;
328 
329 	/* Use the device id to determine the type of phy/transceiver. */
330 	hw->device_id = ixgb_get_ee_device_id(hw);
331 	hw->phy_type = ixgb_identify_phy(hw);
332 
333 	/* Setup the receive addresses.
334 	 * Receive Address Registers (RARs 0 - 15).
335 	 */
336 	ixgb_init_rx_addrs(hw);
337 
338 	/*
339 	 * Check that a valid MAC address has been set.
340 	 * If it is not valid, we fail hardware init.
341 	 */
342 	if (!mac_addr_valid(hw->curr_mac_addr)) {
343 		pr_debug("MAC address invalid after ixgb_init_rx_addrs\n");
344 		return(false);
345 	}
346 
347 	/* tell the routines in this file they can access hardware again */
348 	hw->adapter_stopped = false;
349 
350 	/* Fill in the bus_info structure */
351 	ixgb_get_bus_info(hw);
352 
353 	/* Zero out the Multicast HASH table */
354 	pr_debug("Zeroing the MTA\n");
355 	for (i = 0; i < IXGB_MC_TBL_SIZE; i++)
356 		IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
357 
358 	/* Zero out the VLAN Filter Table Array */
359 	ixgb_clear_vfta(hw);
360 
361 	/* Zero all of the hardware counters */
362 	ixgb_clear_hw_cntrs(hw);
363 
364 	/* Call a subroutine to setup flow control. */
365 	status = ixgb_setup_fc(hw);
366 
367 	/* 82597EX errata: Call check-for-link in case lane deskew is locked */
368 	ixgb_check_for_link(hw);
369 
370 	return status;
371 }
372 
373 /******************************************************************************
374  * Initializes receive address filters.
375  *
376  * hw - Struct containing variables accessed by shared code
377  *
378  * Places the MAC address in receive address register 0 and clears the rest
379  * of the receive address registers. Clears the multicast table. Assumes
380  * the receiver is in reset when the routine is called.
381  *****************************************************************************/
382 static void
ixgb_init_rx_addrs(struct ixgb_hw * hw)383 ixgb_init_rx_addrs(struct ixgb_hw *hw)
384 {
385 	u32 i;
386 
387 	ENTER();
388 
389 	/*
390 	 * If the current mac address is valid, assume it is a software override
391 	 * to the permanent address.
392 	 * Otherwise, use the permanent address from the eeprom.
393 	 */
394 	if (!mac_addr_valid(hw->curr_mac_addr)) {
395 
396 		/* Get the MAC address from the eeprom for later reference */
397 		ixgb_get_ee_mac_addr(hw, hw->curr_mac_addr);
398 
399 		pr_debug("Keeping Permanent MAC Addr = %pM\n",
400 			 hw->curr_mac_addr);
401 	} else {
402 
403 		/* Setup the receive address. */
404 		pr_debug("Overriding MAC Address in RAR[0]\n");
405 		pr_debug("New MAC Addr = %pM\n", hw->curr_mac_addr);
406 
407 		ixgb_rar_set(hw, hw->curr_mac_addr, 0);
408 	}
409 
410 	/* Zero out the other 15 receive addresses. */
411 	pr_debug("Clearing RAR[1-15]\n");
412 	for (i = 1; i < IXGB_RAR_ENTRIES; i++) {
413 		/* Write high reg first to disable the AV bit first */
414 		IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
415 		IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
416 	}
417 }
418 
419 /******************************************************************************
420  * Updates the MAC's list of multicast addresses.
421  *
422  * hw - Struct containing variables accessed by shared code
423  * mc_addr_list - the list of new multicast addresses
424  * mc_addr_count - number of addresses
425  * pad - number of bytes between addresses in the list
426  *
427  * The given list replaces any existing list. Clears the last 15 receive
428  * address registers and the multicast table. Uses receive address registers
429  * for the first 15 multicast addresses, and hashes the rest into the
430  * multicast table.
431  *****************************************************************************/
432 void
ixgb_mc_addr_list_update(struct ixgb_hw * hw,u8 * mc_addr_list,u32 mc_addr_count,u32 pad)433 ixgb_mc_addr_list_update(struct ixgb_hw *hw,
434 			  u8 *mc_addr_list,
435 			  u32 mc_addr_count,
436 			  u32 pad)
437 {
438 	u32 hash_value;
439 	u32 i;
440 	u32 rar_used_count = 1;		/* RAR[0] is used for our MAC address */
441 	u8 *mca;
442 
443 	ENTER();
444 
445 	/* Set the new number of MC addresses that we are being requested to use. */
446 	hw->num_mc_addrs = mc_addr_count;
447 
448 	/* Clear RAR[1-15] */
449 	pr_debug("Clearing RAR[1-15]\n");
450 	for (i = rar_used_count; i < IXGB_RAR_ENTRIES; i++) {
451 		IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
452 		IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
453 	}
454 
455 	/* Clear the MTA */
456 	pr_debug("Clearing MTA\n");
457 	for (i = 0; i < IXGB_MC_TBL_SIZE; i++)
458 		IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
459 
460 	/* Add the new addresses */
461 	mca = mc_addr_list;
462 	for (i = 0; i < mc_addr_count; i++) {
463 		pr_debug("Adding the multicast addresses:\n");
464 		pr_debug("MC Addr #%d = %pM\n", i, mca);
465 
466 		/* Place this multicast address in the RAR if there is room, *
467 		 * else put it in the MTA
468 		 */
469 		if (rar_used_count < IXGB_RAR_ENTRIES) {
470 			ixgb_rar_set(hw, mca, rar_used_count);
471 			pr_debug("Added a multicast address to RAR[%d]\n", i);
472 			rar_used_count++;
473 		} else {
474 			hash_value = ixgb_hash_mc_addr(hw, mca);
475 
476 			pr_debug("Hash value = 0x%03X\n", hash_value);
477 
478 			ixgb_mta_set(hw, hash_value);
479 		}
480 
481 		mca += ETH_ALEN + pad;
482 	}
483 
484 	pr_debug("MC Update Complete\n");
485 }
486 
487 /******************************************************************************
488  * Hashes an address to determine its location in the multicast table
489  *
490  * hw - Struct containing variables accessed by shared code
491  * mc_addr - the multicast address to hash
492  *
493  * Returns:
494  *      The hash value
495  *****************************************************************************/
496 static u32
ixgb_hash_mc_addr(struct ixgb_hw * hw,u8 * mc_addr)497 ixgb_hash_mc_addr(struct ixgb_hw *hw,
498 		   u8 *mc_addr)
499 {
500 	u32 hash_value = 0;
501 
502 	ENTER();
503 
504 	/* The portion of the address that is used for the hash table is
505 	 * determined by the mc_filter_type setting.
506 	 */
507 	switch (hw->mc_filter_type) {
508 		/* [0] [1] [2] [3] [4] [5]
509 		 * 01  AA  00  12  34  56
510 		 * LSB                 MSB - According to H/W docs */
511 	case 0:
512 		/* [47:36] i.e. 0x563 for above example address */
513 		hash_value =
514 		    ((mc_addr[4] >> 4) | (((u16) mc_addr[5]) << 4));
515 		break;
516 	case 1:		/* [46:35] i.e. 0xAC6 for above example address */
517 		hash_value =
518 		    ((mc_addr[4] >> 3) | (((u16) mc_addr[5]) << 5));
519 		break;
520 	case 2:		/* [45:34] i.e. 0x5D8 for above example address */
521 		hash_value =
522 		    ((mc_addr[4] >> 2) | (((u16) mc_addr[5]) << 6));
523 		break;
524 	case 3:		/* [43:32] i.e. 0x634 for above example address */
525 		hash_value = ((mc_addr[4]) | (((u16) mc_addr[5]) << 8));
526 		break;
527 	default:
528 		/* Invalid mc_filter_type, what should we do? */
529 		pr_debug("MC filter type param set incorrectly\n");
530 		ASSERT(0);
531 		break;
532 	}
533 
534 	hash_value &= 0xFFF;
535 	return hash_value;
536 }
537 
538 /******************************************************************************
539  * Sets the bit in the multicast table corresponding to the hash value.
540  *
541  * hw - Struct containing variables accessed by shared code
542  * hash_value - Multicast address hash value
543  *****************************************************************************/
544 static void
ixgb_mta_set(struct ixgb_hw * hw,u32 hash_value)545 ixgb_mta_set(struct ixgb_hw *hw,
546 		  u32 hash_value)
547 {
548 	u32 hash_bit, hash_reg;
549 	u32 mta_reg;
550 
551 	/* The MTA is a register array of 128 32-bit registers.
552 	 * It is treated like an array of 4096 bits.  We want to set
553 	 * bit BitArray[hash_value]. So we figure out what register
554 	 * the bit is in, read it, OR in the new bit, then write
555 	 * back the new value.  The register is determined by the
556 	 * upper 7 bits of the hash value and the bit within that
557 	 * register are determined by the lower 5 bits of the value.
558 	 */
559 	hash_reg = (hash_value >> 5) & 0x7F;
560 	hash_bit = hash_value & 0x1F;
561 
562 	mta_reg = IXGB_READ_REG_ARRAY(hw, MTA, hash_reg);
563 
564 	mta_reg |= (1 << hash_bit);
565 
566 	IXGB_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta_reg);
567 }
568 
569 /******************************************************************************
570  * Puts an ethernet address into a receive address register.
571  *
572  * hw - Struct containing variables accessed by shared code
573  * addr - Address to put into receive address register
574  * index - Receive address register to write
575  *****************************************************************************/
576 void
ixgb_rar_set(struct ixgb_hw * hw,u8 * addr,u32 index)577 ixgb_rar_set(struct ixgb_hw *hw,
578 		  u8 *addr,
579 		  u32 index)
580 {
581 	u32 rar_low, rar_high;
582 
583 	ENTER();
584 
585 	/* HW expects these in little endian so we reverse the byte order
586 	 * from network order (big endian) to little endian
587 	 */
588 	rar_low = ((u32) addr[0] |
589 		   ((u32)addr[1] << 8) |
590 		   ((u32)addr[2] << 16) |
591 		   ((u32)addr[3] << 24));
592 
593 	rar_high = ((u32) addr[4] |
594 			((u32)addr[5] << 8) |
595 			IXGB_RAH_AV);
596 
597 	IXGB_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
598 	IXGB_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
599 }
600 
601 /******************************************************************************
602  * Writes a value to the specified offset in the VLAN filter table.
603  *
604  * hw - Struct containing variables accessed by shared code
605  * offset - Offset in VLAN filer table to write
606  * value - Value to write into VLAN filter table
607  *****************************************************************************/
608 void
ixgb_write_vfta(struct ixgb_hw * hw,u32 offset,u32 value)609 ixgb_write_vfta(struct ixgb_hw *hw,
610 		 u32 offset,
611 		 u32 value)
612 {
613 	IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, value);
614 }
615 
616 /******************************************************************************
617  * Clears the VLAN filer table
618  *
619  * hw - Struct containing variables accessed by shared code
620  *****************************************************************************/
621 static void
ixgb_clear_vfta(struct ixgb_hw * hw)622 ixgb_clear_vfta(struct ixgb_hw *hw)
623 {
624 	u32 offset;
625 
626 	for (offset = 0; offset < IXGB_VLAN_FILTER_TBL_SIZE; offset++)
627 		IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, 0);
628 }
629 
630 /******************************************************************************
631  * Configures the flow control settings based on SW configuration.
632  *
633  * hw - Struct containing variables accessed by shared code
634  *****************************************************************************/
635 
636 static bool
ixgb_setup_fc(struct ixgb_hw * hw)637 ixgb_setup_fc(struct ixgb_hw *hw)
638 {
639 	u32 ctrl_reg;
640 	u32 pap_reg = 0;   /* by default, assume no pause time */
641 	bool status = true;
642 
643 	ENTER();
644 
645 	/* Get the current control reg 0 settings */
646 	ctrl_reg = IXGB_READ_REG(hw, CTRL0);
647 
648 	/* Clear the Receive Pause Enable and Transmit Pause Enable bits */
649 	ctrl_reg &= ~(IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
650 
651 	/* The possible values of the "flow_control" parameter are:
652 	 *      0:  Flow control is completely disabled
653 	 *      1:  Rx flow control is enabled (we can receive pause frames
654 	 *          but not send pause frames).
655 	 *      2:  Tx flow control is enabled (we can send pause frames
656 	 *          but we do not support receiving pause frames).
657 	 *      3:  Both Rx and TX flow control (symmetric) are enabled.
658 	 *  other:  Invalid.
659 	 */
660 	switch (hw->fc.type) {
661 	case ixgb_fc_none:	/* 0 */
662 		/* Set CMDC bit to disable Rx Flow control */
663 		ctrl_reg |= (IXGB_CTRL0_CMDC);
664 		break;
665 	case ixgb_fc_rx_pause:	/* 1 */
666 		/* RX Flow control is enabled, and TX Flow control is
667 		 * disabled.
668 		 */
669 		ctrl_reg |= (IXGB_CTRL0_RPE);
670 		break;
671 	case ixgb_fc_tx_pause:	/* 2 */
672 		/* TX Flow control is enabled, and RX Flow control is
673 		 * disabled, by a software over-ride.
674 		 */
675 		ctrl_reg |= (IXGB_CTRL0_TPE);
676 		pap_reg = hw->fc.pause_time;
677 		break;
678 	case ixgb_fc_full:	/* 3 */
679 		/* Flow control (both RX and TX) is enabled by a software
680 		 * over-ride.
681 		 */
682 		ctrl_reg |= (IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
683 		pap_reg = hw->fc.pause_time;
684 		break;
685 	default:
686 		/* We should never get here.  The value should be 0-3. */
687 		pr_debug("Flow control param set incorrectly\n");
688 		ASSERT(0);
689 		break;
690 	}
691 
692 	/* Write the new settings */
693 	IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
694 
695 	if (pap_reg != 0)
696 		IXGB_WRITE_REG(hw, PAP, pap_reg);
697 
698 	/* Set the flow control receive threshold registers.  Normally,
699 	 * these registers will be set to a default threshold that may be
700 	 * adjusted later by the driver's runtime code.  However, if the
701 	 * ability to transmit pause frames in not enabled, then these
702 	 * registers will be set to 0.
703 	 */
704 	if (!(hw->fc.type & ixgb_fc_tx_pause)) {
705 		IXGB_WRITE_REG(hw, FCRTL, 0);
706 		IXGB_WRITE_REG(hw, FCRTH, 0);
707 	} else {
708 	   /* We need to set up the Receive Threshold high and low water
709 	    * marks as well as (optionally) enabling the transmission of XON
710 	    * frames. */
711 		if (hw->fc.send_xon) {
712 			IXGB_WRITE_REG(hw, FCRTL,
713 				(hw->fc.low_water | IXGB_FCRTL_XONE));
714 		} else {
715 			IXGB_WRITE_REG(hw, FCRTL, hw->fc.low_water);
716 		}
717 		IXGB_WRITE_REG(hw, FCRTH, hw->fc.high_water);
718 	}
719 	return status;
720 }
721 
722 /******************************************************************************
723  * Reads a word from a device over the Management Data Interface (MDI) bus.
724  * This interface is used to manage Physical layer devices.
725  *
726  * hw          - Struct containing variables accessed by hw code
727  * reg_address - Offset of device register being read.
728  * phy_address - Address of device on MDI.
729  *
730  * Returns:  Data word (16 bits) from MDI device.
731  *
732  * The 82597EX has support for several MDI access methods.  This routine
733  * uses the new protocol MDI Single Command and Address Operation.
734  * This requires that first an address cycle command is sent, followed by a
735  * read command.
736  *****************************************************************************/
737 static u16
ixgb_read_phy_reg(struct ixgb_hw * hw,u32 reg_address,u32 phy_address,u32 device_type)738 ixgb_read_phy_reg(struct ixgb_hw *hw,
739 		u32 reg_address,
740 		u32 phy_address,
741 		u32 device_type)
742 {
743 	u32 i;
744 	u32 data;
745 	u32 command = 0;
746 
747 	ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
748 	ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
749 	ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
750 
751 	/* Setup and write the address cycle command */
752 	command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
753 		   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
754 		   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
755 		   (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
756 
757 	IXGB_WRITE_REG(hw, MSCA, command);
758 
759     /**************************************************************
760     ** Check every 10 usec to see if the address cycle completed
761     ** The COMMAND bit will clear when the operation is complete.
762     ** This may take as long as 64 usecs (we'll wait 100 usecs max)
763     ** from the CPU Write to the Ready bit assertion.
764     **************************************************************/
765 
766 	for (i = 0; i < 10; i++)
767 	{
768 		udelay(10);
769 
770 		command = IXGB_READ_REG(hw, MSCA);
771 
772 		if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
773 			break;
774 	}
775 
776 	ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
777 
778 	/* Address cycle complete, setup and write the read command */
779 	command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
780 		   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
781 		   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
782 		   (IXGB_MSCA_READ | IXGB_MSCA_MDI_COMMAND));
783 
784 	IXGB_WRITE_REG(hw, MSCA, command);
785 
786     /**************************************************************
787     ** Check every 10 usec to see if the read command completed
788     ** The COMMAND bit will clear when the operation is complete.
789     ** The read may take as long as 64 usecs (we'll wait 100 usecs max)
790     ** from the CPU Write to the Ready bit assertion.
791     **************************************************************/
792 
793 	for (i = 0; i < 10; i++)
794 	{
795 		udelay(10);
796 
797 		command = IXGB_READ_REG(hw, MSCA);
798 
799 		if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
800 			break;
801 	}
802 
803 	ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
804 
805 	/* Operation is complete, get the data from the MDIO Read/Write Data
806 	 * register and return.
807 	 */
808 	data = IXGB_READ_REG(hw, MSRWD);
809 	data >>= IXGB_MSRWD_READ_DATA_SHIFT;
810 	return((u16) data);
811 }
812 
813 /******************************************************************************
814  * Writes a word to a device over the Management Data Interface (MDI) bus.
815  * This interface is used to manage Physical layer devices.
816  *
817  * hw          - Struct containing variables accessed by hw code
818  * reg_address - Offset of device register being read.
819  * phy_address - Address of device on MDI.
820  * device_type - Also known as the Device ID or DID.
821  * data        - 16-bit value to be written
822  *
823  * Returns:  void.
824  *
825  * The 82597EX has support for several MDI access methods.  This routine
826  * uses the new protocol MDI Single Command and Address Operation.
827  * This requires that first an address cycle command is sent, followed by a
828  * write command.
829  *****************************************************************************/
830 static void
ixgb_write_phy_reg(struct ixgb_hw * hw,u32 reg_address,u32 phy_address,u32 device_type,u16 data)831 ixgb_write_phy_reg(struct ixgb_hw *hw,
832 			u32 reg_address,
833 			u32 phy_address,
834 			u32 device_type,
835 			u16 data)
836 {
837 	u32 i;
838 	u32 command = 0;
839 
840 	ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
841 	ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
842 	ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
843 
844 	/* Put the data in the MDIO Read/Write Data register */
845 	IXGB_WRITE_REG(hw, MSRWD, (u32)data);
846 
847 	/* Setup and write the address cycle command */
848 	command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
849 			   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
850 			   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
851 			   (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
852 
853 	IXGB_WRITE_REG(hw, MSCA, command);
854 
855 	/**************************************************************
856 	** Check every 10 usec to see if the address cycle completed
857 	** The COMMAND bit will clear when the operation is complete.
858 	** This may take as long as 64 usecs (we'll wait 100 usecs max)
859 	** from the CPU Write to the Ready bit assertion.
860 	**************************************************************/
861 
862 	for (i = 0; i < 10; i++)
863 	{
864 		udelay(10);
865 
866 		command = IXGB_READ_REG(hw, MSCA);
867 
868 		if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
869 			break;
870 	}
871 
872 	ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
873 
874 	/* Address cycle complete, setup and write the write command */
875 	command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
876 			   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
877 			   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
878 			   (IXGB_MSCA_WRITE | IXGB_MSCA_MDI_COMMAND));
879 
880 	IXGB_WRITE_REG(hw, MSCA, command);
881 
882 	/**************************************************************
883 	** Check every 10 usec to see if the read command completed
884 	** The COMMAND bit will clear when the operation is complete.
885 	** The write may take as long as 64 usecs (we'll wait 100 usecs max)
886 	** from the CPU Write to the Ready bit assertion.
887 	**************************************************************/
888 
889 	for (i = 0; i < 10; i++)
890 	{
891 		udelay(10);
892 
893 		command = IXGB_READ_REG(hw, MSCA);
894 
895 		if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
896 			break;
897 	}
898 
899 	ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
900 
901 	/* Operation is complete, return. */
902 }
903 
904 /******************************************************************************
905  * Checks to see if the link status of the hardware has changed.
906  *
907  * hw - Struct containing variables accessed by hw code
908  *
909  * Called by any function that needs to check the link status of the adapter.
910  *****************************************************************************/
911 void
ixgb_check_for_link(struct ixgb_hw * hw)912 ixgb_check_for_link(struct ixgb_hw *hw)
913 {
914 	u32 status_reg;
915 	u32 xpcss_reg;
916 
917 	ENTER();
918 
919 	xpcss_reg = IXGB_READ_REG(hw, XPCSS);
920 	status_reg = IXGB_READ_REG(hw, STATUS);
921 
922 	if ((xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
923 	    (status_reg & IXGB_STATUS_LU)) {
924 		hw->link_up = true;
925 	} else if (!(xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
926 		   (status_reg & IXGB_STATUS_LU)) {
927 		pr_debug("XPCSS Not Aligned while Status:LU is set\n");
928 		hw->link_up = ixgb_link_reset(hw);
929 	} else {
930 		/*
931 		 * 82597EX errata.  Since the lane deskew problem may prevent
932 		 * link, reset the link before reporting link down.
933 		 */
934 		hw->link_up = ixgb_link_reset(hw);
935 	}
936 	/*  Anything else for 10 Gig?? */
937 }
938 
939 /******************************************************************************
940  * Check for a bad link condition that may have occurred.
941  * The indication is that the RFC / LFC registers may be incrementing
942  * continually.  A full adapter reset is required to recover.
943  *
944  * hw - Struct containing variables accessed by hw code
945  *
946  * Called by any function that needs to check the link status of the adapter.
947  *****************************************************************************/
ixgb_check_for_bad_link(struct ixgb_hw * hw)948 bool ixgb_check_for_bad_link(struct ixgb_hw *hw)
949 {
950 	u32 newLFC, newRFC;
951 	bool bad_link_returncode = false;
952 
953 	if (hw->phy_type == ixgb_phy_type_txn17401) {
954 		newLFC = IXGB_READ_REG(hw, LFC);
955 		newRFC = IXGB_READ_REG(hw, RFC);
956 		if ((hw->lastLFC + 250 < newLFC)
957 		    || (hw->lastRFC + 250 < newRFC)) {
958 			pr_debug("BAD LINK! too many LFC/RFC since last check\n");
959 			bad_link_returncode = true;
960 		}
961 		hw->lastLFC = newLFC;
962 		hw->lastRFC = newRFC;
963 	}
964 
965 	return bad_link_returncode;
966 }
967 
968 /******************************************************************************
969  * Clears all hardware statistics counters.
970  *
971  * hw - Struct containing variables accessed by shared code
972  *****************************************************************************/
973 static void
ixgb_clear_hw_cntrs(struct ixgb_hw * hw)974 ixgb_clear_hw_cntrs(struct ixgb_hw *hw)
975 {
976 	volatile u32 temp_reg;
977 
978 	ENTER();
979 
980 	/* if we are stopped or resetting exit gracefully */
981 	if (hw->adapter_stopped) {
982 		pr_debug("Exiting because the adapter is stopped!!!\n");
983 		return;
984 	}
985 
986 	temp_reg = IXGB_READ_REG(hw, TPRL);
987 	temp_reg = IXGB_READ_REG(hw, TPRH);
988 	temp_reg = IXGB_READ_REG(hw, GPRCL);
989 	temp_reg = IXGB_READ_REG(hw, GPRCH);
990 	temp_reg = IXGB_READ_REG(hw, BPRCL);
991 	temp_reg = IXGB_READ_REG(hw, BPRCH);
992 	temp_reg = IXGB_READ_REG(hw, MPRCL);
993 	temp_reg = IXGB_READ_REG(hw, MPRCH);
994 	temp_reg = IXGB_READ_REG(hw, UPRCL);
995 	temp_reg = IXGB_READ_REG(hw, UPRCH);
996 	temp_reg = IXGB_READ_REG(hw, VPRCL);
997 	temp_reg = IXGB_READ_REG(hw, VPRCH);
998 	temp_reg = IXGB_READ_REG(hw, JPRCL);
999 	temp_reg = IXGB_READ_REG(hw, JPRCH);
1000 	temp_reg = IXGB_READ_REG(hw, GORCL);
1001 	temp_reg = IXGB_READ_REG(hw, GORCH);
1002 	temp_reg = IXGB_READ_REG(hw, TORL);
1003 	temp_reg = IXGB_READ_REG(hw, TORH);
1004 	temp_reg = IXGB_READ_REG(hw, RNBC);
1005 	temp_reg = IXGB_READ_REG(hw, RUC);
1006 	temp_reg = IXGB_READ_REG(hw, ROC);
1007 	temp_reg = IXGB_READ_REG(hw, RLEC);
1008 	temp_reg = IXGB_READ_REG(hw, CRCERRS);
1009 	temp_reg = IXGB_READ_REG(hw, ICBC);
1010 	temp_reg = IXGB_READ_REG(hw, ECBC);
1011 	temp_reg = IXGB_READ_REG(hw, MPC);
1012 	temp_reg = IXGB_READ_REG(hw, TPTL);
1013 	temp_reg = IXGB_READ_REG(hw, TPTH);
1014 	temp_reg = IXGB_READ_REG(hw, GPTCL);
1015 	temp_reg = IXGB_READ_REG(hw, GPTCH);
1016 	temp_reg = IXGB_READ_REG(hw, BPTCL);
1017 	temp_reg = IXGB_READ_REG(hw, BPTCH);
1018 	temp_reg = IXGB_READ_REG(hw, MPTCL);
1019 	temp_reg = IXGB_READ_REG(hw, MPTCH);
1020 	temp_reg = IXGB_READ_REG(hw, UPTCL);
1021 	temp_reg = IXGB_READ_REG(hw, UPTCH);
1022 	temp_reg = IXGB_READ_REG(hw, VPTCL);
1023 	temp_reg = IXGB_READ_REG(hw, VPTCH);
1024 	temp_reg = IXGB_READ_REG(hw, JPTCL);
1025 	temp_reg = IXGB_READ_REG(hw, JPTCH);
1026 	temp_reg = IXGB_READ_REG(hw, GOTCL);
1027 	temp_reg = IXGB_READ_REG(hw, GOTCH);
1028 	temp_reg = IXGB_READ_REG(hw, TOTL);
1029 	temp_reg = IXGB_READ_REG(hw, TOTH);
1030 	temp_reg = IXGB_READ_REG(hw, DC);
1031 	temp_reg = IXGB_READ_REG(hw, PLT64C);
1032 	temp_reg = IXGB_READ_REG(hw, TSCTC);
1033 	temp_reg = IXGB_READ_REG(hw, TSCTFC);
1034 	temp_reg = IXGB_READ_REG(hw, IBIC);
1035 	temp_reg = IXGB_READ_REG(hw, RFC);
1036 	temp_reg = IXGB_READ_REG(hw, LFC);
1037 	temp_reg = IXGB_READ_REG(hw, PFRC);
1038 	temp_reg = IXGB_READ_REG(hw, PFTC);
1039 	temp_reg = IXGB_READ_REG(hw, MCFRC);
1040 	temp_reg = IXGB_READ_REG(hw, MCFTC);
1041 	temp_reg = IXGB_READ_REG(hw, XONRXC);
1042 	temp_reg = IXGB_READ_REG(hw, XONTXC);
1043 	temp_reg = IXGB_READ_REG(hw, XOFFRXC);
1044 	temp_reg = IXGB_READ_REG(hw, XOFFTXC);
1045 	temp_reg = IXGB_READ_REG(hw, RJC);
1046 }
1047 
1048 /******************************************************************************
1049  * Turns on the software controllable LED
1050  *
1051  * hw - Struct containing variables accessed by shared code
1052  *****************************************************************************/
1053 void
ixgb_led_on(struct ixgb_hw * hw)1054 ixgb_led_on(struct ixgb_hw *hw)
1055 {
1056 	u32 ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1057 
1058 	/* To turn on the LED, clear software-definable pin 0 (SDP0). */
1059 	ctrl0_reg &= ~IXGB_CTRL0_SDP0;
1060 	IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1061 }
1062 
1063 /******************************************************************************
1064  * Turns off the software controllable LED
1065  *
1066  * hw - Struct containing variables accessed by shared code
1067  *****************************************************************************/
1068 void
ixgb_led_off(struct ixgb_hw * hw)1069 ixgb_led_off(struct ixgb_hw *hw)
1070 {
1071 	u32 ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1072 
1073 	/* To turn off the LED, set software-definable pin 0 (SDP0). */
1074 	ctrl0_reg |= IXGB_CTRL0_SDP0;
1075 	IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1076 }
1077 
1078 /******************************************************************************
1079  * Gets the current PCI bus type, speed, and width of the hardware
1080  *
1081  * hw - Struct containing variables accessed by shared code
1082  *****************************************************************************/
1083 static void
ixgb_get_bus_info(struct ixgb_hw * hw)1084 ixgb_get_bus_info(struct ixgb_hw *hw)
1085 {
1086 	u32 status_reg;
1087 
1088 	status_reg = IXGB_READ_REG(hw, STATUS);
1089 
1090 	hw->bus.type = (status_reg & IXGB_STATUS_PCIX_MODE) ?
1091 		ixgb_bus_type_pcix : ixgb_bus_type_pci;
1092 
1093 	if (hw->bus.type == ixgb_bus_type_pci) {
1094 		hw->bus.speed = (status_reg & IXGB_STATUS_PCI_SPD) ?
1095 			ixgb_bus_speed_66 : ixgb_bus_speed_33;
1096 	} else {
1097 		switch (status_reg & IXGB_STATUS_PCIX_SPD_MASK) {
1098 		case IXGB_STATUS_PCIX_SPD_66:
1099 			hw->bus.speed = ixgb_bus_speed_66;
1100 			break;
1101 		case IXGB_STATUS_PCIX_SPD_100:
1102 			hw->bus.speed = ixgb_bus_speed_100;
1103 			break;
1104 		case IXGB_STATUS_PCIX_SPD_133:
1105 			hw->bus.speed = ixgb_bus_speed_133;
1106 			break;
1107 		default:
1108 			hw->bus.speed = ixgb_bus_speed_reserved;
1109 			break;
1110 		}
1111 	}
1112 
1113 	hw->bus.width = (status_reg & IXGB_STATUS_BUS64) ?
1114 		ixgb_bus_width_64 : ixgb_bus_width_32;
1115 }
1116 
1117 /******************************************************************************
1118  * Tests a MAC address to ensure it is a valid Individual Address
1119  *
1120  * mac_addr - pointer to MAC address.
1121  *
1122  *****************************************************************************/
1123 static bool
mac_addr_valid(u8 * mac_addr)1124 mac_addr_valid(u8 *mac_addr)
1125 {
1126 	bool is_valid = true;
1127 	ENTER();
1128 
1129 	/* Make sure it is not a multicast address */
1130 	if (is_multicast_ether_addr(mac_addr)) {
1131 		pr_debug("MAC address is multicast\n");
1132 		is_valid = false;
1133 	}
1134 	/* Not a broadcast address */
1135 	else if (is_broadcast_ether_addr(mac_addr)) {
1136 		pr_debug("MAC address is broadcast\n");
1137 		is_valid = false;
1138 	}
1139 	/* Reject the zero address */
1140 	else if (is_zero_ether_addr(mac_addr)) {
1141 		pr_debug("MAC address is all zeros\n");
1142 		is_valid = false;
1143 	}
1144 	return is_valid;
1145 }
1146 
1147 /******************************************************************************
1148  * Resets the 10GbE link.  Waits the settle time and returns the state of
1149  * the link.
1150  *
1151  * hw - Struct containing variables accessed by shared code
1152  *****************************************************************************/
1153 static bool
ixgb_link_reset(struct ixgb_hw * hw)1154 ixgb_link_reset(struct ixgb_hw *hw)
1155 {
1156 	bool link_status = false;
1157 	u8 wait_retries = MAX_RESET_ITERATIONS;
1158 	u8 lrst_retries = MAX_RESET_ITERATIONS;
1159 
1160 	do {
1161 		/* Reset the link */
1162 		IXGB_WRITE_REG(hw, CTRL0,
1163 			       IXGB_READ_REG(hw, CTRL0) | IXGB_CTRL0_LRST);
1164 
1165 		/* Wait for link-up and lane re-alignment */
1166 		do {
1167 			udelay(IXGB_DELAY_USECS_AFTER_LINK_RESET);
1168 			link_status =
1169 			    ((IXGB_READ_REG(hw, STATUS) & IXGB_STATUS_LU)
1170 			     && (IXGB_READ_REG(hw, XPCSS) &
1171 				 IXGB_XPCSS_ALIGN_STATUS)) ? true : false;
1172 		} while (!link_status && --wait_retries);
1173 
1174 	} while (!link_status && --lrst_retries);
1175 
1176 	return link_status;
1177 }
1178 
1179 /******************************************************************************
1180  * Resets the 10GbE optics module.
1181  *
1182  * hw - Struct containing variables accessed by shared code
1183  *****************************************************************************/
1184 static void
ixgb_optics_reset(struct ixgb_hw * hw)1185 ixgb_optics_reset(struct ixgb_hw *hw)
1186 {
1187 	if (hw->phy_type == ixgb_phy_type_txn17401) {
1188 		u16 mdio_reg;
1189 
1190 		ixgb_write_phy_reg(hw,
1191 				   MDIO_CTRL1,
1192 				   IXGB_PHY_ADDRESS,
1193 				   MDIO_MMD_PMAPMD,
1194 				   MDIO_CTRL1_RESET);
1195 
1196 		mdio_reg = ixgb_read_phy_reg(hw,
1197 					     MDIO_CTRL1,
1198 					     IXGB_PHY_ADDRESS,
1199 					     MDIO_MMD_PMAPMD);
1200 	}
1201 }
1202 
1203 /******************************************************************************
1204  * Resets the 10GbE optics module for Sun variant NIC.
1205  *
1206  * hw - Struct containing variables accessed by shared code
1207  *****************************************************************************/
1208 
1209 #define   IXGB_BCM8704_USER_PMD_TX_CTRL_REG         0xC803
1210 #define   IXGB_BCM8704_USER_PMD_TX_CTRL_REG_VAL     0x0164
1211 #define   IXGB_BCM8704_USER_CTRL_REG                0xC800
1212 #define   IXGB_BCM8704_USER_CTRL_REG_VAL            0x7FBF
1213 #define   IXGB_BCM8704_USER_DEV3_ADDR               0x0003
1214 #define   IXGB_SUN_PHY_ADDRESS                      0x0000
1215 #define   IXGB_SUN_PHY_RESET_DELAY                     305
1216 
1217 static void
ixgb_optics_reset_bcm(struct ixgb_hw * hw)1218 ixgb_optics_reset_bcm(struct ixgb_hw *hw)
1219 {
1220 	u32 ctrl = IXGB_READ_REG(hw, CTRL0);
1221 	ctrl &= ~IXGB_CTRL0_SDP2;
1222 	ctrl |= IXGB_CTRL0_SDP3;
1223 	IXGB_WRITE_REG(hw, CTRL0, ctrl);
1224 	IXGB_WRITE_FLUSH(hw);
1225 
1226 	/* SerDes needs extra delay */
1227 	msleep(IXGB_SUN_PHY_RESET_DELAY);
1228 
1229 	/* Broadcom 7408L configuration */
1230 	/* Reference clock config */
1231 	ixgb_write_phy_reg(hw,
1232 			   IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1233 			   IXGB_SUN_PHY_ADDRESS,
1234 			   IXGB_BCM8704_USER_DEV3_ADDR,
1235 			   IXGB_BCM8704_USER_PMD_TX_CTRL_REG_VAL);
1236 	/*  we must read the registers twice */
1237 	ixgb_read_phy_reg(hw,
1238 			  IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1239 			  IXGB_SUN_PHY_ADDRESS,
1240 			  IXGB_BCM8704_USER_DEV3_ADDR);
1241 	ixgb_read_phy_reg(hw,
1242 			  IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1243 			  IXGB_SUN_PHY_ADDRESS,
1244 			  IXGB_BCM8704_USER_DEV3_ADDR);
1245 
1246 	ixgb_write_phy_reg(hw,
1247 			   IXGB_BCM8704_USER_CTRL_REG,
1248 			   IXGB_SUN_PHY_ADDRESS,
1249 			   IXGB_BCM8704_USER_DEV3_ADDR,
1250 			   IXGB_BCM8704_USER_CTRL_REG_VAL);
1251 	ixgb_read_phy_reg(hw,
1252 			  IXGB_BCM8704_USER_CTRL_REG,
1253 			  IXGB_SUN_PHY_ADDRESS,
1254 			  IXGB_BCM8704_USER_DEV3_ADDR);
1255 	ixgb_read_phy_reg(hw,
1256 			  IXGB_BCM8704_USER_CTRL_REG,
1257 			  IXGB_SUN_PHY_ADDRESS,
1258 			  IXGB_BCM8704_USER_DEV3_ADDR);
1259 
1260 	/* SerDes needs extra delay */
1261 	msleep(IXGB_SUN_PHY_RESET_DELAY);
1262 }
1263