1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
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.
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
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.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
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
30 * Shared functions for accessing and configuring the MAC
35 static s32 e1000_check_downshift(struct e1000_hw *hw);
36 static s32 e1000_check_polarity(struct e1000_hw *hw,
37 e1000_rev_polarity *polarity);
38 static void e1000_clear_hw_cntrs(struct e1000_hw *hw);
39 static void e1000_clear_vfta(struct e1000_hw *hw);
40 static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw,
42 static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw);
43 static s32 e1000_detect_gig_phy(struct e1000_hw *hw);
44 static s32 e1000_get_auto_rd_done(struct e1000_hw *hw);
45 static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
47 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);
48 static s32 e1000_id_led_init(struct e1000_hw *hw);
49 static void e1000_init_rx_addrs(struct e1000_hw *hw);
50 static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
51 struct e1000_phy_info *phy_info);
52 static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
53 struct e1000_phy_info *phy_info);
54 static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active);
55 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
56 static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value);
57 static s32 e1000_set_phy_type(struct e1000_hw *hw);
58 static void e1000_phy_init_script(struct e1000_hw *hw);
59 static s32 e1000_setup_copper_link(struct e1000_hw *hw);
60 static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw);
61 static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw);
62 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw);
63 static s32 e1000_config_mac_to_phy(struct e1000_hw *hw);
64 static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
65 static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
66 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data, u16 count);
67 static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw);
68 static s32 e1000_phy_reset_dsp(struct e1000_hw *hw);
69 static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset,
70 u16 words, u16 *data);
71 static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
72 u16 words, u16 *data);
73 static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw);
74 static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd);
75 static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd);
76 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count);
77 static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
79 static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
81 static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count);
82 static s32 e1000_acquire_eeprom(struct e1000_hw *hw);
83 static void e1000_release_eeprom(struct e1000_hw *hw);
84 static void e1000_standby_eeprom(struct e1000_hw *hw);
85 static s32 e1000_set_vco_speed(struct e1000_hw *hw);
86 static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw);
87 static s32 e1000_set_phy_mode(struct e1000_hw *hw);
88 static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
90 static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
93 /* IGP cable length table */
95 u16 e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] = {
96 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
97 5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
98 25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
99 40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
100 60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
101 90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100,
103 100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
105 110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120,
109 static DEFINE_SPINLOCK(e1000_eeprom_lock);
110 static DEFINE_SPINLOCK(e1000_phy_lock);
113 * e1000_set_phy_type - Set the phy type member in the hw struct.
114 * @hw: Struct containing variables accessed by shared code
116 static s32 e1000_set_phy_type(struct e1000_hw *hw)
118 e_dbg("e1000_set_phy_type");
120 if (hw->mac_type == e1000_undefined)
121 return -E1000_ERR_PHY_TYPE;
123 switch (hw->phy_id) {
124 case M88E1000_E_PHY_ID:
125 case M88E1000_I_PHY_ID:
126 case M88E1011_I_PHY_ID:
127 case M88E1111_I_PHY_ID:
128 case M88E1118_E_PHY_ID:
129 hw->phy_type = e1000_phy_m88;
131 case IGP01E1000_I_PHY_ID:
132 if (hw->mac_type == e1000_82541 ||
133 hw->mac_type == e1000_82541_rev_2 ||
134 hw->mac_type == e1000_82547 ||
135 hw->mac_type == e1000_82547_rev_2)
136 hw->phy_type = e1000_phy_igp;
138 case RTL8211B_PHY_ID:
139 hw->phy_type = e1000_phy_8211;
141 case RTL8201N_PHY_ID:
142 hw->phy_type = e1000_phy_8201;
145 /* Should never have loaded on this device */
146 hw->phy_type = e1000_phy_undefined;
147 return -E1000_ERR_PHY_TYPE;
150 return E1000_SUCCESS;
154 * e1000_phy_init_script - IGP phy init script - initializes the GbE PHY
155 * @hw: Struct containing variables accessed by shared code
157 static void e1000_phy_init_script(struct e1000_hw *hw)
162 e_dbg("e1000_phy_init_script");
164 if (hw->phy_init_script) {
167 /* Save off the current value of register 0x2F5B to be restored at
168 * the end of this routine. */
169 ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
171 /* Disabled the PHY transmitter */
172 e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
175 e1000_write_phy_reg(hw, 0x0000, 0x0140);
178 switch (hw->mac_type) {
181 e1000_write_phy_reg(hw, 0x1F95, 0x0001);
182 e1000_write_phy_reg(hw, 0x1F71, 0xBD21);
183 e1000_write_phy_reg(hw, 0x1F79, 0x0018);
184 e1000_write_phy_reg(hw, 0x1F30, 0x1600);
185 e1000_write_phy_reg(hw, 0x1F31, 0x0014);
186 e1000_write_phy_reg(hw, 0x1F32, 0x161C);
187 e1000_write_phy_reg(hw, 0x1F94, 0x0003);
188 e1000_write_phy_reg(hw, 0x1F96, 0x003F);
189 e1000_write_phy_reg(hw, 0x2010, 0x0008);
192 case e1000_82541_rev_2:
193 case e1000_82547_rev_2:
194 e1000_write_phy_reg(hw, 0x1F73, 0x0099);
200 e1000_write_phy_reg(hw, 0x0000, 0x3300);
203 /* Now enable the transmitter */
204 e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
206 if (hw->mac_type == e1000_82547) {
207 u16 fused, fine, coarse;
209 /* Move to analog registers page */
210 e1000_read_phy_reg(hw,
211 IGP01E1000_ANALOG_SPARE_FUSE_STATUS,
214 if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
215 e1000_read_phy_reg(hw,
216 IGP01E1000_ANALOG_FUSE_STATUS,
219 fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
221 fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
224 IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
226 IGP01E1000_ANALOG_FUSE_COARSE_10;
227 fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
229 IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
230 fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
233 (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
234 (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
236 IGP01E1000_ANALOG_FUSE_COARSE_MASK);
238 e1000_write_phy_reg(hw,
239 IGP01E1000_ANALOG_FUSE_CONTROL,
241 e1000_write_phy_reg(hw,
242 IGP01E1000_ANALOG_FUSE_BYPASS,
243 IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
250 * e1000_set_mac_type - Set the mac type member in the hw struct.
251 * @hw: Struct containing variables accessed by shared code
253 s32 e1000_set_mac_type(struct e1000_hw *hw)
255 e_dbg("e1000_set_mac_type");
257 switch (hw->device_id) {
258 case E1000_DEV_ID_82542:
259 switch (hw->revision_id) {
260 case E1000_82542_2_0_REV_ID:
261 hw->mac_type = e1000_82542_rev2_0;
263 case E1000_82542_2_1_REV_ID:
264 hw->mac_type = e1000_82542_rev2_1;
267 /* Invalid 82542 revision ID */
268 return -E1000_ERR_MAC_TYPE;
271 case E1000_DEV_ID_82543GC_FIBER:
272 case E1000_DEV_ID_82543GC_COPPER:
273 hw->mac_type = e1000_82543;
275 case E1000_DEV_ID_82544EI_COPPER:
276 case E1000_DEV_ID_82544EI_FIBER:
277 case E1000_DEV_ID_82544GC_COPPER:
278 case E1000_DEV_ID_82544GC_LOM:
279 hw->mac_type = e1000_82544;
281 case E1000_DEV_ID_82540EM:
282 case E1000_DEV_ID_82540EM_LOM:
283 case E1000_DEV_ID_82540EP:
284 case E1000_DEV_ID_82540EP_LOM:
285 case E1000_DEV_ID_82540EP_LP:
286 hw->mac_type = e1000_82540;
288 case E1000_DEV_ID_82545EM_COPPER:
289 case E1000_DEV_ID_82545EM_FIBER:
290 hw->mac_type = e1000_82545;
292 case E1000_DEV_ID_82545GM_COPPER:
293 case E1000_DEV_ID_82545GM_FIBER:
294 case E1000_DEV_ID_82545GM_SERDES:
295 hw->mac_type = e1000_82545_rev_3;
297 case E1000_DEV_ID_82546EB_COPPER:
298 case E1000_DEV_ID_82546EB_FIBER:
299 case E1000_DEV_ID_82546EB_QUAD_COPPER:
300 hw->mac_type = e1000_82546;
302 case E1000_DEV_ID_82546GB_COPPER:
303 case E1000_DEV_ID_82546GB_FIBER:
304 case E1000_DEV_ID_82546GB_SERDES:
305 case E1000_DEV_ID_82546GB_PCIE:
306 case E1000_DEV_ID_82546GB_QUAD_COPPER:
307 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
308 hw->mac_type = e1000_82546_rev_3;
310 case E1000_DEV_ID_82541EI:
311 case E1000_DEV_ID_82541EI_MOBILE:
312 case E1000_DEV_ID_82541ER_LOM:
313 hw->mac_type = e1000_82541;
315 case E1000_DEV_ID_82541ER:
316 case E1000_DEV_ID_82541GI:
317 case E1000_DEV_ID_82541GI_LF:
318 case E1000_DEV_ID_82541GI_MOBILE:
319 hw->mac_type = e1000_82541_rev_2;
321 case E1000_DEV_ID_82547EI:
322 case E1000_DEV_ID_82547EI_MOBILE:
323 hw->mac_type = e1000_82547;
325 case E1000_DEV_ID_82547GI:
326 hw->mac_type = e1000_82547_rev_2;
328 case E1000_DEV_ID_INTEL_CE4100_GBE:
329 hw->mac_type = e1000_ce4100;
332 /* Should never have loaded on this device */
333 return -E1000_ERR_MAC_TYPE;
336 switch (hw->mac_type) {
339 case e1000_82541_rev_2:
340 case e1000_82547_rev_2:
341 hw->asf_firmware_present = true;
347 /* The 82543 chip does not count tx_carrier_errors properly in
350 if (hw->mac_type == e1000_82543)
351 hw->bad_tx_carr_stats_fd = true;
353 if (hw->mac_type > e1000_82544)
354 hw->has_smbus = true;
356 return E1000_SUCCESS;
360 * e1000_set_media_type - Set media type and TBI compatibility.
361 * @hw: Struct containing variables accessed by shared code
363 void e1000_set_media_type(struct e1000_hw *hw)
367 e_dbg("e1000_set_media_type");
369 if (hw->mac_type != e1000_82543) {
370 /* tbi_compatibility is only valid on 82543 */
371 hw->tbi_compatibility_en = false;
374 switch (hw->device_id) {
375 case E1000_DEV_ID_82545GM_SERDES:
376 case E1000_DEV_ID_82546GB_SERDES:
377 hw->media_type = e1000_media_type_internal_serdes;
380 switch (hw->mac_type) {
381 case e1000_82542_rev2_0:
382 case e1000_82542_rev2_1:
383 hw->media_type = e1000_media_type_fiber;
386 hw->media_type = e1000_media_type_copper;
389 status = er32(STATUS);
390 if (status & E1000_STATUS_TBIMODE) {
391 hw->media_type = e1000_media_type_fiber;
392 /* tbi_compatibility not valid on fiber */
393 hw->tbi_compatibility_en = false;
395 hw->media_type = e1000_media_type_copper;
403 * e1000_reset_hw - reset the hardware completely
404 * @hw: Struct containing variables accessed by shared code
406 * Reset the transmit and receive units; mask and clear all interrupts.
408 s32 e1000_reset_hw(struct e1000_hw *hw)
417 e_dbg("e1000_reset_hw");
419 /* For 82542 (rev 2.0), disable MWI before issuing a device reset */
420 if (hw->mac_type == e1000_82542_rev2_0) {
421 e_dbg("Disabling MWI on 82542 rev 2.0\n");
422 e1000_pci_clear_mwi(hw);
425 /* Clear interrupt mask to stop board from generating interrupts */
426 e_dbg("Masking off all interrupts\n");
427 ew32(IMC, 0xffffffff);
429 /* Disable the Transmit and Receive units. Then delay to allow
430 * any pending transactions to complete before we hit the MAC with
434 ew32(TCTL, E1000_TCTL_PSP);
437 /* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */
438 hw->tbi_compatibility_on = false;
440 /* Delay to allow any outstanding PCI transactions to complete before
441 * resetting the device
447 /* Must reset the PHY before resetting the MAC */
448 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
449 ew32(CTRL, (ctrl | E1000_CTRL_PHY_RST));
454 /* Issue a global reset to the MAC. This will reset the chip's
455 * transmit, receive, DMA, and link units. It will not effect
456 * the current PCI configuration. The global reset bit is self-
457 * clearing, and should clear within a microsecond.
459 e_dbg("Issuing a global reset to MAC\n");
461 switch (hw->mac_type) {
467 case e1000_82541_rev_2:
468 /* These controllers can't ack the 64-bit write when issuing the
469 * reset, so use IO-mapping as a workaround to issue the reset */
470 E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));
472 case e1000_82545_rev_3:
473 case e1000_82546_rev_3:
474 /* Reset is performed on a shadow of the control register */
475 ew32(CTRL_DUP, (ctrl | E1000_CTRL_RST));
479 ew32(CTRL, (ctrl | E1000_CTRL_RST));
483 /* After MAC reset, force reload of EEPROM to restore power-on settings to
484 * device. Later controllers reload the EEPROM automatically, so just wait
485 * for reload to complete.
487 switch (hw->mac_type) {
488 case e1000_82542_rev2_0:
489 case e1000_82542_rev2_1:
492 /* Wait for reset to complete */
494 ctrl_ext = er32(CTRL_EXT);
495 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
496 ew32(CTRL_EXT, ctrl_ext);
498 /* Wait for EEPROM reload */
502 case e1000_82541_rev_2:
504 case e1000_82547_rev_2:
505 /* Wait for EEPROM reload */
509 /* Auto read done will delay 5ms or poll based on mac type */
510 ret_val = e1000_get_auto_rd_done(hw);
516 /* Disable HW ARPs on ASF enabled adapters */
517 if (hw->mac_type >= e1000_82540) {
519 manc &= ~(E1000_MANC_ARP_EN);
523 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
524 e1000_phy_init_script(hw);
526 /* Configure activity LED after PHY reset */
527 led_ctrl = er32(LEDCTL);
528 led_ctrl &= IGP_ACTIVITY_LED_MASK;
529 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
530 ew32(LEDCTL, led_ctrl);
533 /* Clear interrupt mask to stop board from generating interrupts */
534 e_dbg("Masking off all interrupts\n");
535 ew32(IMC, 0xffffffff);
537 /* Clear any pending interrupt events. */
540 /* If MWI was previously enabled, reenable it. */
541 if (hw->mac_type == e1000_82542_rev2_0) {
542 if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
543 e1000_pci_set_mwi(hw);
546 return E1000_SUCCESS;
550 * e1000_init_hw - Performs basic configuration of the adapter.
551 * @hw: Struct containing variables accessed by shared code
553 * Assumes that the controller has previously been reset and is in a
554 * post-reset uninitialized state. Initializes the receive address registers,
555 * multicast table, and VLAN filter table. Calls routines to setup link
556 * configuration and flow control settings. Clears all on-chip counters. Leaves
557 * the transmit and receive units disabled and uninitialized.
559 s32 e1000_init_hw(struct e1000_hw *hw)
567 e_dbg("e1000_init_hw");
569 /* Initialize Identification LED */
570 ret_val = e1000_id_led_init(hw);
572 e_dbg("Error Initializing Identification LED\n");
576 /* Set the media type and TBI compatibility */
577 e1000_set_media_type(hw);
579 /* Disabling VLAN filtering. */
580 e_dbg("Initializing the IEEE VLAN\n");
581 if (hw->mac_type < e1000_82545_rev_3)
583 e1000_clear_vfta(hw);
585 /* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
586 if (hw->mac_type == e1000_82542_rev2_0) {
587 e_dbg("Disabling MWI on 82542 rev 2.0\n");
588 e1000_pci_clear_mwi(hw);
589 ew32(RCTL, E1000_RCTL_RST);
594 /* Setup the receive address. This involves initializing all of the Receive
595 * Address Registers (RARs 0 - 15).
597 e1000_init_rx_addrs(hw);
599 /* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
600 if (hw->mac_type == e1000_82542_rev2_0) {
604 if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
605 e1000_pci_set_mwi(hw);
608 /* Zero out the Multicast HASH table */
609 e_dbg("Zeroing the MTA\n");
610 mta_size = E1000_MC_TBL_SIZE;
611 for (i = 0; i < mta_size; i++) {
612 E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
613 /* use write flush to prevent Memory Write Block (MWB) from
614 * occurring when accessing our register space */
618 /* Set the PCI priority bit correctly in the CTRL register. This
619 * determines if the adapter gives priority to receives, or if it
620 * gives equal priority to transmits and receives. Valid only on
621 * 82542 and 82543 silicon.
623 if (hw->dma_fairness && hw->mac_type <= e1000_82543) {
625 ew32(CTRL, ctrl | E1000_CTRL_PRIOR);
628 switch (hw->mac_type) {
629 case e1000_82545_rev_3:
630 case e1000_82546_rev_3:
633 /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */
634 if (hw->bus_type == e1000_bus_type_pcix
635 && e1000_pcix_get_mmrbc(hw) > 2048)
636 e1000_pcix_set_mmrbc(hw, 2048);
640 /* Call a subroutine to configure the link and setup flow control. */
641 ret_val = e1000_setup_link(hw);
643 /* Set the transmit descriptor write-back policy */
644 if (hw->mac_type > e1000_82544) {
647 (ctrl & ~E1000_TXDCTL_WTHRESH) |
648 E1000_TXDCTL_FULL_TX_DESC_WB;
652 /* Clear all of the statistics registers (clear on read). It is
653 * important that we do this after we have tried to establish link
654 * because the symbol error count will increment wildly if there
657 e1000_clear_hw_cntrs(hw);
659 if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER ||
660 hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) {
661 ctrl_ext = er32(CTRL_EXT);
662 /* Relaxed ordering must be disabled to avoid a parity
663 * error crash in a PCI slot. */
664 ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
665 ew32(CTRL_EXT, ctrl_ext);
672 * e1000_adjust_serdes_amplitude - Adjust SERDES output amplitude based on EEPROM setting.
673 * @hw: Struct containing variables accessed by shared code.
675 static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
680 e_dbg("e1000_adjust_serdes_amplitude");
682 if (hw->media_type != e1000_media_type_internal_serdes)
683 return E1000_SUCCESS;
685 switch (hw->mac_type) {
686 case e1000_82545_rev_3:
687 case e1000_82546_rev_3:
690 return E1000_SUCCESS;
693 ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1,
699 if (eeprom_data != EEPROM_RESERVED_WORD) {
700 /* Adjust SERDES output amplitude only. */
701 eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK;
703 e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, eeprom_data);
708 return E1000_SUCCESS;
712 * e1000_setup_link - Configures flow control and link settings.
713 * @hw: Struct containing variables accessed by shared code
715 * Determines which flow control settings to use. Calls the appropriate media-
716 * specific link configuration function. Configures the flow control settings.
717 * Assuming the adapter has a valid link partner, a valid link should be
718 * established. Assumes the hardware has previously been reset and the
719 * transmitter and receiver are not enabled.
721 s32 e1000_setup_link(struct e1000_hw *hw)
727 e_dbg("e1000_setup_link");
729 /* Read and store word 0x0F of the EEPROM. This word contains bits
730 * that determine the hardware's default PAUSE (flow control) mode,
731 * a bit that determines whether the HW defaults to enabling or
732 * disabling auto-negotiation, and the direction of the
733 * SW defined pins. If there is no SW over-ride of the flow
734 * control setting, then the variable hw->fc will
735 * be initialized based on a value in the EEPROM.
737 if (hw->fc == E1000_FC_DEFAULT) {
738 ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
741 e_dbg("EEPROM Read Error\n");
742 return -E1000_ERR_EEPROM;
744 if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
745 hw->fc = E1000_FC_NONE;
746 else if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) ==
747 EEPROM_WORD0F_ASM_DIR)
748 hw->fc = E1000_FC_TX_PAUSE;
750 hw->fc = E1000_FC_FULL;
753 /* We want to save off the original Flow Control configuration just
754 * in case we get disconnected and then reconnected into a different
755 * hub or switch with different Flow Control capabilities.
757 if (hw->mac_type == e1000_82542_rev2_0)
758 hw->fc &= (~E1000_FC_TX_PAUSE);
760 if ((hw->mac_type < e1000_82543) && (hw->report_tx_early == 1))
761 hw->fc &= (~E1000_FC_RX_PAUSE);
763 hw->original_fc = hw->fc;
765 e_dbg("After fix-ups FlowControl is now = %x\n", hw->fc);
767 /* Take the 4 bits from EEPROM word 0x0F that determine the initial
768 * polarity value for the SW controlled pins, and setup the
769 * Extended Device Control reg with that info.
770 * This is needed because one of the SW controlled pins is used for
771 * signal detection. So this should be done before e1000_setup_pcs_link()
772 * or e1000_phy_setup() is called.
774 if (hw->mac_type == e1000_82543) {
775 ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
778 e_dbg("EEPROM Read Error\n");
779 return -E1000_ERR_EEPROM;
781 ctrl_ext = ((eeprom_data & EEPROM_WORD0F_SWPDIO_EXT) <<
783 ew32(CTRL_EXT, ctrl_ext);
786 /* Call the necessary subroutine to configure the link. */
787 ret_val = (hw->media_type == e1000_media_type_copper) ?
788 e1000_setup_copper_link(hw) : e1000_setup_fiber_serdes_link(hw);
790 /* Initialize the flow control address, type, and PAUSE timer
791 * registers to their default values. This is done even if flow
792 * control is disabled, because it does not hurt anything to
793 * initialize these registers.
795 e_dbg("Initializing the Flow Control address, type and timer regs\n");
797 ew32(FCT, FLOW_CONTROL_TYPE);
798 ew32(FCAH, FLOW_CONTROL_ADDRESS_HIGH);
799 ew32(FCAL, FLOW_CONTROL_ADDRESS_LOW);
801 ew32(FCTTV, hw->fc_pause_time);
803 /* Set the flow control receive threshold registers. Normally,
804 * these registers will be set to a default threshold that may be
805 * adjusted later by the driver's runtime code. However, if the
806 * ability to transmit pause frames in not enabled, then these
807 * registers will be set to 0.
809 if (!(hw->fc & E1000_FC_TX_PAUSE)) {
813 /* We need to set up the Receive Threshold high and low water marks
814 * as well as (optionally) enabling the transmission of XON frames.
816 if (hw->fc_send_xon) {
817 ew32(FCRTL, (hw->fc_low_water | E1000_FCRTL_XONE));
818 ew32(FCRTH, hw->fc_high_water);
820 ew32(FCRTL, hw->fc_low_water);
821 ew32(FCRTH, hw->fc_high_water);
828 * e1000_setup_fiber_serdes_link - prepare fiber or serdes link
829 * @hw: Struct containing variables accessed by shared code
831 * Manipulates Physical Coding Sublayer functions in order to configure
832 * link. Assumes the hardware has been previously reset and the transmitter
833 * and receiver are not enabled.
835 static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
844 e_dbg("e1000_setup_fiber_serdes_link");
846 /* On adapters with a MAC newer than 82544, SWDP 1 will be
847 * set when the optics detect a signal. On older adapters, it will be
848 * cleared when there is a signal. This applies to fiber media only.
849 * If we're on serdes media, adjust the output amplitude to value
853 if (hw->media_type == e1000_media_type_fiber)
854 signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
856 ret_val = e1000_adjust_serdes_amplitude(hw);
860 /* Take the link out of reset */
861 ctrl &= ~(E1000_CTRL_LRST);
863 /* Adjust VCO speed to improve BER performance */
864 ret_val = e1000_set_vco_speed(hw);
868 e1000_config_collision_dist(hw);
870 /* Check for a software override of the flow control settings, and setup
871 * the device accordingly. If auto-negotiation is enabled, then software
872 * will have to set the "PAUSE" bits to the correct value in the Tranmsit
873 * Config Word Register (TXCW) and re-start auto-negotiation. However, if
874 * auto-negotiation is disabled, then software will have to manually
875 * configure the two flow control enable bits in the CTRL register.
877 * The possible values of the "fc" parameter are:
878 * 0: Flow control is completely disabled
879 * 1: Rx flow control is enabled (we can receive pause frames, but
880 * not send pause frames).
881 * 2: Tx flow control is enabled (we can send pause frames but we do
882 * not support receiving pause frames).
883 * 3: Both Rx and TX flow control (symmetric) are enabled.
887 /* Flow control is completely disabled by a software over-ride. */
888 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
890 case E1000_FC_RX_PAUSE:
891 /* RX Flow control is enabled and TX Flow control is disabled by a
892 * software over-ride. Since there really isn't a way to advertise
893 * that we are capable of RX Pause ONLY, we will advertise that we
894 * support both symmetric and asymmetric RX PAUSE. Later, we will
895 * disable the adapter's ability to send PAUSE frames.
897 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
899 case E1000_FC_TX_PAUSE:
900 /* TX Flow control is enabled, and RX Flow control is disabled, by a
901 * software over-ride.
903 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
906 /* Flow control (both RX and TX) is enabled by a software over-ride. */
907 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
910 e_dbg("Flow control param set incorrectly\n");
911 return -E1000_ERR_CONFIG;
915 /* Since auto-negotiation is enabled, take the link out of reset (the link
916 * will be in reset, because we previously reset the chip). This will
917 * restart auto-negotiation. If auto-negotiation is successful then the
918 * link-up status bit will be set and the flow control enable bits (RFCE
919 * and TFCE) will be set according to their negotiated value.
921 e_dbg("Auto-negotiation enabled\n");
930 /* If we have a signal (the cable is plugged in) then poll for a "Link-Up"
931 * indication in the Device Status Register. Time-out if a link isn't
932 * seen in 500 milliseconds seconds (Auto-negotiation should complete in
933 * less than 500 milliseconds even if the other end is doing it in SW).
934 * For internal serdes, we just assume a signal is present, then poll.
936 if (hw->media_type == e1000_media_type_internal_serdes ||
937 (er32(CTRL) & E1000_CTRL_SWDPIN1) == signal) {
938 e_dbg("Looking for Link\n");
939 for (i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
941 status = er32(STATUS);
942 if (status & E1000_STATUS_LU)
945 if (i == (LINK_UP_TIMEOUT / 10)) {
946 e_dbg("Never got a valid link from auto-neg!!!\n");
947 hw->autoneg_failed = 1;
948 /* AutoNeg failed to achieve a link, so we'll call
949 * e1000_check_for_link. This routine will force the link up if
950 * we detect a signal. This will allow us to communicate with
951 * non-autonegotiating link partners.
953 ret_val = e1000_check_for_link(hw);
955 e_dbg("Error while checking for link\n");
958 hw->autoneg_failed = 0;
960 hw->autoneg_failed = 0;
961 e_dbg("Valid Link Found\n");
964 e_dbg("No Signal Detected\n");
966 return E1000_SUCCESS;
970 * e1000_copper_link_rtl_setup - Copper link setup for e1000_phy_rtl series.
971 * @hw: Struct containing variables accessed by shared code
973 * Commits changes to PHY configuration by calling e1000_phy_reset().
975 static s32 e1000_copper_link_rtl_setup(struct e1000_hw *hw)
979 /* SW reset the PHY so all changes take effect */
980 ret_val = e1000_phy_reset(hw);
982 e_dbg("Error Resetting the PHY\n");
986 return E1000_SUCCESS;
989 static s32 gbe_dhg_phy_setup(struct e1000_hw *hw)
994 switch (hw->phy_type) {
996 ret_val = e1000_copper_link_rtl_setup(hw);
998 e_dbg("e1000_copper_link_rtl_setup failed!\n");
1002 case e1000_phy_8201:
1004 ctrl_aux = er32(CTL_AUX);
1005 ctrl_aux |= E1000_CTL_AUX_RMII;
1006 ew32(CTL_AUX, ctrl_aux);
1007 E1000_WRITE_FLUSH();
1009 /* Disable the J/K bits required for receive */
1010 ctrl_aux = er32(CTL_AUX);
1013 ew32(CTL_AUX, ctrl_aux);
1014 E1000_WRITE_FLUSH();
1015 ret_val = e1000_copper_link_rtl_setup(hw);
1018 e_dbg("e1000_copper_link_rtl_setup failed!\n");
1023 e_dbg("Error Resetting the PHY\n");
1024 return E1000_ERR_PHY_TYPE;
1027 return E1000_SUCCESS;
1031 * e1000_copper_link_preconfig - early configuration for copper
1032 * @hw: Struct containing variables accessed by shared code
1034 * Make sure we have a valid PHY and change PHY mode before link setup.
1036 static s32 e1000_copper_link_preconfig(struct e1000_hw *hw)
1042 e_dbg("e1000_copper_link_preconfig");
1045 /* With 82543, we need to force speed and duplex on the MAC equal to what
1046 * the PHY speed and duplex configuration is. In addition, we need to
1047 * perform a hardware reset on the PHY to take it out of reset.
1049 if (hw->mac_type > e1000_82543) {
1050 ctrl |= E1000_CTRL_SLU;
1051 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1055 (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_SLU);
1057 ret_val = e1000_phy_hw_reset(hw);
1062 /* Make sure we have a valid PHY */
1063 ret_val = e1000_detect_gig_phy(hw);
1065 e_dbg("Error, did not detect valid phy.\n");
1068 e_dbg("Phy ID = %x\n", hw->phy_id);
1070 /* Set PHY to class A mode (if necessary) */
1071 ret_val = e1000_set_phy_mode(hw);
1075 if ((hw->mac_type == e1000_82545_rev_3) ||
1076 (hw->mac_type == e1000_82546_rev_3)) {
1078 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1079 phy_data |= 0x00000008;
1081 e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1084 if (hw->mac_type <= e1000_82543 ||
1085 hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 ||
1086 hw->mac_type == e1000_82541_rev_2
1087 || hw->mac_type == e1000_82547_rev_2)
1088 hw->phy_reset_disable = false;
1090 return E1000_SUCCESS;
1094 * e1000_copper_link_igp_setup - Copper link setup for e1000_phy_igp series.
1095 * @hw: Struct containing variables accessed by shared code
1097 static s32 e1000_copper_link_igp_setup(struct e1000_hw *hw)
1103 e_dbg("e1000_copper_link_igp_setup");
1105 if (hw->phy_reset_disable)
1106 return E1000_SUCCESS;
1108 ret_val = e1000_phy_reset(hw);
1110 e_dbg("Error Resetting the PHY\n");
1114 /* Wait 15ms for MAC to configure PHY from eeprom settings */
1116 /* Configure activity LED after PHY reset */
1117 led_ctrl = er32(LEDCTL);
1118 led_ctrl &= IGP_ACTIVITY_LED_MASK;
1119 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
1120 ew32(LEDCTL, led_ctrl);
1122 /* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */
1123 if (hw->phy_type == e1000_phy_igp) {
1124 /* disable lplu d3 during driver init */
1125 ret_val = e1000_set_d3_lplu_state(hw, false);
1127 e_dbg("Error Disabling LPLU D3\n");
1132 /* Configure mdi-mdix settings */
1133 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1137 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
1138 hw->dsp_config_state = e1000_dsp_config_disabled;
1139 /* Force MDI for earlier revs of the IGP PHY */
1141 ~(IGP01E1000_PSCR_AUTO_MDIX |
1142 IGP01E1000_PSCR_FORCE_MDI_MDIX);
1146 hw->dsp_config_state = e1000_dsp_config_enabled;
1147 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1151 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1154 phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
1158 phy_data |= IGP01E1000_PSCR_AUTO_MDIX;
1162 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1166 /* set auto-master slave resolution settings */
1168 e1000_ms_type phy_ms_setting = hw->master_slave;
1170 if (hw->ffe_config_state == e1000_ffe_config_active)
1171 hw->ffe_config_state = e1000_ffe_config_enabled;
1173 if (hw->dsp_config_state == e1000_dsp_config_activated)
1174 hw->dsp_config_state = e1000_dsp_config_enabled;
1176 /* when autonegotiation advertisement is only 1000Mbps then we
1177 * should disable SmartSpeed and enable Auto MasterSlave
1178 * resolution as hardware default. */
1179 if (hw->autoneg_advertised == ADVERTISE_1000_FULL) {
1180 /* Disable SmartSpeed */
1182 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1186 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1188 e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1192 /* Set auto Master/Slave resolution process */
1194 e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1197 phy_data &= ~CR_1000T_MS_ENABLE;
1199 e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1204 ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1208 /* load defaults for future use */
1209 hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ?
1210 ((phy_data & CR_1000T_MS_VALUE) ?
1211 e1000_ms_force_master :
1212 e1000_ms_force_slave) : e1000_ms_auto;
1214 switch (phy_ms_setting) {
1215 case e1000_ms_force_master:
1216 phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
1218 case e1000_ms_force_slave:
1219 phy_data |= CR_1000T_MS_ENABLE;
1220 phy_data &= ~(CR_1000T_MS_VALUE);
1223 phy_data &= ~CR_1000T_MS_ENABLE;
1227 ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1232 return E1000_SUCCESS;
1236 * e1000_copper_link_mgp_setup - Copper link setup for e1000_phy_m88 series.
1237 * @hw: Struct containing variables accessed by shared code
1239 static s32 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
1244 e_dbg("e1000_copper_link_mgp_setup");
1246 if (hw->phy_reset_disable)
1247 return E1000_SUCCESS;
1249 /* Enable CRS on TX. This must be set for half-duplex operation. */
1250 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1254 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1257 * MDI/MDI-X = 0 (default)
1258 * 0 - Auto for all speeds
1261 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1263 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1267 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
1270 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
1273 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
1277 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
1282 * disable_polarity_correction = 0 (default)
1283 * Automatic Correction for Reversed Cable Polarity
1287 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
1288 if (hw->disable_polarity_correction == 1)
1289 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
1290 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1294 if (hw->phy_revision < M88E1011_I_REV_4) {
1295 /* Force TX_CLK in the Extended PHY Specific Control Register
1299 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
1304 phy_data |= M88E1000_EPSCR_TX_CLK_25;
1306 if ((hw->phy_revision == E1000_REVISION_2) &&
1307 (hw->phy_id == M88E1111_I_PHY_ID)) {
1308 /* Vidalia Phy, set the downshift counter to 5x */
1309 phy_data &= ~(M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK);
1310 phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
1311 ret_val = e1000_write_phy_reg(hw,
1312 M88E1000_EXT_PHY_SPEC_CTRL,
1317 /* Configure Master and Slave downshift values */
1318 phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
1319 M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
1320 phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
1321 M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
1322 ret_val = e1000_write_phy_reg(hw,
1323 M88E1000_EXT_PHY_SPEC_CTRL,
1330 /* SW Reset the PHY so all changes take effect */
1331 ret_val = e1000_phy_reset(hw);
1333 e_dbg("Error Resetting the PHY\n");
1337 return E1000_SUCCESS;
1341 * e1000_copper_link_autoneg - setup auto-neg
1342 * @hw: Struct containing variables accessed by shared code
1344 * Setup auto-negotiation and flow control advertisements,
1345 * and then perform auto-negotiation.
1347 static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
1352 e_dbg("e1000_copper_link_autoneg");
1354 /* Perform some bounds checking on the hw->autoneg_advertised
1355 * parameter. If this variable is zero, then set it to the default.
1357 hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT;
1359 /* If autoneg_advertised is zero, we assume it was not defaulted
1360 * by the calling code so we set to advertise full capability.
1362 if (hw->autoneg_advertised == 0)
1363 hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
1365 /* IFE/RTL8201N PHY only supports 10/100 */
1366 if (hw->phy_type == e1000_phy_8201)
1367 hw->autoneg_advertised &= AUTONEG_ADVERTISE_10_100_ALL;
1369 e_dbg("Reconfiguring auto-neg advertisement params\n");
1370 ret_val = e1000_phy_setup_autoneg(hw);
1372 e_dbg("Error Setting up Auto-Negotiation\n");
1375 e_dbg("Restarting Auto-Neg\n");
1377 /* Restart auto-negotiation by setting the Auto Neg Enable bit and
1378 * the Auto Neg Restart bit in the PHY control register.
1380 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
1384 phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
1385 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
1389 /* Does the user want to wait for Auto-Neg to complete here, or
1390 * check at a later time (for example, callback routine).
1392 if (hw->wait_autoneg_complete) {
1393 ret_val = e1000_wait_autoneg(hw);
1396 ("Error while waiting for autoneg to complete\n");
1401 hw->get_link_status = true;
1403 return E1000_SUCCESS;
1407 * e1000_copper_link_postconfig - post link setup
1408 * @hw: Struct containing variables accessed by shared code
1410 * Config the MAC and the PHY after link is up.
1411 * 1) Set up the MAC to the current PHY speed/duplex
1412 * if we are on 82543. If we
1413 * are on newer silicon, we only need to configure
1414 * collision distance in the Transmit Control Register.
1415 * 2) Set up flow control on the MAC to that established with
1417 * 3) Config DSP to improve Gigabit link quality for some PHY revisions.
1419 static s32 e1000_copper_link_postconfig(struct e1000_hw *hw)
1422 e_dbg("e1000_copper_link_postconfig");
1424 if ((hw->mac_type >= e1000_82544) && (hw->mac_type != e1000_ce4100)) {
1425 e1000_config_collision_dist(hw);
1427 ret_val = e1000_config_mac_to_phy(hw);
1429 e_dbg("Error configuring MAC to PHY settings\n");
1433 ret_val = e1000_config_fc_after_link_up(hw);
1435 e_dbg("Error Configuring Flow Control\n");
1439 /* Config DSP to improve Giga link quality */
1440 if (hw->phy_type == e1000_phy_igp) {
1441 ret_val = e1000_config_dsp_after_link_change(hw, true);
1443 e_dbg("Error Configuring DSP after link up\n");
1448 return E1000_SUCCESS;
1452 * e1000_setup_copper_link - phy/speed/duplex setting
1453 * @hw: Struct containing variables accessed by shared code
1455 * Detects which PHY is present and sets up the speed and duplex
1457 static s32 e1000_setup_copper_link(struct e1000_hw *hw)
1463 e_dbg("e1000_setup_copper_link");
1465 /* Check if it is a valid PHY and set PHY mode if necessary. */
1466 ret_val = e1000_copper_link_preconfig(hw);
1470 if (hw->phy_type == e1000_phy_igp) {
1471 ret_val = e1000_copper_link_igp_setup(hw);
1474 } else if (hw->phy_type == e1000_phy_m88) {
1475 ret_val = e1000_copper_link_mgp_setup(hw);
1479 ret_val = gbe_dhg_phy_setup(hw);
1481 e_dbg("gbe_dhg_phy_setup failed!\n");
1487 /* Setup autoneg and flow control advertisement
1488 * and perform autonegotiation */
1489 ret_val = e1000_copper_link_autoneg(hw);
1493 /* PHY will be set to 10H, 10F, 100H,or 100F
1494 * depending on value from forced_speed_duplex. */
1495 e_dbg("Forcing speed and duplex\n");
1496 ret_val = e1000_phy_force_speed_duplex(hw);
1498 e_dbg("Error Forcing Speed and Duplex\n");
1503 /* Check link status. Wait up to 100 microseconds for link to become
1506 for (i = 0; i < 10; i++) {
1507 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
1510 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
1514 if (phy_data & MII_SR_LINK_STATUS) {
1515 /* Config the MAC and PHY after link is up */
1516 ret_val = e1000_copper_link_postconfig(hw);
1520 e_dbg("Valid link established!!!\n");
1521 return E1000_SUCCESS;
1526 e_dbg("Unable to establish link!!!\n");
1527 return E1000_SUCCESS;
1531 * e1000_phy_setup_autoneg - phy settings
1532 * @hw: Struct containing variables accessed by shared code
1534 * Configures PHY autoneg and flow control advertisement settings
1536 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
1539 u16 mii_autoneg_adv_reg;
1540 u16 mii_1000t_ctrl_reg;
1542 e_dbg("e1000_phy_setup_autoneg");
1544 /* Read the MII Auto-Neg Advertisement Register (Address 4). */
1545 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
1549 /* Read the MII 1000Base-T Control Register (Address 9). */
1550 ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
1553 else if (hw->phy_type == e1000_phy_8201)
1554 mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
1556 /* Need to parse both autoneg_advertised and fc and set up
1557 * the appropriate PHY registers. First we will parse for
1558 * autoneg_advertised software override. Since we can advertise
1559 * a plethora of combinations, we need to check each bit
1563 /* First we clear all the 10/100 mb speed bits in the Auto-Neg
1564 * Advertisement Register (Address 4) and the 1000 mb speed bits in
1565 * the 1000Base-T Control Register (Address 9).
1567 mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
1568 mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
1570 e_dbg("autoneg_advertised %x\n", hw->autoneg_advertised);
1572 /* Do we want to advertise 10 Mb Half Duplex? */
1573 if (hw->autoneg_advertised & ADVERTISE_10_HALF) {
1574 e_dbg("Advertise 10mb Half duplex\n");
1575 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
1578 /* Do we want to advertise 10 Mb Full Duplex? */
1579 if (hw->autoneg_advertised & ADVERTISE_10_FULL) {
1580 e_dbg("Advertise 10mb Full duplex\n");
1581 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
1584 /* Do we want to advertise 100 Mb Half Duplex? */
1585 if (hw->autoneg_advertised & ADVERTISE_100_HALF) {
1586 e_dbg("Advertise 100mb Half duplex\n");
1587 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
1590 /* Do we want to advertise 100 Mb Full Duplex? */
1591 if (hw->autoneg_advertised & ADVERTISE_100_FULL) {
1592 e_dbg("Advertise 100mb Full duplex\n");
1593 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
1596 /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
1597 if (hw->autoneg_advertised & ADVERTISE_1000_HALF) {
1599 ("Advertise 1000mb Half duplex requested, request denied!\n");
1602 /* Do we want to advertise 1000 Mb Full Duplex? */
1603 if (hw->autoneg_advertised & ADVERTISE_1000_FULL) {
1604 e_dbg("Advertise 1000mb Full duplex\n");
1605 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
1608 /* Check for a software override of the flow control settings, and
1609 * setup the PHY advertisement registers accordingly. If
1610 * auto-negotiation is enabled, then software will have to set the
1611 * "PAUSE" bits to the correct value in the Auto-Negotiation
1612 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-negotiation.
1614 * The possible values of the "fc" parameter are:
1615 * 0: Flow control is completely disabled
1616 * 1: Rx flow control is enabled (we can receive pause frames
1617 * but not send pause frames).
1618 * 2: Tx flow control is enabled (we can send pause frames
1619 * but we do not support receiving pause frames).
1620 * 3: Both Rx and TX flow control (symmetric) are enabled.
1621 * other: No software override. The flow control configuration
1622 * in the EEPROM is used.
1625 case E1000_FC_NONE: /* 0 */
1626 /* Flow control (RX & TX) is completely disabled by a
1627 * software over-ride.
1629 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1631 case E1000_FC_RX_PAUSE: /* 1 */
1632 /* RX Flow control is enabled, and TX Flow control is
1633 * disabled, by a software over-ride.
1635 /* Since there really isn't a way to advertise that we are
1636 * capable of RX Pause ONLY, we will advertise that we
1637 * support both symmetric and asymmetric RX PAUSE. Later
1638 * (in e1000_config_fc_after_link_up) we will disable the
1639 *hw's ability to send PAUSE frames.
1641 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1643 case E1000_FC_TX_PAUSE: /* 2 */
1644 /* TX Flow control is enabled, and RX Flow control is
1645 * disabled, by a software over-ride.
1647 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
1648 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
1650 case E1000_FC_FULL: /* 3 */
1651 /* Flow control (both RX and TX) is enabled by a software
1654 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1657 e_dbg("Flow control param set incorrectly\n");
1658 return -E1000_ERR_CONFIG;
1661 ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
1665 e_dbg("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
1667 if (hw->phy_type == e1000_phy_8201) {
1668 mii_1000t_ctrl_reg = 0;
1670 ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL,
1671 mii_1000t_ctrl_reg);
1676 return E1000_SUCCESS;
1680 * e1000_phy_force_speed_duplex - force link settings
1681 * @hw: Struct containing variables accessed by shared code
1683 * Force PHY speed and duplex settings to hw->forced_speed_duplex
1685 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
1694 e_dbg("e1000_phy_force_speed_duplex");
1696 /* Turn off Flow control if we are forcing speed and duplex. */
1697 hw->fc = E1000_FC_NONE;
1699 e_dbg("hw->fc = %d\n", hw->fc);
1701 /* Read the Device Control Register. */
1704 /* Set the bits to Force Speed and Duplex in the Device Ctrl Reg. */
1705 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1706 ctrl &= ~(DEVICE_SPEED_MASK);
1708 /* Clear the Auto Speed Detect Enable bit. */
1709 ctrl &= ~E1000_CTRL_ASDE;
1711 /* Read the MII Control Register. */
1712 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg);
1716 /* We need to disable autoneg in order to force link and duplex. */
1718 mii_ctrl_reg &= ~MII_CR_AUTO_NEG_EN;
1720 /* Are we forcing Full or Half Duplex? */
1721 if (hw->forced_speed_duplex == e1000_100_full ||
1722 hw->forced_speed_duplex == e1000_10_full) {
1723 /* We want to force full duplex so we SET the full duplex bits in the
1724 * Device and MII Control Registers.
1726 ctrl |= E1000_CTRL_FD;
1727 mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
1728 e_dbg("Full Duplex\n");
1730 /* We want to force half duplex so we CLEAR the full duplex bits in
1731 * the Device and MII Control Registers.
1733 ctrl &= ~E1000_CTRL_FD;
1734 mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
1735 e_dbg("Half Duplex\n");
1738 /* Are we forcing 100Mbps??? */
1739 if (hw->forced_speed_duplex == e1000_100_full ||
1740 hw->forced_speed_duplex == e1000_100_half) {
1741 /* Set the 100Mb bit and turn off the 1000Mb and 10Mb bits. */
1742 ctrl |= E1000_CTRL_SPD_100;
1743 mii_ctrl_reg |= MII_CR_SPEED_100;
1744 mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
1745 e_dbg("Forcing 100mb ");
1747 /* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
1748 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1749 mii_ctrl_reg |= MII_CR_SPEED_10;
1750 mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
1751 e_dbg("Forcing 10mb ");
1754 e1000_config_collision_dist(hw);
1756 /* Write the configured values back to the Device Control Reg. */
1759 if (hw->phy_type == e1000_phy_m88) {
1761 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1765 /* Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
1766 * forced whenever speed are duplex are forced.
1768 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1770 e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1774 e_dbg("M88E1000 PSCR: %x\n", phy_data);
1776 /* Need to reset the PHY or these changes will be ignored */
1777 mii_ctrl_reg |= MII_CR_RESET;
1779 /* Disable MDI-X support for 10/100 */
1781 /* Clear Auto-Crossover to force MDI manually. IGP requires MDI
1782 * forced whenever speed or duplex are forced.
1785 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1789 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1790 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1793 e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1798 /* Write back the modified PHY MII control register. */
1799 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg);
1805 /* The wait_autoneg_complete flag may be a little misleading here.
1806 * Since we are forcing speed and duplex, Auto-Neg is not enabled.
1807 * But we do want to delay for a period while forcing only so we
1808 * don't generate false No Link messages. So we will wait here
1809 * only if the user has set wait_autoneg_complete to 1, which is
1812 if (hw->wait_autoneg_complete) {
1813 /* We will wait for autoneg to complete. */
1814 e_dbg("Waiting for forced speed/duplex link.\n");
1817 /* We will wait for autoneg to complete or 4.5 seconds to expire. */
1818 for (i = PHY_FORCE_TIME; i > 0; i--) {
1819 /* Read the MII Status Register and wait for Auto-Neg Complete bit
1823 e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
1828 e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
1832 if (mii_status_reg & MII_SR_LINK_STATUS)
1836 if ((i == 0) && (hw->phy_type == e1000_phy_m88)) {
1837 /* We didn't get link. Reset the DSP and wait again for link. */
1838 ret_val = e1000_phy_reset_dsp(hw);
1840 e_dbg("Error Resetting PHY DSP\n");
1844 /* This loop will early-out if the link condition has been met. */
1845 for (i = PHY_FORCE_TIME; i > 0; i--) {
1846 if (mii_status_reg & MII_SR_LINK_STATUS)
1849 /* Read the MII Status Register and wait for Auto-Neg Complete bit
1853 e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
1858 e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
1864 if (hw->phy_type == e1000_phy_m88) {
1865 /* Because we reset the PHY above, we need to re-force TX_CLK in the
1866 * Extended PHY Specific Control Register to 25MHz clock. This value
1867 * defaults back to a 2.5MHz clock when the PHY is reset.
1870 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
1875 phy_data |= M88E1000_EPSCR_TX_CLK_25;
1877 e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
1882 /* In addition, because of the s/w reset above, we need to enable CRS on
1883 * TX. This must be set for both full and half duplex operation.
1886 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1890 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1892 e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1896 if ((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543)
1898 && (hw->forced_speed_duplex == e1000_10_full
1899 || hw->forced_speed_duplex == e1000_10_half)) {
1900 ret_val = e1000_polarity_reversal_workaround(hw);
1905 return E1000_SUCCESS;
1909 * e1000_config_collision_dist - set collision distance register
1910 * @hw: Struct containing variables accessed by shared code
1912 * Sets the collision distance in the Transmit Control register.
1913 * Link should have been established previously. Reads the speed and duplex
1914 * information from the Device Status register.
1916 void e1000_config_collision_dist(struct e1000_hw *hw)
1918 u32 tctl, coll_dist;
1920 e_dbg("e1000_config_collision_dist");
1922 if (hw->mac_type < e1000_82543)
1923 coll_dist = E1000_COLLISION_DISTANCE_82542;
1925 coll_dist = E1000_COLLISION_DISTANCE;
1929 tctl &= ~E1000_TCTL_COLD;
1930 tctl |= coll_dist << E1000_COLD_SHIFT;
1933 E1000_WRITE_FLUSH();
1937 * e1000_config_mac_to_phy - sync phy and mac settings
1938 * @hw: Struct containing variables accessed by shared code
1939 * @mii_reg: data to write to the MII control register
1941 * Sets MAC speed and duplex settings to reflect the those in the PHY
1942 * The contents of the PHY register containing the needed information need to
1945 static s32 e1000_config_mac_to_phy(struct e1000_hw *hw)
1951 e_dbg("e1000_config_mac_to_phy");
1953 /* 82544 or newer MAC, Auto Speed Detection takes care of
1954 * MAC speed/duplex configuration.*/
1955 if ((hw->mac_type >= e1000_82544) && (hw->mac_type != e1000_ce4100))
1956 return E1000_SUCCESS;
1958 /* Read the Device Control Register and set the bits to Force Speed
1962 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1963 ctrl &= ~(E1000_CTRL_SPD_SEL | E1000_CTRL_ILOS);
1965 switch (hw->phy_type) {
1966 case e1000_phy_8201:
1967 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
1971 if (phy_data & RTL_PHY_CTRL_FD)
1972 ctrl |= E1000_CTRL_FD;
1974 ctrl &= ~E1000_CTRL_FD;
1976 if (phy_data & RTL_PHY_CTRL_SPD_100)
1977 ctrl |= E1000_CTRL_SPD_100;
1979 ctrl |= E1000_CTRL_SPD_10;
1981 e1000_config_collision_dist(hw);
1984 /* Set up duplex in the Device Control and Transmit Control
1985 * registers depending on negotiated values.
1987 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
1992 if (phy_data & M88E1000_PSSR_DPLX)
1993 ctrl |= E1000_CTRL_FD;
1995 ctrl &= ~E1000_CTRL_FD;
1997 e1000_config_collision_dist(hw);
1999 /* Set up speed in the Device Control register depending on
2000 * negotiated values.
2002 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS)
2003 ctrl |= E1000_CTRL_SPD_1000;
2004 else if ((phy_data & M88E1000_PSSR_SPEED) ==
2005 M88E1000_PSSR_100MBS)
2006 ctrl |= E1000_CTRL_SPD_100;
2009 /* Write the configured values back to the Device Control Reg. */
2011 return E1000_SUCCESS;
2015 * e1000_force_mac_fc - force flow control settings
2016 * @hw: Struct containing variables accessed by shared code
2018 * Forces the MAC's flow control settings.
2019 * Sets the TFCE and RFCE bits in the device control register to reflect
2020 * the adapter settings. TFCE and RFCE need to be explicitly set by
2021 * software when a Copper PHY is used because autonegotiation is managed
2022 * by the PHY rather than the MAC. Software must also configure these
2023 * bits when link is forced on a fiber connection.
2025 s32 e1000_force_mac_fc(struct e1000_hw *hw)
2029 e_dbg("e1000_force_mac_fc");
2031 /* Get the current configuration of the Device Control Register */
2034 /* Because we didn't get link via the internal auto-negotiation
2035 * mechanism (we either forced link or we got link via PHY
2036 * auto-neg), we have to manually enable/disable transmit an
2037 * receive flow control.
2039 * The "Case" statement below enables/disable flow control
2040 * according to the "hw->fc" parameter.
2042 * The possible values of the "fc" parameter are:
2043 * 0: Flow control is completely disabled
2044 * 1: Rx flow control is enabled (we can receive pause
2045 * frames but not send pause frames).
2046 * 2: Tx flow control is enabled (we can send pause frames
2047 * frames but we do not receive pause frames).
2048 * 3: Both Rx and TX flow control (symmetric) is enabled.
2049 * other: No other values should be possible at this point.
2054 ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
2056 case E1000_FC_RX_PAUSE:
2057 ctrl &= (~E1000_CTRL_TFCE);
2058 ctrl |= E1000_CTRL_RFCE;
2060 case E1000_FC_TX_PAUSE:
2061 ctrl &= (~E1000_CTRL_RFCE);
2062 ctrl |= E1000_CTRL_TFCE;
2065 ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
2068 e_dbg("Flow control param set incorrectly\n");
2069 return -E1000_ERR_CONFIG;
2072 /* Disable TX Flow Control for 82542 (rev 2.0) */
2073 if (hw->mac_type == e1000_82542_rev2_0)
2074 ctrl &= (~E1000_CTRL_TFCE);
2077 return E1000_SUCCESS;
2081 * e1000_config_fc_after_link_up - configure flow control after autoneg
2082 * @hw: Struct containing variables accessed by shared code
2084 * Configures flow control settings after link is established
2085 * Should be called immediately after a valid link has been established.
2086 * Forces MAC flow control settings if link was forced. When in MII/GMII mode
2087 * and autonegotiation is enabled, the MAC flow control settings will be set
2088 * based on the flow control negotiated by the PHY. In TBI mode, the TFCE
2089 * and RFCE bits will be automatically set to the negotiated flow control mode.
2091 static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw)
2095 u16 mii_nway_adv_reg;
2096 u16 mii_nway_lp_ability_reg;
2100 e_dbg("e1000_config_fc_after_link_up");
2102 /* Check for the case where we have fiber media and auto-neg failed
2103 * so we had to force link. In this case, we need to force the
2104 * configuration of the MAC to match the "fc" parameter.
2106 if (((hw->media_type == e1000_media_type_fiber) && (hw->autoneg_failed))
2107 || ((hw->media_type == e1000_media_type_internal_serdes)
2108 && (hw->autoneg_failed))
2109 || ((hw->media_type == e1000_media_type_copper)
2110 && (!hw->autoneg))) {
2111 ret_val = e1000_force_mac_fc(hw);
2113 e_dbg("Error forcing flow control settings\n");
2118 /* Check for the case where we have copper media and auto-neg is
2119 * enabled. In this case, we need to check and see if Auto-Neg
2120 * has completed, and if so, how the PHY and link partner has
2121 * flow control configured.
2123 if ((hw->media_type == e1000_media_type_copper) && hw->autoneg) {
2124 /* Read the MII Status Register and check to see if AutoNeg
2125 * has completed. We read this twice because this reg has
2126 * some "sticky" (latched) bits.
2128 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2131 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2135 if (mii_status_reg & MII_SR_AUTONEG_COMPLETE) {
2136 /* The AutoNeg process has completed, so we now need to
2137 * read both the Auto Negotiation Advertisement Register
2138 * (Address 4) and the Auto_Negotiation Base Page Ability
2139 * Register (Address 5) to determine how flow control was
2142 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV,
2146 ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY,
2147 &mii_nway_lp_ability_reg);
2151 /* Two bits in the Auto Negotiation Advertisement Register
2152 * (Address 4) and two bits in the Auto Negotiation Base
2153 * Page Ability Register (Address 5) determine flow control
2154 * for both the PHY and the link partner. The following
2155 * table, taken out of the IEEE 802.3ab/D6.0 dated March 25,
2156 * 1999, describes these PAUSE resolution bits and how flow
2157 * control is determined based upon these settings.
2158 * NOTE: DC = Don't Care
2160 * LOCAL DEVICE | LINK PARTNER
2161 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
2162 *-------|---------|-------|---------|--------------------
2163 * 0 | 0 | DC | DC | E1000_FC_NONE
2164 * 0 | 1 | 0 | DC | E1000_FC_NONE
2165 * 0 | 1 | 1 | 0 | E1000_FC_NONE
2166 * 0 | 1 | 1 | 1 | E1000_FC_TX_PAUSE
2167 * 1 | 0 | 0 | DC | E1000_FC_NONE
2168 * 1 | DC | 1 | DC | E1000_FC_FULL
2169 * 1 | 1 | 0 | 0 | E1000_FC_NONE
2170 * 1 | 1 | 0 | 1 | E1000_FC_RX_PAUSE
2173 /* Are both PAUSE bits set to 1? If so, this implies
2174 * Symmetric Flow Control is enabled at both ends. The
2175 * ASM_DIR bits are irrelevant per the spec.
2177 * For Symmetric Flow Control:
2179 * LOCAL DEVICE | LINK PARTNER
2180 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2181 *-------|---------|-------|---------|--------------------
2182 * 1 | DC | 1 | DC | E1000_FC_FULL
2185 if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2186 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
2187 /* Now we need to check if the user selected RX ONLY
2188 * of pause frames. In this case, we had to advertise
2189 * FULL flow control because we could not advertise RX
2190 * ONLY. Hence, we must now check to see if we need to
2191 * turn OFF the TRANSMISSION of PAUSE frames.
2193 if (hw->original_fc == E1000_FC_FULL) {
2194 hw->fc = E1000_FC_FULL;
2195 e_dbg("Flow Control = FULL.\n");
2197 hw->fc = E1000_FC_RX_PAUSE;
2199 ("Flow Control = RX PAUSE frames only.\n");
2202 /* For receiving PAUSE frames ONLY.
2204 * LOCAL DEVICE | LINK PARTNER
2205 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2206 *-------|---------|-------|---------|--------------------
2207 * 0 | 1 | 1 | 1 | E1000_FC_TX_PAUSE
2210 else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2211 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2212 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2213 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR))
2215 hw->fc = E1000_FC_TX_PAUSE;
2217 ("Flow Control = TX PAUSE frames only.\n");
2219 /* For transmitting PAUSE frames ONLY.
2221 * LOCAL DEVICE | LINK PARTNER
2222 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2223 *-------|---------|-------|---------|--------------------
2224 * 1 | 1 | 0 | 1 | E1000_FC_RX_PAUSE
2227 else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2228 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2229 !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2230 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR))
2232 hw->fc = E1000_FC_RX_PAUSE;
2234 ("Flow Control = RX PAUSE frames only.\n");
2236 /* Per the IEEE spec, at this point flow control should be
2237 * disabled. However, we want to consider that we could
2238 * be connected to a legacy switch that doesn't advertise
2239 * desired flow control, but can be forced on the link
2240 * partner. So if we advertised no flow control, that is
2241 * what we will resolve to. If we advertised some kind of
2242 * receive capability (Rx Pause Only or Full Flow Control)
2243 * and the link partner advertised none, we will configure
2244 * ourselves to enable Rx Flow Control only. We can do
2245 * this safely for two reasons: If the link partner really
2246 * didn't want flow control enabled, and we enable Rx, no
2247 * harm done since we won't be receiving any PAUSE frames
2248 * anyway. If the intent on the link partner was to have
2249 * flow control enabled, then by us enabling RX only, we
2250 * can at least receive pause frames and process them.
2251 * This is a good idea because in most cases, since we are
2252 * predominantly a server NIC, more times than not we will
2253 * be asked to delay transmission of packets than asking
2254 * our link partner to pause transmission of frames.
2256 else if ((hw->original_fc == E1000_FC_NONE ||
2257 hw->original_fc == E1000_FC_TX_PAUSE) ||
2258 hw->fc_strict_ieee) {
2259 hw->fc = E1000_FC_NONE;
2260 e_dbg("Flow Control = NONE.\n");
2262 hw->fc = E1000_FC_RX_PAUSE;
2264 ("Flow Control = RX PAUSE frames only.\n");
2267 /* Now we need to do one last check... If we auto-
2268 * negotiated to HALF DUPLEX, flow control should not be
2269 * enabled per IEEE 802.3 spec.
2272 e1000_get_speed_and_duplex(hw, &speed, &duplex);
2275 ("Error getting link speed and duplex\n");
2279 if (duplex == HALF_DUPLEX)
2280 hw->fc = E1000_FC_NONE;
2282 /* Now we call a subroutine to actually force the MAC
2283 * controller to use the correct flow control settings.
2285 ret_val = e1000_force_mac_fc(hw);
2288 ("Error forcing flow control settings\n");
2293 ("Copper PHY and Auto Neg has not completed.\n");
2296 return E1000_SUCCESS;
2300 * e1000_check_for_serdes_link_generic - Check for link (Serdes)
2301 * @hw: pointer to the HW structure
2303 * Checks for link up on the hardware. If link is not up and we have
2304 * a signal, then we need to force link up.
2306 static s32 e1000_check_for_serdes_link_generic(struct e1000_hw *hw)
2311 s32 ret_val = E1000_SUCCESS;
2313 e_dbg("e1000_check_for_serdes_link_generic");
2316 status = er32(STATUS);
2320 * If we don't have link (auto-negotiation failed or link partner
2321 * cannot auto-negotiate), and our link partner is not trying to
2322 * auto-negotiate with us (we are receiving idles or data),
2323 * we need to force link up. We also need to give auto-negotiation
2326 /* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */
2327 if ((!(status & E1000_STATUS_LU)) && (!(rxcw & E1000_RXCW_C))) {
2328 if (hw->autoneg_failed == 0) {
2329 hw->autoneg_failed = 1;
2332 e_dbg("NOT RXing /C/, disable AutoNeg and force link.\n");
2334 /* Disable auto-negotiation in the TXCW register */
2335 ew32(TXCW, (hw->txcw & ~E1000_TXCW_ANE));
2337 /* Force link-up and also force full-duplex. */
2339 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
2342 /* Configure Flow Control after forcing link up. */
2343 ret_val = e1000_config_fc_after_link_up(hw);
2345 e_dbg("Error configuring flow control\n");
2348 } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
2350 * If we are forcing link and we are receiving /C/ ordered
2351 * sets, re-enable auto-negotiation in the TXCW register
2352 * and disable forced link in the Device Control register
2353 * in an attempt to auto-negotiate with our link partner.
2355 e_dbg("RXing /C/, enable AutoNeg and stop forcing link.\n");
2356 ew32(TXCW, hw->txcw);
2357 ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
2359 hw->serdes_has_link = true;
2360 } else if (!(E1000_TXCW_ANE & er32(TXCW))) {
2362 * If we force link for non-auto-negotiation switch, check
2363 * link status based on MAC synchronization for internal
2364 * serdes media type.
2366 /* SYNCH bit and IV bit are sticky. */
2369 if (rxcw & E1000_RXCW_SYNCH) {
2370 if (!(rxcw & E1000_RXCW_IV)) {
2371 hw->serdes_has_link = true;
2372 e_dbg("SERDES: Link up - forced.\n");
2375 hw->serdes_has_link = false;
2376 e_dbg("SERDES: Link down - force failed.\n");
2380 if (E1000_TXCW_ANE & er32(TXCW)) {
2381 status = er32(STATUS);
2382 if (status & E1000_STATUS_LU) {
2383 /* SYNCH bit and IV bit are sticky, so reread rxcw. */
2386 if (rxcw & E1000_RXCW_SYNCH) {
2387 if (!(rxcw & E1000_RXCW_IV)) {
2388 hw->serdes_has_link = true;
2389 e_dbg("SERDES: Link up - autoneg "
2390 "completed successfully.\n");
2392 hw->serdes_has_link = false;
2393 e_dbg("SERDES: Link down - invalid"
2394 "codewords detected in autoneg.\n");
2397 hw->serdes_has_link = false;
2398 e_dbg("SERDES: Link down - no sync.\n");
2401 hw->serdes_has_link = false;
2402 e_dbg("SERDES: Link down - autoneg failed\n");
2411 * e1000_check_for_link
2412 * @hw: Struct containing variables accessed by shared code
2414 * Checks to see if the link status of the hardware has changed.
2415 * Called by any function that needs to check the link status of the adapter.
2417 s32 e1000_check_for_link(struct e1000_hw *hw)
2428 e_dbg("e1000_check_for_link");
2431 status = er32(STATUS);
2433 /* On adapters with a MAC newer than 82544, SW Definable pin 1 will be
2434 * set when the optics detect a signal. On older adapters, it will be
2435 * cleared when there is a signal. This applies to fiber media only.
2437 if ((hw->media_type == e1000_media_type_fiber) ||
2438 (hw->media_type == e1000_media_type_internal_serdes)) {
2441 if (hw->media_type == e1000_media_type_fiber) {
2444 e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
2445 if (status & E1000_STATUS_LU)
2446 hw->get_link_status = false;
2450 /* If we have a copper PHY then we only want to go out to the PHY
2451 * registers to see if Auto-Neg has completed and/or if our link
2452 * status has changed. The get_link_status flag will be set if we
2453 * receive a Link Status Change interrupt or we have Rx Sequence
2456 if ((hw->media_type == e1000_media_type_copper) && hw->get_link_status) {
2457 /* First we want to see if the MII Status Register reports
2458 * link. If so, then we want to get the current speed/duplex
2460 * Read the register twice since the link bit is sticky.
2462 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2465 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2469 if (phy_data & MII_SR_LINK_STATUS) {
2470 hw->get_link_status = false;
2471 /* Check if there was DownShift, must be checked immediately after
2473 e1000_check_downshift(hw);
2475 /* If we are on 82544 or 82543 silicon and speed/duplex
2476 * are forced to 10H or 10F, then we will implement the polarity
2477 * reversal workaround. We disable interrupts first, and upon
2478 * returning, place the devices interrupt state to its previous
2479 * value except for the link status change interrupt which will
2480 * happen due to the execution of this workaround.
2483 if ((hw->mac_type == e1000_82544
2484 || hw->mac_type == e1000_82543) && (!hw->autoneg)
2485 && (hw->forced_speed_duplex == e1000_10_full
2486 || hw->forced_speed_duplex == e1000_10_half)) {
2487 ew32(IMC, 0xffffffff);
2489 e1000_polarity_reversal_workaround(hw);
2491 ew32(ICS, (icr & ~E1000_ICS_LSC));
2492 ew32(IMS, IMS_ENABLE_MASK);
2496 /* No link detected */
2497 e1000_config_dsp_after_link_change(hw, false);
2501 /* If we are forcing speed/duplex, then we simply return since
2502 * we have already determined whether we have link or not.
2505 return -E1000_ERR_CONFIG;
2507 /* optimize the dsp settings for the igp phy */
2508 e1000_config_dsp_after_link_change(hw, true);
2510 /* We have a M88E1000 PHY and Auto-Neg is enabled. If we
2511 * have Si on board that is 82544 or newer, Auto
2512 * Speed Detection takes care of MAC speed/duplex
2513 * configuration. So we only need to configure Collision
2514 * Distance in the MAC. Otherwise, we need to force
2515 * speed/duplex on the MAC to the current PHY speed/duplex
2518 if ((hw->mac_type >= e1000_82544) &&
2519 (hw->mac_type != e1000_ce4100))
2520 e1000_config_collision_dist(hw);
2522 ret_val = e1000_config_mac_to_phy(hw);
2525 ("Error configuring MAC to PHY settings\n");
2530 /* Configure Flow Control now that Auto-Neg has completed. First, we
2531 * need to restore the desired flow control settings because we may
2532 * have had to re-autoneg with a different link partner.
2534 ret_val = e1000_config_fc_after_link_up(hw);
2536 e_dbg("Error configuring flow control\n");
2540 /* At this point we know that we are on copper and we have
2541 * auto-negotiated link. These are conditions for checking the link
2542 * partner capability register. We use the link speed to determine if
2543 * TBI compatibility needs to be turned on or off. If the link is not
2544 * at gigabit speed, then TBI compatibility is not needed. If we are
2545 * at gigabit speed, we turn on TBI compatibility.
2547 if (hw->tbi_compatibility_en) {
2550 e1000_get_speed_and_duplex(hw, &speed, &duplex);
2553 ("Error getting link speed and duplex\n");
2556 if (speed != SPEED_1000) {
2557 /* If link speed is not set to gigabit speed, we do not need
2558 * to enable TBI compatibility.
2560 if (hw->tbi_compatibility_on) {
2561 /* If we previously were in the mode, turn it off. */
2563 rctl &= ~E1000_RCTL_SBP;
2565 hw->tbi_compatibility_on = false;
2568 /* If TBI compatibility is was previously off, turn it on. For
2569 * compatibility with a TBI link partner, we will store bad
2570 * packets. Some frames have an additional byte on the end and
2571 * will look like CRC errors to to the hardware.
2573 if (!hw->tbi_compatibility_on) {
2574 hw->tbi_compatibility_on = true;
2576 rctl |= E1000_RCTL_SBP;
2583 if ((hw->media_type == e1000_media_type_fiber) ||
2584 (hw->media_type == e1000_media_type_internal_serdes))
2585 e1000_check_for_serdes_link_generic(hw);
2587 return E1000_SUCCESS;
2591 * e1000_get_speed_and_duplex
2592 * @hw: Struct containing variables accessed by shared code
2593 * @speed: Speed of the connection
2594 * @duplex: Duplex setting of the connection
2596 * Detects the current speed and duplex settings of the hardware.
2598 s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
2604 e_dbg("e1000_get_speed_and_duplex");
2606 if (hw->mac_type >= e1000_82543) {
2607 status = er32(STATUS);
2608 if (status & E1000_STATUS_SPEED_1000) {
2609 *speed = SPEED_1000;
2610 e_dbg("1000 Mbs, ");
2611 } else if (status & E1000_STATUS_SPEED_100) {
2619 if (status & E1000_STATUS_FD) {
2620 *duplex = FULL_DUPLEX;
2621 e_dbg("Full Duplex\n");
2623 *duplex = HALF_DUPLEX;
2624 e_dbg(" Half Duplex\n");
2627 e_dbg("1000 Mbs, Full Duplex\n");
2628 *speed = SPEED_1000;
2629 *duplex = FULL_DUPLEX;
2632 /* IGP01 PHY may advertise full duplex operation after speed downgrade even
2633 * if it is operating at half duplex. Here we set the duplex settings to
2634 * match the duplex in the link partner's capabilities.
2636 if (hw->phy_type == e1000_phy_igp && hw->speed_downgraded) {
2637 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data);
2641 if (!(phy_data & NWAY_ER_LP_NWAY_CAPS))
2642 *duplex = HALF_DUPLEX;
2645 e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data);
2648 if ((*speed == SPEED_100
2649 && !(phy_data & NWAY_LPAR_100TX_FD_CAPS))
2650 || (*speed == SPEED_10
2651 && !(phy_data & NWAY_LPAR_10T_FD_CAPS)))
2652 *duplex = HALF_DUPLEX;
2656 return E1000_SUCCESS;
2660 * e1000_wait_autoneg
2661 * @hw: Struct containing variables accessed by shared code
2663 * Blocks until autoneg completes or times out (~4.5 seconds)
2665 static s32 e1000_wait_autoneg(struct e1000_hw *hw)
2671 e_dbg("e1000_wait_autoneg");
2672 e_dbg("Waiting for Auto-Neg to complete.\n");
2674 /* We will wait for autoneg to complete or 4.5 seconds to expire. */
2675 for (i = PHY_AUTO_NEG_TIME; i > 0; i--) {
2676 /* Read the MII Status Register and wait for Auto-Neg
2677 * Complete bit to be set.
2679 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2682 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2685 if (phy_data & MII_SR_AUTONEG_COMPLETE) {
2686 return E1000_SUCCESS;
2690 return E1000_SUCCESS;
2694 * e1000_raise_mdi_clk - Raises the Management Data Clock
2695 * @hw: Struct containing variables accessed by shared code
2696 * @ctrl: Device control register's current value
2698 static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
2700 /* Raise the clock input to the Management Data Clock (by setting the MDC
2701 * bit), and then delay 10 microseconds.
2703 ew32(CTRL, (*ctrl | E1000_CTRL_MDC));
2704 E1000_WRITE_FLUSH();
2709 * e1000_lower_mdi_clk - Lowers the Management Data Clock
2710 * @hw: Struct containing variables accessed by shared code
2711 * @ctrl: Device control register's current value
2713 static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
2715 /* Lower the clock input to the Management Data Clock (by clearing the MDC
2716 * bit), and then delay 10 microseconds.
2718 ew32(CTRL, (*ctrl & ~E1000_CTRL_MDC));
2719 E1000_WRITE_FLUSH();
2724 * e1000_shift_out_mdi_bits - Shifts data bits out to the PHY
2725 * @hw: Struct containing variables accessed by shared code
2726 * @data: Data to send out to the PHY
2727 * @count: Number of bits to shift out
2729 * Bits are shifted out in MSB to LSB order.
2731 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data, u16 count)
2736 /* We need to shift "count" number of bits out to the PHY. So, the value
2737 * in the "data" parameter will be shifted out to the PHY one bit at a
2738 * time. In order to do this, "data" must be broken down into bits.
2741 mask <<= (count - 1);
2745 /* Set MDIO_DIR and MDC_DIR direction bits to be used as output pins. */
2746 ctrl |= (E1000_CTRL_MDIO_DIR | E1000_CTRL_MDC_DIR);
2749 /* A "1" is shifted out to the PHY by setting the MDIO bit to "1" and
2750 * then raising and lowering the Management Data Clock. A "0" is
2751 * shifted out to the PHY by setting the MDIO bit to "0" and then
2752 * raising and lowering the clock.
2755 ctrl |= E1000_CTRL_MDIO;
2757 ctrl &= ~E1000_CTRL_MDIO;
2760 E1000_WRITE_FLUSH();
2764 e1000_raise_mdi_clk(hw, &ctrl);
2765 e1000_lower_mdi_clk(hw, &ctrl);
2772 * e1000_shift_in_mdi_bits - Shifts data bits in from the PHY
2773 * @hw: Struct containing variables accessed by shared code
2775 * Bits are shifted in in MSB to LSB order.
2777 static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw)
2783 /* In order to read a register from the PHY, we need to shift in a total
2784 * of 18 bits from the PHY. The first two bit (turnaround) times are used
2785 * to avoid contention on the MDIO pin when a read operation is performed.
2786 * These two bits are ignored by us and thrown away. Bits are "shifted in"
2787 * by raising the input to the Management Data Clock (setting the MDC bit),
2788 * and then reading the value of the MDIO bit.
2792 /* Clear MDIO_DIR (SWDPIO1) to indicate this bit is to be used as input. */
2793 ctrl &= ~E1000_CTRL_MDIO_DIR;
2794 ctrl &= ~E1000_CTRL_MDIO;
2797 E1000_WRITE_FLUSH();
2799 /* Raise and Lower the clock before reading in the data. This accounts for
2800 * the turnaround bits. The first clock occurred when we clocked out the
2801 * last bit of the Register Address.
2803 e1000_raise_mdi_clk(hw, &ctrl);
2804 e1000_lower_mdi_clk(hw, &ctrl);
2806 for (data = 0, i = 0; i < 16; i++) {
2808 e1000_raise_mdi_clk(hw, &ctrl);
2810 /* Check to see if we shifted in a "1". */
2811 if (ctrl & E1000_CTRL_MDIO)
2813 e1000_lower_mdi_clk(hw, &ctrl);
2816 e1000_raise_mdi_clk(hw, &ctrl);
2817 e1000_lower_mdi_clk(hw, &ctrl);
2824 * e1000_read_phy_reg - read a phy register
2825 * @hw: Struct containing variables accessed by shared code
2826 * @reg_addr: address of the PHY register to read
2828 * Reads the value from a PHY register, if the value is on a specific non zero
2829 * page, sets the page first.
2831 s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 *phy_data)
2834 unsigned long flags;
2836 e_dbg("e1000_read_phy_reg");
2838 spin_lock_irqsave(&e1000_phy_lock, flags);
2840 if ((hw->phy_type == e1000_phy_igp) &&
2841 (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
2842 ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
2845 spin_unlock_irqrestore(&e1000_phy_lock, flags);
2850 ret_val = e1000_read_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
2852 spin_unlock_irqrestore(&e1000_phy_lock, flags);
2857 static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
2862 const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
2864 e_dbg("e1000_read_phy_reg_ex");
2866 if (reg_addr > MAX_PHY_REG_ADDRESS) {
2867 e_dbg("PHY Address %d is out of range\n", reg_addr);
2868 return -E1000_ERR_PARAM;
2871 if (hw->mac_type > e1000_82543) {
2872 /* Set up Op-code, Phy Address, and register address in the MDI
2873 * Control register. The MAC will take care of interfacing with the
2874 * PHY to retrieve the desired data.
2876 if (hw->mac_type == e1000_ce4100) {
2877 mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
2878 (phy_addr << E1000_MDIC_PHY_SHIFT) |
2879 (INTEL_CE_GBE_MDIC_OP_READ) |
2880 (INTEL_CE_GBE_MDIC_GO));
2882 writel(mdic, E1000_MDIO_CMD);
2884 /* Poll the ready bit to see if the MDI read
2887 for (i = 0; i < 64; i++) {
2889 mdic = readl(E1000_MDIO_CMD);
2890 if (!(mdic & INTEL_CE_GBE_MDIC_GO))
2894 if (mdic & INTEL_CE_GBE_MDIC_GO) {
2895 e_dbg("MDI Read did not complete\n");
2896 return -E1000_ERR_PHY;
2899 mdic = readl(E1000_MDIO_STS);
2900 if (mdic & INTEL_CE_GBE_MDIC_READ_ERROR) {
2901 e_dbg("MDI Read Error\n");
2902 return -E1000_ERR_PHY;
2904 *phy_data = (u16) mdic;
2906 mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
2907 (phy_addr << E1000_MDIC_PHY_SHIFT) |
2908 (E1000_MDIC_OP_READ));
2912 /* Poll the ready bit to see if the MDI read
2915 for (i = 0; i < 64; i++) {
2918 if (mdic & E1000_MDIC_READY)
2921 if (!(mdic & E1000_MDIC_READY)) {
2922 e_dbg("MDI Read did not complete\n");
2923 return -E1000_ERR_PHY;
2925 if (mdic & E1000_MDIC_ERROR) {
2926 e_dbg("MDI Error\n");
2927 return -E1000_ERR_PHY;
2929 *phy_data = (u16) mdic;
2932 /* We must first send a preamble through the MDIO pin to signal the
2933 * beginning of an MII instruction. This is done by sending 32
2934 * consecutive "1" bits.
2936 e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
2938 /* Now combine the next few fields that are required for a read
2939 * operation. We use this method instead of calling the
2940 * e1000_shift_out_mdi_bits routine five different times. The format of
2941 * a MII read instruction consists of a shift out of 14 bits and is
2942 * defined as follows:
2943 * <Preamble><SOF><Op Code><Phy Addr><Reg Addr>
2944 * followed by a shift in of 18 bits. This first two bits shifted in
2945 * are TurnAround bits used to avoid contention on the MDIO pin when a
2946 * READ operation is performed. These two bits are thrown away
2947 * followed by a shift in of 16 bits which contains the desired data.
2949 mdic = ((reg_addr) | (phy_addr << 5) |
2950 (PHY_OP_READ << 10) | (PHY_SOF << 12));
2952 e1000_shift_out_mdi_bits(hw, mdic, 14);
2954 /* Now that we've shifted out the read command to the MII, we need to
2955 * "shift in" the 16-bit value (18 total bits) of the requested PHY
2958 *phy_data = e1000_shift_in_mdi_bits(hw);
2960 return E1000_SUCCESS;
2964 * e1000_write_phy_reg - write a phy register
2966 * @hw: Struct containing variables accessed by shared code
2967 * @reg_addr: address of the PHY register to write
2968 * @data: data to write to the PHY
2970 * Writes a value to a PHY register
2972 s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 phy_data)
2975 unsigned long flags;
2977 e_dbg("e1000_write_phy_reg");
2979 spin_lock_irqsave(&e1000_phy_lock, flags);
2981 if ((hw->phy_type == e1000_phy_igp) &&
2982 (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
2983 ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
2986 spin_unlock_irqrestore(&e1000_phy_lock, flags);
2991 ret_val = e1000_write_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
2993 spin_unlock_irqrestore(&e1000_phy_lock, flags);
2998 static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
3003 const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
3005 e_dbg("e1000_write_phy_reg_ex");
3007 if (reg_addr > MAX_PHY_REG_ADDRESS) {
3008 e_dbg("PHY Address %d is out of range\n", reg_addr);
3009 return -E1000_ERR_PARAM;
3012 if (hw->mac_type > e1000_82543) {
3013 /* Set up Op-code, Phy Address, register address, and data
3014 * intended for the PHY register in the MDI Control register.
3015 * The MAC will take care of interfacing with the PHY to send
3018 if (hw->mac_type == e1000_ce4100) {
3019 mdic = (((u32) phy_data) |
3020 (reg_addr << E1000_MDIC_REG_SHIFT) |
3021 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3022 (INTEL_CE_GBE_MDIC_OP_WRITE) |
3023 (INTEL_CE_GBE_MDIC_GO));
3025 writel(mdic, E1000_MDIO_CMD);
3027 /* Poll the ready bit to see if the MDI read
3030 for (i = 0; i < 640; i++) {
3032 mdic = readl(E1000_MDIO_CMD);
3033 if (!(mdic & INTEL_CE_GBE_MDIC_GO))
3036 if (mdic & INTEL_CE_GBE_MDIC_GO) {
3037 e_dbg("MDI Write did not complete\n");
3038 return -E1000_ERR_PHY;
3041 mdic = (((u32) phy_data) |
3042 (reg_addr << E1000_MDIC_REG_SHIFT) |
3043 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3044 (E1000_MDIC_OP_WRITE));
3048 /* Poll the ready bit to see if the MDI read
3051 for (i = 0; i < 641; i++) {
3054 if (mdic & E1000_MDIC_READY)
3057 if (!(mdic & E1000_MDIC_READY)) {
3058 e_dbg("MDI Write did not complete\n");
3059 return -E1000_ERR_PHY;
3063 /* We'll need to use the SW defined pins to shift the write command
3064 * out to the PHY. We first send a preamble to the PHY to signal the
3065 * beginning of the MII instruction. This is done by sending 32
3066 * consecutive "1" bits.
3068 e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
3070 /* Now combine the remaining required fields that will indicate a
3071 * write operation. We use this method instead of calling the
3072 * e1000_shift_out_mdi_bits routine for each field in the command. The
3073 * format of a MII write instruction is as follows:
3074 * <Preamble><SOF><Op Code><Phy Addr><Reg Addr><Turnaround><Data>.
3076 mdic = ((PHY_TURNAROUND) | (reg_addr << 2) | (phy_addr << 7) |
3077 (PHY_OP_WRITE << 12) | (PHY_SOF << 14));
3079 mdic |= (u32) phy_data;
3081 e1000_shift_out_mdi_bits(hw, mdic, 32);
3084 return E1000_SUCCESS;
3088 * e1000_phy_hw_reset - reset the phy, hardware style
3089 * @hw: Struct containing variables accessed by shared code
3091 * Returns the PHY to the power-on reset state
3093 s32 e1000_phy_hw_reset(struct e1000_hw *hw)
3098 e_dbg("e1000_phy_hw_reset");
3100 e_dbg("Resetting Phy...\n");
3102 if (hw->mac_type > e1000_82543) {
3103 /* Read the device control register and assert the E1000_CTRL_PHY_RST
3104 * bit. Then, take it out of reset.
3105 * For e1000 hardware, we delay for 10ms between the assert
3109 ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
3110 E1000_WRITE_FLUSH();
3115 E1000_WRITE_FLUSH();
3118 /* Read the Extended Device Control Register, assert the PHY_RESET_DIR
3119 * bit to put the PHY into reset. Then, take it out of reset.
3121 ctrl_ext = er32(CTRL_EXT);
3122 ctrl_ext |= E1000_CTRL_EXT_SDP4_DIR;
3123 ctrl_ext &= ~E1000_CTRL_EXT_SDP4_DATA;
3124 ew32(CTRL_EXT, ctrl_ext);
3125 E1000_WRITE_FLUSH();
3127 ctrl_ext |= E1000_CTRL_EXT_SDP4_DATA;
3128 ew32(CTRL_EXT, ctrl_ext);
3129 E1000_WRITE_FLUSH();
3133 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
3134 /* Configure activity LED after PHY reset */
3135 led_ctrl = er32(LEDCTL);
3136 led_ctrl &= IGP_ACTIVITY_LED_MASK;
3137 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
3138 ew32(LEDCTL, led_ctrl);
3141 /* Wait for FW to finish PHY configuration. */
3142 return e1000_get_phy_cfg_done(hw);
3146 * e1000_phy_reset - reset the phy to commit settings
3147 * @hw: Struct containing variables accessed by shared code
3150 * Sets bit 15 of the MII Control register
3152 s32 e1000_phy_reset(struct e1000_hw *hw)
3157 e_dbg("e1000_phy_reset");
3159 switch (hw->phy_type) {
3161 ret_val = e1000_phy_hw_reset(hw);
3166 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
3170 phy_data |= MII_CR_RESET;
3171 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
3179 if (hw->phy_type == e1000_phy_igp)
3180 e1000_phy_init_script(hw);
3182 return E1000_SUCCESS;
3186 * e1000_detect_gig_phy - check the phy type
3187 * @hw: Struct containing variables accessed by shared code
3189 * Probes the expected PHY address for known PHY IDs
3191 static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
3193 s32 phy_init_status, ret_val;
3194 u16 phy_id_high, phy_id_low;
3197 e_dbg("e1000_detect_gig_phy");
3199 if (hw->phy_id != 0)
3200 return E1000_SUCCESS;
3202 /* Read the PHY ID Registers to identify which PHY is onboard. */
3203 ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high);
3207 hw->phy_id = (u32) (phy_id_high << 16);
3209 ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low);
3213 hw->phy_id |= (u32) (phy_id_low & PHY_REVISION_MASK);
3214 hw->phy_revision = (u32) phy_id_low & ~PHY_REVISION_MASK;
3216 switch (hw->mac_type) {
3218 if (hw->phy_id == M88E1000_E_PHY_ID)
3222 if (hw->phy_id == M88E1000_I_PHY_ID)
3227 case e1000_82545_rev_3:
3229 case e1000_82546_rev_3:
3230 if (hw->phy_id == M88E1011_I_PHY_ID)
3234 if ((hw->phy_id == RTL8211B_PHY_ID) ||
3235 (hw->phy_id == RTL8201N_PHY_ID) ||
3236 (hw->phy_id == M88E1118_E_PHY_ID))
3240 case e1000_82541_rev_2:
3242 case e1000_82547_rev_2:
3243 if (hw->phy_id == IGP01E1000_I_PHY_ID)
3247 e_dbg("Invalid MAC type %d\n", hw->mac_type);
3248 return -E1000_ERR_CONFIG;
3250 phy_init_status = e1000_set_phy_type(hw);
3252 if ((match) && (phy_init_status == E1000_SUCCESS)) {
3253 e_dbg("PHY ID 0x%X detected\n", hw->phy_id);
3254 return E1000_SUCCESS;
3256 e_dbg("Invalid PHY ID 0x%X\n", hw->phy_id);
3257 return -E1000_ERR_PHY;
3261 * e1000_phy_reset_dsp - reset DSP
3262 * @hw: Struct containing variables accessed by shared code
3264 * Resets the PHY's DSP
3266 static s32 e1000_phy_reset_dsp(struct e1000_hw *hw)
3269 e_dbg("e1000_phy_reset_dsp");
3272 ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
3275 ret_val = e1000_write_phy_reg(hw, 30, 0x00c1);
3278 ret_val = e1000_write_phy_reg(hw, 30, 0x0000);
3281 ret_val = E1000_SUCCESS;
3288 * e1000_phy_igp_get_info - get igp specific registers
3289 * @hw: Struct containing variables accessed by shared code
3290 * @phy_info: PHY information structure
3292 * Get PHY information from various PHY registers for igp PHY only.
3294 static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
3295 struct e1000_phy_info *phy_info)
3298 u16 phy_data, min_length, max_length, average;
3299 e1000_rev_polarity polarity;
3301 e_dbg("e1000_phy_igp_get_info");
3303 /* The downshift status is checked only once, after link is established,
3304 * and it stored in the hw->speed_downgraded parameter. */
3305 phy_info->downshift = (e1000_downshift) hw->speed_downgraded;
3307 /* IGP01E1000 does not need to support it. */
3308 phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
3310 /* IGP01E1000 always correct polarity reversal */
3311 phy_info->polarity_correction = e1000_polarity_reversal_enabled;
3313 /* Check polarity status */
3314 ret_val = e1000_check_polarity(hw, &polarity);
3318 phy_info->cable_polarity = polarity;
3320 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data);
3324 phy_info->mdix_mode =
3325 (e1000_auto_x_mode) ((phy_data & IGP01E1000_PSSR_MDIX) >>
3326 IGP01E1000_PSSR_MDIX_SHIFT);
3328 if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
3329 IGP01E1000_PSSR_SPEED_1000MBPS) {
3330 /* Local/Remote Receiver Information are only valid at 1000 Mbps */
3331 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
3335 phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
3336 SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
3337 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
3338 phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
3339 SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
3340 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
3342 /* Get cable length */
3343 ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
3347 /* Translate to old method */
3348 average = (max_length + min_length) / 2;
3350 if (average <= e1000_igp_cable_length_50)
3351 phy_info->cable_length = e1000_cable_length_50;
3352 else if (average <= e1000_igp_cable_length_80)
3353 phy_info->cable_length = e1000_cable_length_50_80;
3354 else if (average <= e1000_igp_cable_length_110)
3355 phy_info->cable_length = e1000_cable_length_80_110;
3356 else if (average <= e1000_igp_cable_length_140)
3357 phy_info->cable_length = e1000_cable_length_110_140;
3359 phy_info->cable_length = e1000_cable_length_140;
3362 return E1000_SUCCESS;
3366 * e1000_phy_m88_get_info - get m88 specific registers
3367 * @hw: Struct containing variables accessed by shared code
3368 * @phy_info: PHY information structure
3370 * Get PHY information from various PHY registers for m88 PHY only.
3372 static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
3373 struct e1000_phy_info *phy_info)
3377 e1000_rev_polarity polarity;
3379 e_dbg("e1000_phy_m88_get_info");
3381 /* The downshift status is checked only once, after link is established,
3382 * and it stored in the hw->speed_downgraded parameter. */
3383 phy_info->downshift = (e1000_downshift) hw->speed_downgraded;
3385 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
3389 phy_info->extended_10bt_distance =
3390 ((phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >>
3391 M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT) ?
3392 e1000_10bt_ext_dist_enable_lower :
3393 e1000_10bt_ext_dist_enable_normal;
3395 phy_info->polarity_correction =
3396 ((phy_data & M88E1000_PSCR_POLARITY_REVERSAL) >>
3397 M88E1000_PSCR_POLARITY_REVERSAL_SHIFT) ?
3398 e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
3400 /* Check polarity status */
3401 ret_val = e1000_check_polarity(hw, &polarity);
3404 phy_info->cable_polarity = polarity;
3406 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
3410 phy_info->mdix_mode =
3411 (e1000_auto_x_mode) ((phy_data & M88E1000_PSSR_MDIX) >>
3412 M88E1000_PSSR_MDIX_SHIFT);
3414 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
3415 /* Cable Length Estimation and Local/Remote Receiver Information
3416 * are only valid at 1000 Mbps.
3418 phy_info->cable_length =
3419 (e1000_cable_length) ((phy_data &
3420 M88E1000_PSSR_CABLE_LENGTH) >>
3421 M88E1000_PSSR_CABLE_LENGTH_SHIFT);
3423 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
3427 phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
3428 SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
3429 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
3430 phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
3431 SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
3432 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
3436 return E1000_SUCCESS;
3440 * e1000_phy_get_info - request phy info
3441 * @hw: Struct containing variables accessed by shared code
3442 * @phy_info: PHY information structure
3444 * Get PHY information from various PHY registers
3446 s32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info)
3451 e_dbg("e1000_phy_get_info");
3453 phy_info->cable_length = e1000_cable_length_undefined;
3454 phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
3455 phy_info->cable_polarity = e1000_rev_polarity_undefined;
3456 phy_info->downshift = e1000_downshift_undefined;
3457 phy_info->polarity_correction = e1000_polarity_reversal_undefined;
3458 phy_info->mdix_mode = e1000_auto_x_mode_undefined;
3459 phy_info->local_rx = e1000_1000t_rx_status_undefined;
3460 phy_info->remote_rx = e1000_1000t_rx_status_undefined;
3462 if (hw->media_type != e1000_media_type_copper) {
3463 e_dbg("PHY info is only valid for copper media\n");
3464 return -E1000_ERR_CONFIG;
3467 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3471 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3475 if ((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
3476 e_dbg("PHY info is only valid if link is up\n");
3477 return -E1000_ERR_CONFIG;
3480 if (hw->phy_type == e1000_phy_igp)
3481 return e1000_phy_igp_get_info(hw, phy_info);
3482 else if ((hw->phy_type == e1000_phy_8211) ||
3483 (hw->phy_type == e1000_phy_8201))
3484 return E1000_SUCCESS;
3486 return e1000_phy_m88_get_info(hw, phy_info);
3489 s32 e1000_validate_mdi_setting(struct e1000_hw *hw)
3491 e_dbg("e1000_validate_mdi_settings");
3493 if (!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
3494 e_dbg("Invalid MDI setting detected\n");
3496 return -E1000_ERR_CONFIG;
3498 return E1000_SUCCESS;
3502 * e1000_init_eeprom_params - initialize sw eeprom vars
3503 * @hw: Struct containing variables accessed by shared code
3505 * Sets up eeprom variables in the hw struct. Must be called after mac_type
3508 s32 e1000_init_eeprom_params(struct e1000_hw *hw)
3510 struct e1000_eeprom_info *eeprom = &hw->eeprom;
3511 u32 eecd = er32(EECD);
3512 s32 ret_val = E1000_SUCCESS;
3515 e_dbg("e1000_init_eeprom_params");
3517 switch (hw->mac_type) {
3518 case e1000_82542_rev2_0:
3519 case e1000_82542_rev2_1:
3522 eeprom->type = e1000_eeprom_microwire;
3523 eeprom->word_size = 64;
3524 eeprom->opcode_bits = 3;
3525 eeprom->address_bits = 6;
3526 eeprom->delay_usec = 50;
3530 case e1000_82545_rev_3:
3532 case e1000_82546_rev_3:
3533 eeprom->type = e1000_eeprom_microwire;
3534 eeprom->opcode_bits = 3;
3535 eeprom->delay_usec = 50;
3536 if (eecd & E1000_EECD_SIZE) {
3537 eeprom->word_size = 256;
3538 eeprom->address_bits = 8;
3540 eeprom->word_size = 64;
3541 eeprom->address_bits = 6;
3545 case e1000_82541_rev_2:
3547 case e1000_82547_rev_2:
3548 if (eecd & E1000_EECD_TYPE) {
3549 eeprom->type = e1000_eeprom_spi;
3550 eeprom->opcode_bits = 8;
3551 eeprom->delay_usec = 1;
3552 if (eecd & E1000_EECD_ADDR_BITS) {
3553 eeprom->page_size = 32;
3554 eeprom->address_bits = 16;
3556 eeprom->page_size = 8;
3557 eeprom->address_bits = 8;
3560 eeprom->type = e1000_eeprom_microwire;
3561 eeprom->opcode_bits = 3;
3562 eeprom->delay_usec = 50;
3563 if (eecd & E1000_EECD_ADDR_BITS) {
3564 eeprom->word_size = 256;
3565 eeprom->address_bits = 8;
3567 eeprom->word_size = 64;
3568 eeprom->address_bits = 6;
3576 if (eeprom->type == e1000_eeprom_spi) {
3577 /* eeprom_size will be an enum [0..8] that maps to eeprom sizes 128B to
3578 * 32KB (incremented by powers of 2).
3580 /* Set to default value for initial eeprom read. */
3581 eeprom->word_size = 64;
3582 ret_val = e1000_read_eeprom(hw, EEPROM_CFG, 1, &eeprom_size);
3586 (eeprom_size & EEPROM_SIZE_MASK) >> EEPROM_SIZE_SHIFT;
3587 /* 256B eeprom size was not supported in earlier hardware, so we
3588 * bump eeprom_size up one to ensure that "1" (which maps to 256B)
3589 * is never the result used in the shifting logic below. */
3593 eeprom->word_size = 1 << (eeprom_size + EEPROM_WORD_SIZE_SHIFT);
3599 * e1000_raise_ee_clk - Raises the EEPROM's clock input.
3600 * @hw: Struct containing variables accessed by shared code
3601 * @eecd: EECD's current value
3603 static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd)
3605 /* Raise the clock input to the EEPROM (by setting the SK bit), and then
3606 * wait <delay> microseconds.
3608 *eecd = *eecd | E1000_EECD_SK;
3610 E1000_WRITE_FLUSH();
3611 udelay(hw->eeprom.delay_usec);
3615 * e1000_lower_ee_clk - Lowers the EEPROM's clock input.
3616 * @hw: Struct containing variables accessed by shared code
3617 * @eecd: EECD's current value
3619 static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd)
3621 /* Lower the clock input to the EEPROM (by clearing the SK bit), and then
3622 * wait 50 microseconds.
3624 *eecd = *eecd & ~E1000_EECD_SK;
3626 E1000_WRITE_FLUSH();
3627 udelay(hw->eeprom.delay_usec);
3631 * e1000_shift_out_ee_bits - Shift data bits out to the EEPROM.
3632 * @hw: Struct containing variables accessed by shared code
3633 * @data: data to send to the EEPROM
3634 * @count: number of bits to shift out
3636 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count)
3638 struct e1000_eeprom_info *eeprom = &hw->eeprom;
3642 /* We need to shift "count" bits out to the EEPROM. So, value in the
3643 * "data" parameter will be shifted out to the EEPROM one bit at a time.
3644 * In order to do this, "data" must be broken down into bits.
3646 mask = 0x01 << (count - 1);
3648 if (eeprom->type == e1000_eeprom_microwire) {
3649 eecd &= ~E1000_EECD_DO;
3650 } else if (eeprom->type == e1000_eeprom_spi) {
3651 eecd |= E1000_EECD_DO;
3654 /* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",
3655 * and then raising and then lowering the clock (the SK bit controls
3656 * the clock input to the EEPROM). A "0" is shifted out to the EEPROM
3657 * by setting "DI" to "0" and then raising and then lowering the clock.
3659 eecd &= ~E1000_EECD_DI;
3662 eecd |= E1000_EECD_DI;
3665 E1000_WRITE_FLUSH();
3667 udelay(eeprom->delay_usec);
3669 e1000_raise_ee_clk(hw, &eecd);
3670 e1000_lower_ee_clk(hw, &eecd);
3676 /* We leave the "DI" bit set to "0" when we leave this routine. */
3677 eecd &= ~E1000_EECD_DI;
3682 * e1000_shift_in_ee_bits - Shift data bits in from the EEPROM
3683 * @hw: Struct containing variables accessed by shared code
3684 * @count: number of bits to shift in
3686 static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count)
3692 /* In order to read a register from the EEPROM, we need to shift 'count'
3693 * bits in from the EEPROM. Bits are "shifted in" by raising the clock
3694 * input to the EEPROM (setting the SK bit), and then reading the value of
3695 * the "DO" bit. During this "shifting in" process the "DI" bit should
3701 eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
3704 for (i = 0; i < count; i++) {
3706 e1000_raise_ee_clk(hw, &eecd);
3710 eecd &= ~(E1000_EECD_DI);
3711 if (eecd & E1000_EECD_DO)
3714 e1000_lower_ee_clk(hw, &eecd);
3721 * e1000_acquire_eeprom - Prepares EEPROM for access
3722 * @hw: Struct containing variables accessed by shared code
3724 * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
3725 * function should be called before issuing a command to the EEPROM.
3727 static s32 e1000_acquire_eeprom(struct e1000_hw *hw)
3729 struct e1000_eeprom_info *eeprom = &hw->eeprom;
3732 e_dbg("e1000_acquire_eeprom");
3736 /* Request EEPROM Access */
3737 if (hw->mac_type > e1000_82544) {
3738 eecd |= E1000_EECD_REQ;
3741 while ((!(eecd & E1000_EECD_GNT)) &&
3742 (i < E1000_EEPROM_GRANT_ATTEMPTS)) {
3747 if (!(eecd & E1000_EECD_GNT)) {
3748 eecd &= ~E1000_EECD_REQ;
3750 e_dbg("Could not acquire EEPROM grant\n");
3751 return -E1000_ERR_EEPROM;
3755 /* Setup EEPROM for Read/Write */
3757 if (eeprom->type == e1000_eeprom_microwire) {
3758 /* Clear SK and DI */
3759 eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
3763 eecd |= E1000_EECD_CS;
3765 } else if (eeprom->type == e1000_eeprom_spi) {
3766 /* Clear SK and CS */
3767 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
3769 E1000_WRITE_FLUSH();
3773 return E1000_SUCCESS;
3777 * e1000_standby_eeprom - Returns EEPROM to a "standby" state
3778 * @hw: Struct containing variables accessed by shared code
3780 static void e1000_standby_eeprom(struct e1000_hw *hw)
3782 struct e1000_eeprom_info *eeprom = &hw->eeprom;
3787 if (eeprom->type == e1000_eeprom_microwire) {
3788 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
3790 E1000_WRITE_FLUSH();
3791 udelay(eeprom->delay_usec);
3794 eecd |= E1000_EECD_SK;
3796 E1000_WRITE_FLUSH();
3797 udelay(eeprom->delay_usec);
3800 eecd |= E1000_EECD_CS;
3802 E1000_WRITE_FLUSH();
3803 udelay(eeprom->delay_usec);
3806 eecd &= ~E1000_EECD_SK;
3808 E1000_WRITE_FLUSH();
3809 udelay(eeprom->delay_usec);
3810 } else if (eeprom->type == e1000_eeprom_spi) {
3811 /* Toggle CS to flush commands */
3812 eecd |= E1000_EECD_CS;
3814 E1000_WRITE_FLUSH();
3815 udelay(eeprom->delay_usec);
3816 eecd &= ~E1000_EECD_CS;
3818 E1000_WRITE_FLUSH();
3819 udelay(eeprom->delay_usec);
3824 * e1000_release_eeprom - drop chip select
3825 * @hw: Struct containing variables accessed by shared code
3827 * Terminates a command by inverting the EEPROM's chip select pin
3829 static void e1000_release_eeprom(struct e1000_hw *hw)
3833 e_dbg("e1000_release_eeprom");
3837 if (hw->eeprom.type == e1000_eeprom_spi) {
3838 eecd |= E1000_EECD_CS; /* Pull CS high */
3839 eecd &= ~E1000_EECD_SK; /* Lower SCK */
3842 E1000_WRITE_FLUSH();
3844 udelay(hw->eeprom.delay_usec);
3845 } else if (hw->eeprom.type == e1000_eeprom_microwire) {
3846 /* cleanup eeprom */
3848 /* CS on Microwire is active-high */
3849 eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
3853 /* Rising edge of clock */
3854 eecd |= E1000_EECD_SK;
3856 E1000_WRITE_FLUSH();
3857 udelay(hw->eeprom.delay_usec);
3859 /* Falling edge of clock */
3860 eecd &= ~E1000_EECD_SK;
3862 E1000_WRITE_FLUSH();
3863 udelay(hw->eeprom.delay_usec);
3866 /* Stop requesting EEPROM access */
3867 if (hw->mac_type > e1000_82544) {
3868 eecd &= ~E1000_EECD_REQ;
3874 * e1000_spi_eeprom_ready - Reads a 16 bit word from the EEPROM.
3875 * @hw: Struct containing variables accessed by shared code
3877 static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw)
3879 u16 retry_count = 0;
3882 e_dbg("e1000_spi_eeprom_ready");
3884 /* Read "Status Register" repeatedly until the LSB is cleared. The
3885 * EEPROM will signal that the command has been completed by clearing
3886 * bit 0 of the internal status register. If it's not cleared within
3887 * 5 milliseconds, then error out.
3891 e1000_shift_out_ee_bits(hw, EEPROM_RDSR_OPCODE_SPI,
3892 hw->eeprom.opcode_bits);
3893 spi_stat_reg = (u8) e1000_shift_in_ee_bits(hw, 8);
3894 if (!(spi_stat_reg & EEPROM_STATUS_RDY_SPI))
3900 e1000_standby_eeprom(hw);
3901 } while (retry_count < EEPROM_MAX_RETRY_SPI);
3903 /* ATMEL SPI write time could vary from 0-20mSec on 3.3V devices (and
3904 * only 0-5mSec on 5V devices)
3906 if (retry_count >= EEPROM_MAX_RETRY_SPI) {
3907 e_dbg("SPI EEPROM Status error\n");
3908 return -E1000_ERR_EEPROM;
3911 return E1000_SUCCESS;
3915 * e1000_read_eeprom - Reads a 16 bit word from the EEPROM.
3916 * @hw: Struct containing variables accessed by shared code
3917 * @offset: offset of word in the EEPROM to read
3918 * @data: word read from the EEPROM
3919 * @words: number of words to read
3921 s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
3924 spin_lock(&e1000_eeprom_lock);
3925 ret = e1000_do_read_eeprom(hw, offset, words, data);
3926 spin_unlock(&e1000_eeprom_lock);
3930 static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
3933 struct e1000_eeprom_info *eeprom = &hw->eeprom;
3936 e_dbg("e1000_read_eeprom");
3938 if (hw->mac_type == e1000_ce4100) {
3939 GBE_CONFIG_FLASH_READ(GBE_CONFIG_BASE_VIRT, offset, words,
3941 return E1000_SUCCESS;
3944 /* If eeprom is not yet detected, do so now */
3945 if (eeprom->word_size == 0)
3946 e1000_init_eeprom_params(hw);
3948 /* A check for invalid values: offset too large, too many words, and not
3951 if ((offset >= eeprom->word_size)
3952 || (words > eeprom->word_size - offset) || (words == 0)) {
3953 e_dbg("\"words\" parameter out of bounds. Words = %d,"
3954 "size = %d\n", offset, eeprom->word_size);
3955 return -E1000_ERR_EEPROM;
3958 /* EEPROM's that don't use EERD to read require us to bit-bang the SPI
3959 * directly. In this case, we need to acquire the EEPROM so that
3960 * FW or other port software does not interrupt.
3962 /* Prepare the EEPROM for bit-bang reading */
3963 if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
3964 return -E1000_ERR_EEPROM;
3966 /* Set up the SPI or Microwire EEPROM for bit-bang reading. We have
3967 * acquired the EEPROM at this point, so any returns should release it */
3968 if (eeprom->type == e1000_eeprom_spi) {
3970 u8 read_opcode = EEPROM_READ_OPCODE_SPI;
3972 if (e1000_spi_eeprom_ready(hw)) {
3973 e1000_release_eeprom(hw);
3974 return -E1000_ERR_EEPROM;
3977 e1000_standby_eeprom(hw);
3979 /* Some SPI eeproms use the 8th address bit embedded in the opcode */
3980 if ((eeprom->address_bits == 8) && (offset >= 128))
3981 read_opcode |= EEPROM_A8_OPCODE_SPI;
3983 /* Send the READ command (opcode + addr) */
3984 e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits);
3985 e1000_shift_out_ee_bits(hw, (u16) (offset * 2),
3986 eeprom->address_bits);
3988 /* Read the data. The address of the eeprom internally increments with
3989 * each byte (spi) being read, saving on the overhead of eeprom setup
3990 * and tear-down. The address counter will roll over if reading beyond
3991 * the size of the eeprom, thus allowing the entire memory to be read
3992 * starting from any offset. */
3993 for (i = 0; i < words; i++) {
3994 word_in = e1000_shift_in_ee_bits(hw, 16);
3995 data[i] = (word_in >> 8) | (word_in << 8);
3997 } else if (eeprom->type == e1000_eeprom_microwire) {
3998 for (i = 0; i < words; i++) {
3999 /* Send the READ command (opcode + addr) */
4000 e1000_shift_out_ee_bits(hw,
4001 EEPROM_READ_OPCODE_MICROWIRE,
4002 eeprom->opcode_bits);
4003 e1000_shift_out_ee_bits(hw, (u16) (offset + i),
4004 eeprom->address_bits);
4006 /* Read the data. For microwire, each word requires the overhead
4007 * of eeprom setup and tear-down. */
4008 data[i] = e1000_shift_in_ee_bits(hw, 16);
4009 e1000_standby_eeprom(hw);
4013 /* End this read operation */
4014 e1000_release_eeprom(hw);
4016 return E1000_SUCCESS;
4020 * e1000_validate_eeprom_checksum - Verifies that the EEPROM has a valid checksum
4021 * @hw: Struct containing variables accessed by shared code
4023 * Reads the first 64 16 bit words of the EEPROM and sums the values read.
4024 * If the the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
4027 s32 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
4032 e_dbg("e1000_validate_eeprom_checksum");
4034 for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
4035 if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
4036 e_dbg("EEPROM Read Error\n");
4037 return -E1000_ERR_EEPROM;
4039 checksum += eeprom_data;
4042 #ifdef CONFIG_PARISC
4043 /* This is a signature and not a checksum on HP c8000 */
4044 if ((hw->subsystem_vendor_id == 0x103C) && (eeprom_data == 0x16d6))
4045 return E1000_SUCCESS;
4048 if (checksum == (u16) EEPROM_SUM)
4049 return E1000_SUCCESS;
4051 e_dbg("EEPROM Checksum Invalid\n");
4052 return -E1000_ERR_EEPROM;
4057 * e1000_update_eeprom_checksum - Calculates/writes the EEPROM checksum
4058 * @hw: Struct containing variables accessed by shared code
4060 * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
4061 * Writes the difference to word offset 63 of the EEPROM.
4063 s32 e1000_update_eeprom_checksum(struct e1000_hw *hw)
4068 e_dbg("e1000_update_eeprom_checksum");
4070 for (i = 0; i < EEPROM_CHECKSUM_REG; i++) {
4071 if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
4072 e_dbg("EEPROM Read Error\n");
4073 return -E1000_ERR_EEPROM;
4075 checksum += eeprom_data;
4077 checksum = (u16) EEPROM_SUM - checksum;
4078 if (e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
4079 e_dbg("EEPROM Write Error\n");
4080 return -E1000_ERR_EEPROM;
4082 return E1000_SUCCESS;
4086 * e1000_write_eeprom - write words to the different EEPROM types.
4087 * @hw: Struct containing variables accessed by shared code
4088 * @offset: offset within the EEPROM to be written to
4089 * @words: number of words to write
4090 * @data: 16 bit word to be written to the EEPROM
4092 * If e1000_update_eeprom_checksum is not called after this function, the
4093 * EEPROM will most likely contain an invalid checksum.
4095 s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
4098 spin_lock(&e1000_eeprom_lock);
4099 ret = e1000_do_write_eeprom(hw, offset, words, data);
4100 spin_unlock(&e1000_eeprom_lock);
4104 static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
4107 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4110 e_dbg("e1000_write_eeprom");
4112 if (hw->mac_type == e1000_ce4100) {
4113 GBE_CONFIG_FLASH_WRITE(GBE_CONFIG_BASE_VIRT, offset, words,
4115 return E1000_SUCCESS;
4118 /* If eeprom is not yet detected, do so now */
4119 if (eeprom->word_size == 0)
4120 e1000_init_eeprom_params(hw);
4122 /* A check for invalid values: offset too large, too many words, and not
4125 if ((offset >= eeprom->word_size)
4126 || (words > eeprom->word_size - offset) || (words == 0)) {
4127 e_dbg("\"words\" parameter out of bounds\n");
4128 return -E1000_ERR_EEPROM;
4131 /* Prepare the EEPROM for writing */
4132 if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
4133 return -E1000_ERR_EEPROM;
4135 if (eeprom->type == e1000_eeprom_microwire) {
4136 status = e1000_write_eeprom_microwire(hw, offset, words, data);
4138 status = e1000_write_eeprom_spi(hw, offset, words, data);
4142 /* Done with writing */
4143 e1000_release_eeprom(hw);
4149 * e1000_write_eeprom_spi - Writes a 16 bit word to a given offset in an SPI EEPROM.
4150 * @hw: Struct containing variables accessed by shared code
4151 * @offset: offset within the EEPROM to be written to
4152 * @words: number of words to write
4153 * @data: pointer to array of 8 bit words to be written to the EEPROM
4155 static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset, u16 words,
4158 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4161 e_dbg("e1000_write_eeprom_spi");
4163 while (widx < words) {
4164 u8 write_opcode = EEPROM_WRITE_OPCODE_SPI;
4166 if (e1000_spi_eeprom_ready(hw))
4167 return -E1000_ERR_EEPROM;
4169 e1000_standby_eeprom(hw);
4171 /* Send the WRITE ENABLE command (8 bit opcode ) */
4172 e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
4173 eeprom->opcode_bits);
4175 e1000_standby_eeprom(hw);
4177 /* Some SPI eeproms use the 8th address bit embedded in the opcode */
4178 if ((eeprom->address_bits == 8) && (offset >= 128))
4179 write_opcode |= EEPROM_A8_OPCODE_SPI;
4181 /* Send the Write command (8-bit opcode + addr) */
4182 e1000_shift_out_ee_bits(hw, write_opcode, eeprom->opcode_bits);
4184 e1000_shift_out_ee_bits(hw, (u16) ((offset + widx) * 2),
4185 eeprom->address_bits);
4189 /* Loop to allow for up to whole page write (32 bytes) of eeprom */
4190 while (widx < words) {
4191 u16 word_out = data[widx];
4192 word_out = (word_out >> 8) | (word_out << 8);
4193 e1000_shift_out_ee_bits(hw, word_out, 16);
4196 /* Some larger eeprom sizes are capable of a 32-byte PAGE WRITE
4197 * operation, while the smaller eeproms are capable of an 8-byte
4198 * PAGE WRITE operation. Break the inner loop to pass new address
4200 if ((((offset + widx) * 2) % eeprom->page_size) == 0) {
4201 e1000_standby_eeprom(hw);
4207 return E1000_SUCCESS;
4211 * e1000_write_eeprom_microwire - Writes a 16 bit word to a given offset in a Microwire EEPROM.
4212 * @hw: Struct containing variables accessed by shared code
4213 * @offset: offset within the EEPROM to be written to
4214 * @words: number of words to write
4215 * @data: pointer to array of 8 bit words to be written to the EEPROM
4217 static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
4218 u16 words, u16 *data)
4220 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4222 u16 words_written = 0;
4225 e_dbg("e1000_write_eeprom_microwire");
4227 /* Send the write enable command to the EEPROM (3-bit opcode plus
4228 * 6/8-bit dummy address beginning with 11). It's less work to include
4229 * the 11 of the dummy address as part of the opcode than it is to shift
4230 * it over the correct number of bits for the address. This puts the
4231 * EEPROM into write/erase mode.
4233 e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE_MICROWIRE,
4234 (u16) (eeprom->opcode_bits + 2));
4236 e1000_shift_out_ee_bits(hw, 0, (u16) (eeprom->address_bits - 2));
4238 /* Prepare the EEPROM */
4239 e1000_standby_eeprom(hw);
4241 while (words_written < words) {
4242 /* Send the Write command (3-bit opcode + addr) */
4243 e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE_MICROWIRE,
4244 eeprom->opcode_bits);
4246 e1000_shift_out_ee_bits(hw, (u16) (offset + words_written),
4247 eeprom->address_bits);
4250 e1000_shift_out_ee_bits(hw, data[words_written], 16);
4252 /* Toggle the CS line. This in effect tells the EEPROM to execute
4253 * the previous command.
4255 e1000_standby_eeprom(hw);
4257 /* Read DO repeatedly until it is high (equal to '1'). The EEPROM will
4258 * signal that the command has been completed by raising the DO signal.
4259 * If DO does not go high in 10 milliseconds, then error out.
4261 for (i = 0; i < 200; i++) {
4263 if (eecd & E1000_EECD_DO)
4268 e_dbg("EEPROM Write did not complete\n");
4269 return -E1000_ERR_EEPROM;
4272 /* Recover from write */
4273 e1000_standby_eeprom(hw);
4278 /* Send the write disable command to the EEPROM (3-bit opcode plus
4279 * 6/8-bit dummy address beginning with 10). It's less work to include
4280 * the 10 of the dummy address as part of the opcode than it is to shift
4281 * it over the correct number of bits for the address. This takes the
4282 * EEPROM out of write/erase mode.
4284 e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE_MICROWIRE,
4285 (u16) (eeprom->opcode_bits + 2));
4287 e1000_shift_out_ee_bits(hw, 0, (u16) (eeprom->address_bits - 2));
4289 return E1000_SUCCESS;
4293 * e1000_read_mac_addr - read the adapters MAC from eeprom
4294 * @hw: Struct containing variables accessed by shared code
4296 * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
4297 * second function of dual function devices
4299 s32 e1000_read_mac_addr(struct e1000_hw *hw)
4304 e_dbg("e1000_read_mac_addr");
4306 for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
4308 if (e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
4309 e_dbg("EEPROM Read Error\n");
4310 return -E1000_ERR_EEPROM;
4312 hw->perm_mac_addr[i] = (u8) (eeprom_data & 0x00FF);
4313 hw->perm_mac_addr[i + 1] = (u8) (eeprom_data >> 8);
4316 switch (hw->mac_type) {
4320 case e1000_82546_rev_3:
4321 if (er32(STATUS) & E1000_STATUS_FUNC_1)
4322 hw->perm_mac_addr[5] ^= 0x01;
4326 for (i = 0; i < NODE_ADDRESS_SIZE; i++)
4327 hw->mac_addr[i] = hw->perm_mac_addr[i];
4328 return E1000_SUCCESS;
4332 * e1000_init_rx_addrs - Initializes receive address filters.
4333 * @hw: Struct containing variables accessed by shared code
4335 * Places the MAC address in receive address register 0 and clears the rest
4336 * of the receive address registers. Clears the multicast table. Assumes
4337 * the receiver is in reset when the routine is called.
4339 static void e1000_init_rx_addrs(struct e1000_hw *hw)
4344 e_dbg("e1000_init_rx_addrs");
4346 /* Setup the receive address. */
4347 e_dbg("Programming MAC Address into RAR[0]\n");
4349 e1000_rar_set(hw, hw->mac_addr, 0);
4351 rar_num = E1000_RAR_ENTRIES;
4353 /* Zero out the other 15 receive addresses. */
4354 e_dbg("Clearing RAR[1-15]\n");
4355 for (i = 1; i < rar_num; i++) {
4356 E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
4357 E1000_WRITE_FLUSH();
4358 E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
4359 E1000_WRITE_FLUSH();
4364 * e1000_hash_mc_addr - Hashes an address to determine its location in the multicast table
4365 * @hw: Struct containing variables accessed by shared code
4366 * @mc_addr: the multicast address to hash
4368 u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
4372 /* The portion of the address that is used for the hash table is
4373 * determined by the mc_filter_type setting.
4375 switch (hw->mc_filter_type) {
4376 /* [0] [1] [2] [3] [4] [5]
4381 /* [47:36] i.e. 0x563 for above example address */
4382 hash_value = ((mc_addr[4] >> 4) | (((u16) mc_addr[5]) << 4));
4385 /* [46:35] i.e. 0xAC6 for above example address */
4386 hash_value = ((mc_addr[4] >> 3) | (((u16) mc_addr[5]) << 5));
4389 /* [45:34] i.e. 0x5D8 for above example address */
4390 hash_value = ((mc_addr[4] >> 2) | (((u16) mc_addr[5]) << 6));
4393 /* [43:32] i.e. 0x634 for above example address */
4394 hash_value = ((mc_addr[4]) | (((u16) mc_addr[5]) << 8));
4398 hash_value &= 0xFFF;
4403 * e1000_rar_set - Puts an ethernet address into a receive address register.
4404 * @hw: Struct containing variables accessed by shared code
4405 * @addr: Address to put into receive address register
4406 * @index: Receive address register to write
4408 void e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
4410 u32 rar_low, rar_high;
4412 /* HW expects these in little endian so we reverse the byte order
4413 * from network order (big endian) to little endian
4415 rar_low = ((u32) addr[0] | ((u32) addr[1] << 8) |
4416 ((u32) addr[2] << 16) | ((u32) addr[3] << 24));
4417 rar_high = ((u32) addr[4] | ((u32) addr[5] << 8));
4419 /* Disable Rx and flush all Rx frames before enabling RSS to avoid Rx
4423 * If there are any Rx frames queued up or otherwise present in the HW
4424 * before RSS is enabled, and then we enable RSS, the HW Rx unit will
4425 * hang. To work around this issue, we have to disable receives and
4426 * flush out all Rx frames before we enable RSS. To do so, we modify we
4427 * redirect all Rx traffic to manageability and then reset the HW.
4428 * This flushes away Rx frames, and (since the redirections to
4429 * manageability persists across resets) keeps new ones from coming in
4430 * while we work. Then, we clear the Address Valid AV bit for all MAC
4431 * addresses and undo the re-direction to manageability.
4432 * Now, frames are coming in again, but the MAC won't accept them, so
4433 * far so good. We now proceed to initialize RSS (if necessary) and
4434 * configure the Rx unit. Last, we re-enable the AV bits and continue
4437 switch (hw->mac_type) {
4439 /* Indicate to hardware the Address is Valid. */
4440 rar_high |= E1000_RAH_AV;
4444 E1000_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
4445 E1000_WRITE_FLUSH();
4446 E1000_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
4447 E1000_WRITE_FLUSH();
4451 * e1000_write_vfta - Writes a value to the specified offset in the VLAN filter table.
4452 * @hw: Struct containing variables accessed by shared code
4453 * @offset: Offset in VLAN filer table to write
4454 * @value: Value to write into VLAN filter table
4456 void e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
4460 if ((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
4461 temp = E1000_READ_REG_ARRAY(hw, VFTA, (offset - 1));
4462 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
4463 E1000_WRITE_FLUSH();
4464 E1000_WRITE_REG_ARRAY(hw, VFTA, (offset - 1), temp);
4465 E1000_WRITE_FLUSH();
4467 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
4468 E1000_WRITE_FLUSH();
4473 * e1000_clear_vfta - Clears the VLAN filer table
4474 * @hw: Struct containing variables accessed by shared code
4476 static void e1000_clear_vfta(struct e1000_hw *hw)
4480 u32 vfta_offset = 0;
4481 u32 vfta_bit_in_reg = 0;
4483 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
4484 /* If the offset we want to clear is the same offset of the
4485 * manageability VLAN ID, then clear all bits except that of the
4486 * manageability unit */
4487 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
4488 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, vfta_value);
4489 E1000_WRITE_FLUSH();
4493 static s32 e1000_id_led_init(struct e1000_hw *hw)
4496 const u32 ledctl_mask = 0x000000FF;
4497 const u32 ledctl_on = E1000_LEDCTL_MODE_LED_ON;
4498 const u32 ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
4499 u16 eeprom_data, i, temp;
4500 const u16 led_mask = 0x0F;
4502 e_dbg("e1000_id_led_init");
4504 if (hw->mac_type < e1000_82540) {
4506 return E1000_SUCCESS;
4509 ledctl = er32(LEDCTL);
4510 hw->ledctl_default = ledctl;
4511 hw->ledctl_mode1 = hw->ledctl_default;
4512 hw->ledctl_mode2 = hw->ledctl_default;
4514 if (e1000_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
4515 e_dbg("EEPROM Read Error\n");
4516 return -E1000_ERR_EEPROM;
4519 if ((eeprom_data == ID_LED_RESERVED_0000) ||
4520 (eeprom_data == ID_LED_RESERVED_FFFF)) {
4521 eeprom_data = ID_LED_DEFAULT;
4524 for (i = 0; i < 4; i++) {
4525 temp = (eeprom_data >> (i << 2)) & led_mask;
4527 case ID_LED_ON1_DEF2:
4528 case ID_LED_ON1_ON2:
4529 case ID_LED_ON1_OFF2:
4530 hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
4531 hw->ledctl_mode1 |= ledctl_on << (i << 3);
4533 case ID_LED_OFF1_DEF2:
4534 case ID_LED_OFF1_ON2:
4535 case ID_LED_OFF1_OFF2:
4536 hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
4537 hw->ledctl_mode1 |= ledctl_off << (i << 3);
4544 case ID_LED_DEF1_ON2:
4545 case ID_LED_ON1_ON2:
4546 case ID_LED_OFF1_ON2:
4547 hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
4548 hw->ledctl_mode2 |= ledctl_on << (i << 3);
4550 case ID_LED_DEF1_OFF2:
4551 case ID_LED_ON1_OFF2:
4552 case ID_LED_OFF1_OFF2:
4553 hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
4554 hw->ledctl_mode2 |= ledctl_off << (i << 3);
4561 return E1000_SUCCESS;
4566 * @hw: Struct containing variables accessed by shared code
4568 * Prepares SW controlable LED for use and saves the current state of the LED.
4570 s32 e1000_setup_led(struct e1000_hw *hw)
4573 s32 ret_val = E1000_SUCCESS;
4575 e_dbg("e1000_setup_led");
4577 switch (hw->mac_type) {
4578 case e1000_82542_rev2_0:
4579 case e1000_82542_rev2_1:
4582 /* No setup necessary */
4586 case e1000_82541_rev_2:
4587 case e1000_82547_rev_2:
4588 /* Turn off PHY Smart Power Down (if enabled) */
4589 ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO,
4590 &hw->phy_spd_default);
4593 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
4594 (u16) (hw->phy_spd_default &
4595 ~IGP01E1000_GMII_SPD));
4600 if (hw->media_type == e1000_media_type_fiber) {
4601 ledctl = er32(LEDCTL);
4602 /* Save current LEDCTL settings */
4603 hw->ledctl_default = ledctl;
4605 ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
4606 E1000_LEDCTL_LED0_BLINK |
4607 E1000_LEDCTL_LED0_MODE_MASK);
4608 ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
4609 E1000_LEDCTL_LED0_MODE_SHIFT);
4610 ew32(LEDCTL, ledctl);
4611 } else if (hw->media_type == e1000_media_type_copper)
4612 ew32(LEDCTL, hw->ledctl_mode1);
4616 return E1000_SUCCESS;
4620 * e1000_cleanup_led - Restores the saved state of the SW controlable LED.
4621 * @hw: Struct containing variables accessed by shared code
4623 s32 e1000_cleanup_led(struct e1000_hw *hw)
4625 s32 ret_val = E1000_SUCCESS;
4627 e_dbg("e1000_cleanup_led");
4629 switch (hw->mac_type) {
4630 case e1000_82542_rev2_0:
4631 case e1000_82542_rev2_1:
4634 /* No cleanup necessary */
4638 case e1000_82541_rev_2:
4639 case e1000_82547_rev_2:
4640 /* Turn on PHY Smart Power Down (if previously enabled) */
4641 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
4642 hw->phy_spd_default);
4647 /* Restore LEDCTL settings */
4648 ew32(LEDCTL, hw->ledctl_default);
4652 return E1000_SUCCESS;
4656 * e1000_led_on - Turns on the software controllable LED
4657 * @hw: Struct containing variables accessed by shared code
4659 s32 e1000_led_on(struct e1000_hw *hw)
4661 u32 ctrl = er32(CTRL);
4663 e_dbg("e1000_led_on");
4665 switch (hw->mac_type) {
4666 case e1000_82542_rev2_0:
4667 case e1000_82542_rev2_1:
4669 /* Set SW Defineable Pin 0 to turn on the LED */
4670 ctrl |= E1000_CTRL_SWDPIN0;
4671 ctrl |= E1000_CTRL_SWDPIO0;
4674 if (hw->media_type == e1000_media_type_fiber) {
4675 /* Set SW Defineable Pin 0 to turn on the LED */
4676 ctrl |= E1000_CTRL_SWDPIN0;
4677 ctrl |= E1000_CTRL_SWDPIO0;
4679 /* Clear SW Defineable Pin 0 to turn on the LED */
4680 ctrl &= ~E1000_CTRL_SWDPIN0;
4681 ctrl |= E1000_CTRL_SWDPIO0;
4685 if (hw->media_type == e1000_media_type_fiber) {
4686 /* Clear SW Defineable Pin 0 to turn on the LED */
4687 ctrl &= ~E1000_CTRL_SWDPIN0;
4688 ctrl |= E1000_CTRL_SWDPIO0;
4689 } else if (hw->media_type == e1000_media_type_copper) {
4690 ew32(LEDCTL, hw->ledctl_mode2);
4691 return E1000_SUCCESS;
4698 return E1000_SUCCESS;
4702 * e1000_led_off - Turns off the software controllable LED
4703 * @hw: Struct containing variables accessed by shared code
4705 s32 e1000_led_off(struct e1000_hw *hw)
4707 u32 ctrl = er32(CTRL);
4709 e_dbg("e1000_led_off");
4711 switch (hw->mac_type) {
4712 case e1000_82542_rev2_0:
4713 case e1000_82542_rev2_1:
4715 /* Clear SW Defineable Pin 0 to turn off the LED */
4716 ctrl &= ~E1000_CTRL_SWDPIN0;
4717 ctrl |= E1000_CTRL_SWDPIO0;
4720 if (hw->media_type == e1000_media_type_fiber) {
4721 /* Clear SW Defineable Pin 0 to turn off the LED */
4722 ctrl &= ~E1000_CTRL_SWDPIN0;
4723 ctrl |= E1000_CTRL_SWDPIO0;
4725 /* Set SW Defineable Pin 0 to turn off the LED */
4726 ctrl |= E1000_CTRL_SWDPIN0;
4727 ctrl |= E1000_CTRL_SWDPIO0;
4731 if (hw->media_type == e1000_media_type_fiber) {
4732 /* Set SW Defineable Pin 0 to turn off the LED */
4733 ctrl |= E1000_CTRL_SWDPIN0;
4734 ctrl |= E1000_CTRL_SWDPIO0;
4735 } else if (hw->media_type == e1000_media_type_copper) {
4736 ew32(LEDCTL, hw->ledctl_mode1);
4737 return E1000_SUCCESS;
4744 return E1000_SUCCESS;
4748 * e1000_clear_hw_cntrs - Clears all hardware statistics counters.
4749 * @hw: Struct containing variables accessed by shared code
4751 static void e1000_clear_hw_cntrs(struct e1000_hw *hw)
4755 temp = er32(CRCERRS);
4756 temp = er32(SYMERRS);
4761 temp = er32(LATECOL);
4766 temp = er32(XONRXC);
4767 temp = er32(XONTXC);
4768 temp = er32(XOFFRXC);
4769 temp = er32(XOFFTXC);
4773 temp = er32(PRC127);
4774 temp = er32(PRC255);
4775 temp = er32(PRC511);
4776 temp = er32(PRC1023);
4777 temp = er32(PRC1522);
4800 temp = er32(PTC127);
4801 temp = er32(PTC255);
4802 temp = er32(PTC511);
4803 temp = er32(PTC1023);
4804 temp = er32(PTC1522);
4809 if (hw->mac_type < e1000_82543)
4812 temp = er32(ALGNERRC);
4813 temp = er32(RXERRC);
4815 temp = er32(CEXTERR);
4817 temp = er32(TSCTFC);
4819 if (hw->mac_type <= e1000_82544)
4822 temp = er32(MGTPRC);
4823 temp = er32(MGTPDC);
4824 temp = er32(MGTPTC);
4828 * e1000_reset_adaptive - Resets Adaptive IFS to its default state.
4829 * @hw: Struct containing variables accessed by shared code
4831 * Call this after e1000_init_hw. You may override the IFS defaults by setting
4832 * hw->ifs_params_forced to true. However, you must initialize hw->
4833 * current_ifs_val, ifs_min_val, ifs_max_val, ifs_step_size, and ifs_ratio
4834 * before calling this function.
4836 void e1000_reset_adaptive(struct e1000_hw *hw)
4838 e_dbg("e1000_reset_adaptive");
4840 if (hw->adaptive_ifs) {
4841 if (!hw->ifs_params_forced) {
4842 hw->current_ifs_val = 0;
4843 hw->ifs_min_val = IFS_MIN;
4844 hw->ifs_max_val = IFS_MAX;
4845 hw->ifs_step_size = IFS_STEP;
4846 hw->ifs_ratio = IFS_RATIO;
4848 hw->in_ifs_mode = false;
4851 e_dbg("Not in Adaptive IFS mode!\n");
4856 * e1000_update_adaptive - update adaptive IFS
4857 * @hw: Struct containing variables accessed by shared code
4858 * @tx_packets: Number of transmits since last callback
4859 * @total_collisions: Number of collisions since last callback
4861 * Called during the callback/watchdog routine to update IFS value based on
4862 * the ratio of transmits to collisions.
4864 void e1000_update_adaptive(struct e1000_hw *hw)
4866 e_dbg("e1000_update_adaptive");
4868 if (hw->adaptive_ifs) {
4869 if ((hw->collision_delta *hw->ifs_ratio) > hw->tx_packet_delta) {
4870 if (hw->tx_packet_delta > MIN_NUM_XMITS) {
4871 hw->in_ifs_mode = true;
4872 if (hw->current_ifs_val < hw->ifs_max_val) {
4873 if (hw->current_ifs_val == 0)
4874 hw->current_ifs_val =
4877 hw->current_ifs_val +=
4879 ew32(AIT, hw->current_ifs_val);
4884 && (hw->tx_packet_delta <= MIN_NUM_XMITS)) {
4885 hw->current_ifs_val = 0;
4886 hw->in_ifs_mode = false;
4891 e_dbg("Not in Adaptive IFS mode!\n");
4896 * e1000_tbi_adjust_stats
4897 * @hw: Struct containing variables accessed by shared code
4898 * @frame_len: The length of the frame in question
4899 * @mac_addr: The Ethernet destination address of the frame in question
4901 * Adjusts the statistic counters when a frame is accepted by TBI_ACCEPT
4903 void e1000_tbi_adjust_stats(struct e1000_hw *hw, struct e1000_hw_stats *stats,
4904 u32 frame_len, u8 *mac_addr)
4908 /* First adjust the frame length. */
4910 /* We need to adjust the statistics counters, since the hardware
4911 * counters overcount this packet as a CRC error and undercount
4912 * the packet as a good packet
4914 /* This packet should not be counted as a CRC error. */
4916 /* This packet does count as a Good Packet Received. */
4919 /* Adjust the Good Octets received counters */
4920 carry_bit = 0x80000000 & stats->gorcl;
4921 stats->gorcl += frame_len;
4922 /* If the high bit of Gorcl (the low 32 bits of the Good Octets
4923 * Received Count) was one before the addition,
4924 * AND it is zero after, then we lost the carry out,
4925 * need to add one to Gorch (Good Octets Received Count High).
4926 * This could be simplified if all environments supported
4929 if (carry_bit && ((stats->gorcl & 0x80000000) == 0))
4931 /* Is this a broadcast or multicast? Check broadcast first,
4932 * since the test for a multicast frame will test positive on
4933 * a broadcast frame.
4935 if ((mac_addr[0] == (u8) 0xff) && (mac_addr[1] == (u8) 0xff))
4936 /* Broadcast packet */
4938 else if (*mac_addr & 0x01)
4939 /* Multicast packet */
4942 if (frame_len == hw->max_frame_size) {
4943 /* In this case, the hardware has overcounted the number of
4950 /* Adjust the bin counters when the extra byte put the frame in the
4951 * wrong bin. Remember that the frame_len was adjusted above.
4953 if (frame_len == 64) {
4956 } else if (frame_len == 127) {
4959 } else if (frame_len == 255) {
4962 } else if (frame_len == 511) {
4965 } else if (frame_len == 1023) {
4968 } else if (frame_len == 1522) {
4974 * e1000_get_bus_info
4975 * @hw: Struct containing variables accessed by shared code
4977 * Gets the current PCI bus type, speed, and width of the hardware
4979 void e1000_get_bus_info(struct e1000_hw *hw)
4983 switch (hw->mac_type) {
4984 case e1000_82542_rev2_0:
4985 case e1000_82542_rev2_1:
4986 hw->bus_type = e1000_bus_type_pci;
4987 hw->bus_speed = e1000_bus_speed_unknown;
4988 hw->bus_width = e1000_bus_width_unknown;
4991 status = er32(STATUS);
4992 hw->bus_type = (status & E1000_STATUS_PCIX_MODE) ?
4993 e1000_bus_type_pcix : e1000_bus_type_pci;
4995 if (hw->device_id == E1000_DEV_ID_82546EB_QUAD_COPPER) {
4996 hw->bus_speed = (hw->bus_type == e1000_bus_type_pci) ?
4997 e1000_bus_speed_66 : e1000_bus_speed_120;
4998 } else if (hw->bus_type == e1000_bus_type_pci) {
4999 hw->bus_speed = (status & E1000_STATUS_PCI66) ?
5000 e1000_bus_speed_66 : e1000_bus_speed_33;
5002 switch (status & E1000_STATUS_PCIX_SPEED) {
5003 case E1000_STATUS_PCIX_SPEED_66:
5004 hw->bus_speed = e1000_bus_speed_66;
5006 case E1000_STATUS_PCIX_SPEED_100:
5007 hw->bus_speed = e1000_bus_speed_100;
5009 case E1000_STATUS_PCIX_SPEED_133:
5010 hw->bus_speed = e1000_bus_speed_133;
5013 hw->bus_speed = e1000_bus_speed_reserved;
5017 hw->bus_width = (status & E1000_STATUS_BUS64) ?
5018 e1000_bus_width_64 : e1000_bus_width_32;
5024 * e1000_write_reg_io
5025 * @hw: Struct containing variables accessed by shared code
5026 * @offset: offset to write to
5027 * @value: value to write
5029 * Writes a value to one of the devices registers using port I/O (as opposed to
5030 * memory mapped I/O). Only 82544 and newer devices support port I/O.
5032 static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value)
5034 unsigned long io_addr = hw->io_base;
5035 unsigned long io_data = hw->io_base + 4;
5037 e1000_io_write(hw, io_addr, offset);
5038 e1000_io_write(hw, io_data, value);
5042 * e1000_get_cable_length - Estimates the cable length.
5043 * @hw: Struct containing variables accessed by shared code
5044 * @min_length: The estimated minimum length
5045 * @max_length: The estimated maximum length
5047 * returns: - E1000_ERR_XXX
5050 * This function always returns a ranged length (minimum & maximum).
5051 * So for M88 phy's, this function interprets the one value returned from the
5052 * register to the minimum and maximum range.
5053 * For IGP phy's, the function calculates the range by the AGC registers.
5055 static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
5063 e_dbg("e1000_get_cable_length");
5065 *min_length = *max_length = 0;
5067 /* Use old method for Phy older than IGP */
5068 if (hw->phy_type == e1000_phy_m88) {
5070 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
5074 cable_length = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
5075 M88E1000_PSSR_CABLE_LENGTH_SHIFT;
5077 /* Convert the enum value to ranged values */
5078 switch (cable_length) {
5079 case e1000_cable_length_50:
5081 *max_length = e1000_igp_cable_length_50;
5083 case e1000_cable_length_50_80:
5084 *min_length = e1000_igp_cable_length_50;
5085 *max_length = e1000_igp_cable_length_80;
5087 case e1000_cable_length_80_110:
5088 *min_length = e1000_igp_cable_length_80;
5089 *max_length = e1000_igp_cable_length_110;
5091 case e1000_cable_length_110_140:
5092 *min_length = e1000_igp_cable_length_110;
5093 *max_length = e1000_igp_cable_length_140;
5095 case e1000_cable_length_140:
5096 *min_length = e1000_igp_cable_length_140;
5097 *max_length = e1000_igp_cable_length_170;
5100 return -E1000_ERR_PHY;
5103 } else if (hw->phy_type == e1000_phy_igp) { /* For IGP PHY */
5105 u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
5106 static const u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {
5107 IGP01E1000_PHY_AGC_A,
5108 IGP01E1000_PHY_AGC_B,
5109 IGP01E1000_PHY_AGC_C,
5110 IGP01E1000_PHY_AGC_D
5112 /* Read the AGC registers for all channels */
5113 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
5116 e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
5120 cur_agc_value = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT;
5122 /* Value bound check. */
5123 if ((cur_agc_value >=
5124 IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1)
5125 || (cur_agc_value == 0))
5126 return -E1000_ERR_PHY;
5128 agc_value += cur_agc_value;
5130 /* Update minimal AGC value. */
5131 if (min_agc_value > cur_agc_value)
5132 min_agc_value = cur_agc_value;
5135 /* Remove the minimal AGC result for length < 50m */
5137 IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) {
5138 agc_value -= min_agc_value;
5140 /* Get the average length of the remaining 3 channels */
5141 agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
5143 /* Get the average length of all the 4 channels. */
5144 agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
5147 /* Set the range of the calculated length. */
5148 *min_length = ((e1000_igp_cable_length_table[agc_value] -
5149 IGP01E1000_AGC_RANGE) > 0) ?
5150 (e1000_igp_cable_length_table[agc_value] -
5151 IGP01E1000_AGC_RANGE) : 0;
5152 *max_length = e1000_igp_cable_length_table[agc_value] +
5153 IGP01E1000_AGC_RANGE;
5156 return E1000_SUCCESS;
5160 * e1000_check_polarity - Check the cable polarity
5161 * @hw: Struct containing variables accessed by shared code
5162 * @polarity: output parameter : 0 - Polarity is not reversed
5163 * 1 - Polarity is reversed.
5165 * returns: - E1000_ERR_XXX
5168 * For phy's older than IGP, this function simply reads the polarity bit in the
5169 * Phy Status register. For IGP phy's, this bit is valid only if link speed is
5170 * 10 Mbps. If the link speed is 100 Mbps there is no polarity so this bit will
5171 * return 0. If the link speed is 1000 Mbps the polarity status is in the
5172 * IGP01E1000_PHY_PCS_INIT_REG.
5174 static s32 e1000_check_polarity(struct e1000_hw *hw,
5175 e1000_rev_polarity *polarity)
5180 e_dbg("e1000_check_polarity");
5182 if (hw->phy_type == e1000_phy_m88) {
5183 /* return the Polarity bit in the Status register. */
5184 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
5188 *polarity = ((phy_data & M88E1000_PSSR_REV_POLARITY) >>
5189 M88E1000_PSSR_REV_POLARITY_SHIFT) ?
5190 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
5192 } else if (hw->phy_type == e1000_phy_igp) {
5193 /* Read the Status register to check the speed */
5194 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS,
5199 /* If speed is 1000 Mbps, must read the IGP01E1000_PHY_PCS_INIT_REG to
5200 * find the polarity status */
5201 if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
5202 IGP01E1000_PSSR_SPEED_1000MBPS) {
5204 /* Read the GIG initialization PCS register (0x00B4) */
5206 e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG,
5211 /* Check the polarity bits */
5212 *polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ?
5213 e1000_rev_polarity_reversed :
5214 e1000_rev_polarity_normal;
5216 /* For 10 Mbps, read the polarity bit in the status register. (for
5217 * 100 Mbps this bit is always 0) */
5219 (phy_data & IGP01E1000_PSSR_POLARITY_REVERSED) ?
5220 e1000_rev_polarity_reversed :
5221 e1000_rev_polarity_normal;
5224 return E1000_SUCCESS;
5228 * e1000_check_downshift - Check if Downshift occurred
5229 * @hw: Struct containing variables accessed by shared code
5230 * @downshift: output parameter : 0 - No Downshift occurred.
5231 * 1 - Downshift occurred.
5233 * returns: - E1000_ERR_XXX
5236 * For phy's older than IGP, this function reads the Downshift bit in the Phy
5237 * Specific Status register. For IGP phy's, it reads the Downgrade bit in the
5238 * Link Health register. In IGP this bit is latched high, so the driver must
5239 * read it immediately after link is established.
5241 static s32 e1000_check_downshift(struct e1000_hw *hw)
5246 e_dbg("e1000_check_downshift");
5248 if (hw->phy_type == e1000_phy_igp) {
5249 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
5254 hw->speed_downgraded =
5255 (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0;
5256 } else if (hw->phy_type == e1000_phy_m88) {
5257 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
5262 hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >>
5263 M88E1000_PSSR_DOWNSHIFT_SHIFT;
5266 return E1000_SUCCESS;
5269 static const u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {
5270 IGP01E1000_PHY_AGC_PARAM_A,
5271 IGP01E1000_PHY_AGC_PARAM_B,
5272 IGP01E1000_PHY_AGC_PARAM_C,
5273 IGP01E1000_PHY_AGC_PARAM_D
5276 static s32 e1000_1000Mb_check_cable_length(struct e1000_hw *hw)
5278 u16 min_length, max_length;
5282 ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
5286 if (hw->dsp_config_state != e1000_dsp_config_enabled)
5289 if (min_length >= e1000_igp_cable_length_50) {
5290 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
5291 ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i],
5296 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
5298 ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i],
5303 hw->dsp_config_state = e1000_dsp_config_activated;
5305 u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
5308 /* clear previous idle error counts */
5309 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
5313 for (i = 0; i < ffe_idle_err_timeout; i++) {
5315 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
5320 idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
5321 if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
5322 hw->ffe_config_state = e1000_ffe_config_active;
5324 ret_val = e1000_write_phy_reg(hw,
5325 IGP01E1000_PHY_DSP_FFE,
5326 IGP01E1000_PHY_DSP_FFE_CM_CP);
5333 ffe_idle_err_timeout =
5334 FFE_IDLE_ERR_COUNT_TIMEOUT_100;
5342 * e1000_config_dsp_after_link_change
5343 * @hw: Struct containing variables accessed by shared code
5344 * @link_up: was link up at the time this was called
5346 * returns: - E1000_ERR_PHY if fail to read/write the PHY
5347 * E1000_SUCCESS at any other case.
5349 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
5350 * gigabit link is achieved to improve link quality.
5353 static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
5356 u16 phy_data, phy_saved_data, speed, duplex, i;
5358 e_dbg("e1000_config_dsp_after_link_change");
5360 if (hw->phy_type != e1000_phy_igp)
5361 return E1000_SUCCESS;
5364 ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
5366 e_dbg("Error getting link speed and duplex\n");
5370 if (speed == SPEED_1000) {
5371 ret_val = e1000_1000Mb_check_cable_length(hw);
5376 if (hw->dsp_config_state == e1000_dsp_config_activated) {
5377 /* Save off the current value of register 0x2F5B to be restored at
5378 * the end of the routines. */
5380 e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
5385 /* Disable the PHY transmitter */
5386 ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
5393 ret_val = e1000_write_phy_reg(hw, 0x0000,
5394 IGP01E1000_IEEE_FORCE_GIGA);
5397 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
5399 e1000_read_phy_reg(hw, dsp_reg_array[i],
5404 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
5405 phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
5408 e1000_write_phy_reg(hw, dsp_reg_array[i],
5414 ret_val = e1000_write_phy_reg(hw, 0x0000,
5415 IGP01E1000_IEEE_RESTART_AUTONEG);
5421 /* Now enable the transmitter */
5423 e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
5428 hw->dsp_config_state = e1000_dsp_config_enabled;
5431 if (hw->ffe_config_state == e1000_ffe_config_active) {
5432 /* Save off the current value of register 0x2F5B to be restored at
5433 * the end of the routines. */
5435 e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
5440 /* Disable the PHY transmitter */
5441 ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
5448 ret_val = e1000_write_phy_reg(hw, 0x0000,
5449 IGP01E1000_IEEE_FORCE_GIGA);
5453 e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE,
5454 IGP01E1000_PHY_DSP_FFE_DEFAULT);
5458 ret_val = e1000_write_phy_reg(hw, 0x0000,
5459 IGP01E1000_IEEE_RESTART_AUTONEG);
5465 /* Now enable the transmitter */
5467 e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
5472 hw->ffe_config_state = e1000_ffe_config_enabled;
5475 return E1000_SUCCESS;
5479 * e1000_set_phy_mode - Set PHY to class A mode
5480 * @hw: Struct containing variables accessed by shared code
5482 * Assumes the following operations will follow to enable the new class mode.
5483 * 1. Do a PHY soft reset
5484 * 2. Restart auto-negotiation or force link.
5486 static s32 e1000_set_phy_mode(struct e1000_hw *hw)
5491 e_dbg("e1000_set_phy_mode");
5493 if ((hw->mac_type == e1000_82545_rev_3) &&
5494 (hw->media_type == e1000_media_type_copper)) {
5496 e1000_read_eeprom(hw, EEPROM_PHY_CLASS_WORD, 1,
5502 if ((eeprom_data != EEPROM_RESERVED_WORD) &&
5503 (eeprom_data & EEPROM_PHY_CLASS_A)) {
5505 e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT,
5510 e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL,
5515 hw->phy_reset_disable = false;
5519 return E1000_SUCCESS;
5523 * e1000_set_d3_lplu_state - set d3 link power state
5524 * @hw: Struct containing variables accessed by shared code
5525 * @active: true to enable lplu false to disable lplu.
5527 * This function sets the lplu state according to the active flag. When
5528 * activating lplu this function also disables smart speed and vise versa.
5529 * lplu will not be activated unless the device autonegotiation advertisement
5530 * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
5532 * returns: - E1000_ERR_PHY if fail to read/write the PHY
5533 * E1000_SUCCESS at any other case.
5535 static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
5539 e_dbg("e1000_set_d3_lplu_state");
5541 if (hw->phy_type != e1000_phy_igp)
5542 return E1000_SUCCESS;
5544 /* During driver activity LPLU should not be used or it will attain link
5545 * from the lowest speeds starting from 10Mbps. The capability is used for
5546 * Dx transitions and states */
5547 if (hw->mac_type == e1000_82541_rev_2
5548 || hw->mac_type == e1000_82547_rev_2) {
5550 e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
5556 if (hw->mac_type == e1000_82541_rev_2 ||
5557 hw->mac_type == e1000_82547_rev_2) {
5558 phy_data &= ~IGP01E1000_GMII_FLEX_SPD;
5560 e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
5566 /* LPLU and SmartSpeed are mutually exclusive. LPLU is used during
5567 * Dx states where the power conservation is most important. During
5568 * driver activity we should enable SmartSpeed, so performance is
5570 if (hw->smart_speed == e1000_smart_speed_on) {
5572 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5577 phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
5579 e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5583 } else if (hw->smart_speed == e1000_smart_speed_off) {
5585 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5590 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
5592 e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5597 } else if ((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT)
5598 || (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL)
5599 || (hw->autoneg_advertised ==
5600 AUTONEG_ADVERTISE_10_100_ALL)) {
5602 if (hw->mac_type == e1000_82541_rev_2 ||
5603 hw->mac_type == e1000_82547_rev_2) {
5604 phy_data |= IGP01E1000_GMII_FLEX_SPD;
5606 e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
5612 /* When LPLU is enabled we should disable SmartSpeed */
5614 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5619 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
5621 e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
5627 return E1000_SUCCESS;
5631 * e1000_set_vco_speed
5632 * @hw: Struct containing variables accessed by shared code
5634 * Change VCO speed register to improve Bit Error Rate performance of SERDES.
5636 static s32 e1000_set_vco_speed(struct e1000_hw *hw)
5639 u16 default_page = 0;
5642 e_dbg("e1000_set_vco_speed");
5644 switch (hw->mac_type) {
5645 case e1000_82545_rev_3:
5646 case e1000_82546_rev_3:
5649 return E1000_SUCCESS;
5652 /* Set PHY register 30, page 5, bit 8 to 0 */
5655 e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, &default_page);
5659 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005);
5663 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
5667 phy_data &= ~M88E1000_PHY_VCO_REG_BIT8;
5668 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
5672 /* Set PHY register 30, page 4, bit 11 to 1 */
5674 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004);
5678 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
5682 phy_data |= M88E1000_PHY_VCO_REG_BIT11;
5683 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
5688 e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, default_page);
5692 return E1000_SUCCESS;
5697 * e1000_enable_mng_pass_thru - check for bmc pass through
5698 * @hw: Struct containing variables accessed by shared code
5700 * Verifies the hardware needs to allow ARPs to be processed by the host
5701 * returns: - true/false
5703 u32 e1000_enable_mng_pass_thru(struct e1000_hw *hw)
5707 if (hw->asf_firmware_present) {
5710 if (!(manc & E1000_MANC_RCV_TCO_EN) ||
5711 !(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
5713 if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
5719 static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
5725 /* Polarity reversal workaround for forced 10F/10H links. */
5727 /* Disable the transmitter on the PHY */
5729 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
5732 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFFF);
5736 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
5740 /* This loop will early-out if the NO link condition has been met. */
5741 for (i = PHY_FORCE_TIME; i > 0; i--) {
5742 /* Read the MII Status Register and wait for Link Status bit
5746 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
5750 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
5754 if ((mii_status_reg & ~MII_SR_LINK_STATUS) == 0)
5759 /* Recommended delay time after link has been lost */
5762 /* Now we will re-enable th transmitter on the PHY */
5764 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
5768 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFF0);
5772 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFF00);
5776 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x0000);
5780 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
5784 /* This loop will early-out if the link condition has been met. */
5785 for (i = PHY_FORCE_TIME; i > 0; i--) {
5786 /* Read the MII Status Register and wait for Link Status bit
5790 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
5794 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
5798 if (mii_status_reg & MII_SR_LINK_STATUS)
5802 return E1000_SUCCESS;
5806 * e1000_get_auto_rd_done
5807 * @hw: Struct containing variables accessed by shared code
5809 * Check for EEPROM Auto Read bit done.
5810 * returns: - E1000_ERR_RESET if fail to reset MAC
5811 * E1000_SUCCESS at any other case.
5813 static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
5815 e_dbg("e1000_get_auto_rd_done");
5817 return E1000_SUCCESS;
5821 * e1000_get_phy_cfg_done
5822 * @hw: Struct containing variables accessed by shared code
5824 * Checks if the PHY configuration is done
5825 * returns: - E1000_ERR_RESET if fail to reset MAC
5826 * E1000_SUCCESS at any other case.
5828 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
5830 e_dbg("e1000_get_phy_cfg_done");
5832 return E1000_SUCCESS;