blob: 20d172aeb1c08726799ed9df85268a89395e6a3f [file] [log] [blame]
Auke Kok9d5c8242008-01-24 02:22:38 -08001/*******************************************************************************
2
3 Intel(R) Gigabit Ethernet Linux driver
Alexander Duyck86d5d382009-02-06 23:23:12 +00004 Copyright(c) 2007-2009 Intel Corporation.
Auke Kok9d5c8242008-01-24 02:22:38 -08005
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
9
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 more details.
14
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
21
22 Contact Information:
23 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
24 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
25
26*******************************************************************************/
27
28/* e1000_82575
29 * e1000_82576
30 */
31
32#include <linux/types.h>
Alexander Duyck2d064c02008-07-08 15:10:12 -070033#include <linux/if_ether.h>
Auke Kok9d5c8242008-01-24 02:22:38 -080034
35#include "e1000_mac.h"
36#include "e1000_82575.h"
37
38static s32 igb_get_invariants_82575(struct e1000_hw *);
39static s32 igb_acquire_phy_82575(struct e1000_hw *);
40static void igb_release_phy_82575(struct e1000_hw *);
41static s32 igb_acquire_nvm_82575(struct e1000_hw *);
42static void igb_release_nvm_82575(struct e1000_hw *);
43static s32 igb_check_for_link_82575(struct e1000_hw *);
44static s32 igb_get_cfg_done_82575(struct e1000_hw *);
45static s32 igb_init_hw_82575(struct e1000_hw *);
46static s32 igb_phy_hw_reset_sgmii_82575(struct e1000_hw *);
47static s32 igb_read_phy_reg_sgmii_82575(struct e1000_hw *, u32, u16 *);
Alexander Duyckbb2ac472009-11-19 12:42:01 +000048static s32 igb_read_phy_reg_82580(struct e1000_hw *, u32, u16 *);
49static s32 igb_write_phy_reg_82580(struct e1000_hw *, u32, u16);
Auke Kok9d5c8242008-01-24 02:22:38 -080050static s32 igb_reset_hw_82575(struct e1000_hw *);
Alexander Duyckbb2ac472009-11-19 12:42:01 +000051static s32 igb_reset_hw_82580(struct e1000_hw *);
Auke Kok9d5c8242008-01-24 02:22:38 -080052static s32 igb_set_d0_lplu_state_82575(struct e1000_hw *, bool);
53static s32 igb_setup_copper_link_82575(struct e1000_hw *);
Alexander Duyck2fb02a22009-09-14 08:22:54 +000054static s32 igb_setup_serdes_link_82575(struct e1000_hw *);
Auke Kok9d5c8242008-01-24 02:22:38 -080055static s32 igb_write_phy_reg_sgmii_82575(struct e1000_hw *, u32, u16);
56static void igb_clear_hw_cntrs_82575(struct e1000_hw *);
57static s32 igb_acquire_swfw_sync_82575(struct e1000_hw *, u16);
Auke Kok9d5c8242008-01-24 02:22:38 -080058static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *, u16 *,
59 u16 *);
60static s32 igb_get_phy_id_82575(struct e1000_hw *);
61static void igb_release_swfw_sync_82575(struct e1000_hw *, u16);
62static bool igb_sgmii_active_82575(struct e1000_hw *);
63static s32 igb_reset_init_script_82575(struct e1000_hw *);
64static s32 igb_read_mac_addr_82575(struct e1000_hw *);
Alexander Duyck009bc062009-07-23 18:08:35 +000065static s32 igb_set_pcie_completion_timeout(struct e1000_hw *hw);
Alexander Duyck99870a72010-08-03 11:50:08 +000066static s32 igb_reset_mdicnfg_82580(struct e1000_hw *hw);
Auke Kok9d5c8242008-01-24 02:22:38 -080067
Alexander Duyckbb2ac472009-11-19 12:42:01 +000068static const u16 e1000_82580_rxpbs_table[] =
69 { 36, 72, 144, 1, 2, 4, 8, 16,
70 35, 70, 140 };
71#define E1000_82580_RXPBS_TABLE_SIZE \
72 (sizeof(e1000_82580_rxpbs_table)/sizeof(u16))
73
Nick Nunley4085f742010-07-26 13:15:06 +000074/**
75 * igb_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO
76 * @hw: pointer to the HW structure
77 *
78 * Called to determine if the I2C pins are being used for I2C or as an
79 * external MDIO interface since the two options are mutually exclusive.
80 **/
81static bool igb_sgmii_uses_mdio_82575(struct e1000_hw *hw)
82{
83 u32 reg = 0;
84 bool ext_mdio = false;
85
86 switch (hw->mac.type) {
87 case e1000_82575:
88 case e1000_82576:
89 reg = rd32(E1000_MDIC);
90 ext_mdio = !!(reg & E1000_MDIC_DEST);
91 break;
92 case e1000_82580:
93 case e1000_i350:
94 reg = rd32(E1000_MDICNFG);
95 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO);
96 break;
97 default:
98 break;
99 }
100 return ext_mdio;
101}
102
Auke Kok9d5c8242008-01-24 02:22:38 -0800103static s32 igb_get_invariants_82575(struct e1000_hw *hw)
104{
105 struct e1000_phy_info *phy = &hw->phy;
106 struct e1000_nvm_info *nvm = &hw->nvm;
107 struct e1000_mac_info *mac = &hw->mac;
Alexander Duyckc1889bf2009-02-06 23:16:45 +0000108 struct e1000_dev_spec_82575 * dev_spec = &hw->dev_spec._82575;
Auke Kok9d5c8242008-01-24 02:22:38 -0800109 u32 eecd;
110 s32 ret_val;
111 u16 size;
112 u32 ctrl_ext = 0;
113
114 switch (hw->device_id) {
115 case E1000_DEV_ID_82575EB_COPPER:
116 case E1000_DEV_ID_82575EB_FIBER_SERDES:
117 case E1000_DEV_ID_82575GB_QUAD_COPPER:
118 mac->type = e1000_82575;
119 break;
Alexander Duyck2d064c02008-07-08 15:10:12 -0700120 case E1000_DEV_ID_82576:
Alexander Duyck9eb23412009-03-13 20:42:15 +0000121 case E1000_DEV_ID_82576_NS:
Alexander Duyck747d49b2009-10-05 06:33:27 +0000122 case E1000_DEV_ID_82576_NS_SERDES:
Alexander Duyck2d064c02008-07-08 15:10:12 -0700123 case E1000_DEV_ID_82576_FIBER:
124 case E1000_DEV_ID_82576_SERDES:
Alexander Duyckc8ea5ea2009-03-13 20:42:35 +0000125 case E1000_DEV_ID_82576_QUAD_COPPER:
Carolyn Wybornyb894fa22010-03-19 06:07:48 +0000126 case E1000_DEV_ID_82576_QUAD_COPPER_ET2:
Alexander Duyck4703bf72009-07-23 18:09:48 +0000127 case E1000_DEV_ID_82576_SERDES_QUAD:
Alexander Duyck2d064c02008-07-08 15:10:12 -0700128 mac->type = e1000_82576;
129 break;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000130 case E1000_DEV_ID_82580_COPPER:
131 case E1000_DEV_ID_82580_FIBER:
Carolyn Wyborny6493d242011-01-14 05:33:46 +0000132 case E1000_DEV_ID_82580_QUAD_FIBER:
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000133 case E1000_DEV_ID_82580_SERDES:
134 case E1000_DEV_ID_82580_SGMII:
135 case E1000_DEV_ID_82580_COPPER_DUAL:
Joseph Gasparakis308fb392010-09-22 17:56:44 +0000136 case E1000_DEV_ID_DH89XXCC_SGMII:
137 case E1000_DEV_ID_DH89XXCC_SERDES:
Gasparakis, Joseph1b5dda32010-12-09 01:41:01 +0000138 case E1000_DEV_ID_DH89XXCC_BACKPLANE:
139 case E1000_DEV_ID_DH89XXCC_SFP:
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000140 mac->type = e1000_82580;
141 break;
Alexander Duyckd2ba2ed2010-03-22 14:08:06 +0000142 case E1000_DEV_ID_I350_COPPER:
143 case E1000_DEV_ID_I350_FIBER:
144 case E1000_DEV_ID_I350_SERDES:
145 case E1000_DEV_ID_I350_SGMII:
146 mac->type = e1000_i350;
147 break;
Auke Kok9d5c8242008-01-24 02:22:38 -0800148 default:
149 return -E1000_ERR_MAC_INIT;
150 break;
151 }
152
Auke Kok9d5c8242008-01-24 02:22:38 -0800153 /* Set media type */
154 /*
155 * The 82575 uses bits 22:23 for link mode. The mode can be changed
156 * based on the EEPROM. We cannot rely upon device ID. There
157 * is no distinguishable difference between fiber and internal
158 * SerDes mode on the 82575. There can be an external PHY attached
159 * on the SGMII interface. For this, we'll set sgmii_active to true.
160 */
161 phy->media_type = e1000_media_type_copper;
162 dev_spec->sgmii_active = false;
163
164 ctrl_ext = rd32(E1000_CTRL_EXT);
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000165 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
166 case E1000_CTRL_EXT_LINK_MODE_SGMII:
Auke Kok9d5c8242008-01-24 02:22:38 -0800167 dev_spec->sgmii_active = true;
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000168 break;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000169 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000170 case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
171 hw->phy.media_type = e1000_media_type_internal_serdes;
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000172 break;
173 default:
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000174 break;
Auke Kok9d5c8242008-01-24 02:22:38 -0800175 }
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000176
Auke Kok9d5c8242008-01-24 02:22:38 -0800177 /* Set mta register count */
178 mac->mta_reg_count = 128;
179 /* Set rar entry count */
180 mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
Alexander Duyck2d064c02008-07-08 15:10:12 -0700181 if (mac->type == e1000_82576)
182 mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000183 if (mac->type == e1000_82580)
184 mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
Alexander Duyckd2ba2ed2010-03-22 14:08:06 +0000185 if (mac->type == e1000_i350)
186 mac->rar_entry_count = E1000_RAR_ENTRIES_I350;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000187 /* reset */
Alexander Duyckd2ba2ed2010-03-22 14:08:06 +0000188 if (mac->type >= e1000_82580)
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000189 mac->ops.reset_hw = igb_reset_hw_82580;
190 else
191 mac->ops.reset_hw = igb_reset_hw_82575;
Auke Kok9d5c8242008-01-24 02:22:38 -0800192 /* Set if part includes ASF firmware */
193 mac->asf_firmware_present = true;
194 /* Set if manageability features are enabled. */
195 mac->arc_subsystem_valid =
196 (rd32(E1000_FWSM) & E1000_FWSM_MODE_MASK)
197 ? true : false;
Carolyn Wyborny09b068d2011-03-11 20:42:13 -0800198 /* enable EEE on i350 parts */
199 if (mac->type == e1000_i350)
200 dev_spec->eee_disable = false;
201 else
202 dev_spec->eee_disable = true;
Auke Kok9d5c8242008-01-24 02:22:38 -0800203 /* physical interface link setup */
204 mac->ops.setup_physical_interface =
205 (hw->phy.media_type == e1000_media_type_copper)
206 ? igb_setup_copper_link_82575
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000207 : igb_setup_serdes_link_82575;
Auke Kok9d5c8242008-01-24 02:22:38 -0800208
209 /* NVM initialization */
210 eecd = rd32(E1000_EECD);
211
212 nvm->opcode_bits = 8;
213 nvm->delay_usec = 1;
214 switch (nvm->override) {
215 case e1000_nvm_override_spi_large:
216 nvm->page_size = 32;
217 nvm->address_bits = 16;
218 break;
219 case e1000_nvm_override_spi_small:
220 nvm->page_size = 8;
221 nvm->address_bits = 8;
222 break;
223 default:
224 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
225 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
226 break;
227 }
228
229 nvm->type = e1000_nvm_eeprom_spi;
230
231 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
232 E1000_EECD_SIZE_EX_SHIFT);
233
234 /*
235 * Added to a constant, "size" becomes the left-shift value
236 * for setting word_size.
237 */
238 size += NVM_WORD_SIZE_BASE_SHIFT;
Jeff Kirsher5c3cad72008-06-27 10:59:33 -0700239
240 /* EEPROM access above 16k is unsupported */
241 if (size > 14)
242 size = 14;
Auke Kok9d5c8242008-01-24 02:22:38 -0800243 nvm->word_size = 1 << size;
244
Carolyn Wyborny6b78bb12011-01-20 06:40:45 +0000245 /* if part supports SR-IOV then initialize mailbox parameters */
246 switch (mac->type) {
247 case e1000_82576:
248 case e1000_i350:
Alexander Duycka0c98602009-07-23 18:10:43 +0000249 igb_init_mbx_params_pf(hw);
Carolyn Wyborny6b78bb12011-01-20 06:40:45 +0000250 break;
251 default:
252 break;
253 }
Alexander Duycka0c98602009-07-23 18:10:43 +0000254
Auke Kok9d5c8242008-01-24 02:22:38 -0800255 /* setup PHY parameters */
256 if (phy->media_type != e1000_media_type_copper) {
257 phy->type = e1000_phy_none;
258 return 0;
259 }
260
261 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
262 phy->reset_delay_us = 100;
263
Alexander Duyck99870a72010-08-03 11:50:08 +0000264 ctrl_ext = rd32(E1000_CTRL_EXT);
265
Auke Kok9d5c8242008-01-24 02:22:38 -0800266 /* PHY function pointers */
Alexander Duyck99870a72010-08-03 11:50:08 +0000267 if (igb_sgmii_active_82575(hw)) {
Nick Nunley4085f742010-07-26 13:15:06 +0000268 phy->ops.reset = igb_phy_hw_reset_sgmii_82575;
Alexander Duyck99870a72010-08-03 11:50:08 +0000269 ctrl_ext |= E1000_CTRL_I2C_ENA;
270 } else {
Nick Nunley4085f742010-07-26 13:15:06 +0000271 phy->ops.reset = igb_phy_hw_reset;
Alexander Duyck99870a72010-08-03 11:50:08 +0000272 ctrl_ext &= ~E1000_CTRL_I2C_ENA;
273 }
274
275 wr32(E1000_CTRL_EXT, ctrl_ext);
276 igb_reset_mdicnfg_82580(hw);
Nick Nunley4085f742010-07-26 13:15:06 +0000277
278 if (igb_sgmii_active_82575(hw) && !igb_sgmii_uses_mdio_82575(hw)) {
279 phy->ops.read_reg = igb_read_phy_reg_sgmii_82575;
280 phy->ops.write_reg = igb_write_phy_reg_sgmii_82575;
Alexander Duyckd2ba2ed2010-03-22 14:08:06 +0000281 } else if (hw->mac.type >= e1000_82580) {
Nick Nunley4085f742010-07-26 13:15:06 +0000282 phy->ops.read_reg = igb_read_phy_reg_82580;
283 phy->ops.write_reg = igb_write_phy_reg_82580;
Auke Kok9d5c8242008-01-24 02:22:38 -0800284 } else {
Nick Nunley4085f742010-07-26 13:15:06 +0000285 phy->ops.read_reg = igb_read_phy_reg_igp;
286 phy->ops.write_reg = igb_write_phy_reg_igp;
Auke Kok9d5c8242008-01-24 02:22:38 -0800287 }
288
Alexander Duyck19e588e2009-07-07 13:01:55 +0000289 /* set lan id */
290 hw->bus.func = (rd32(E1000_STATUS) & E1000_STATUS_FUNC_MASK) >>
291 E1000_STATUS_FUNC_SHIFT;
292
Auke Kok9d5c8242008-01-24 02:22:38 -0800293 /* Set phy->phy_addr and phy->id. */
294 ret_val = igb_get_phy_id_82575(hw);
295 if (ret_val)
296 return ret_val;
297
298 /* Verify phy id and set remaining function pointers */
299 switch (phy->id) {
Joseph Gasparakis308fb392010-09-22 17:56:44 +0000300 case I347AT4_E_PHY_ID:
301 case M88E1112_E_PHY_ID:
Auke Kok9d5c8242008-01-24 02:22:38 -0800302 case M88E1111_I_PHY_ID:
303 phy->type = e1000_phy_m88;
304 phy->ops.get_phy_info = igb_get_phy_info_m88;
Joseph Gasparakis308fb392010-09-22 17:56:44 +0000305
306 if (phy->id == I347AT4_E_PHY_ID ||
307 phy->id == M88E1112_E_PHY_ID)
308 phy->ops.get_cable_length = igb_get_cable_length_m88_gen2;
309 else
310 phy->ops.get_cable_length = igb_get_cable_length_m88;
311
Auke Kok9d5c8242008-01-24 02:22:38 -0800312 phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_m88;
313 break;
314 case IGP03E1000_E_PHY_ID:
315 phy->type = e1000_phy_igp_3;
316 phy->ops.get_phy_info = igb_get_phy_info_igp;
317 phy->ops.get_cable_length = igb_get_cable_length_igp_2;
318 phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_igp;
319 phy->ops.set_d0_lplu_state = igb_set_d0_lplu_state_82575;
320 phy->ops.set_d3_lplu_state = igb_set_d3_lplu_state;
321 break;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000322 case I82580_I_PHY_ID:
Alexander Duyckd2ba2ed2010-03-22 14:08:06 +0000323 case I350_I_PHY_ID:
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000324 phy->type = e1000_phy_82580;
325 phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_82580;
326 phy->ops.get_cable_length = igb_get_cable_length_82580;
327 phy->ops.get_phy_info = igb_get_phy_info_82580;
328 break;
Auke Kok9d5c8242008-01-24 02:22:38 -0800329 default:
330 return -E1000_ERR_PHY;
331 }
332
333 return 0;
334}
335
336/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700337 * igb_acquire_phy_82575 - Acquire rights to access PHY
Auke Kok9d5c8242008-01-24 02:22:38 -0800338 * @hw: pointer to the HW structure
339 *
340 * Acquire access rights to the correct PHY. This is a
341 * function pointer entry point called by the api module.
342 **/
343static s32 igb_acquire_phy_82575(struct e1000_hw *hw)
344{
Alexander Duyck008c3422009-10-05 06:32:07 +0000345 u16 mask = E1000_SWFW_PHY0_SM;
Auke Kok9d5c8242008-01-24 02:22:38 -0800346
Alexander Duyck008c3422009-10-05 06:32:07 +0000347 if (hw->bus.func == E1000_FUNC_1)
348 mask = E1000_SWFW_PHY1_SM;
Nick Nunleyede3ef02010-07-01 13:37:54 +0000349 else if (hw->bus.func == E1000_FUNC_2)
350 mask = E1000_SWFW_PHY2_SM;
351 else if (hw->bus.func == E1000_FUNC_3)
352 mask = E1000_SWFW_PHY3_SM;
Auke Kok9d5c8242008-01-24 02:22:38 -0800353
354 return igb_acquire_swfw_sync_82575(hw, mask);
355}
356
357/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700358 * igb_release_phy_82575 - Release rights to access PHY
Auke Kok9d5c8242008-01-24 02:22:38 -0800359 * @hw: pointer to the HW structure
360 *
361 * A wrapper to release access rights to the correct PHY. This is a
362 * function pointer entry point called by the api module.
363 **/
364static void igb_release_phy_82575(struct e1000_hw *hw)
365{
Alexander Duyck008c3422009-10-05 06:32:07 +0000366 u16 mask = E1000_SWFW_PHY0_SM;
Auke Kok9d5c8242008-01-24 02:22:38 -0800367
Alexander Duyck008c3422009-10-05 06:32:07 +0000368 if (hw->bus.func == E1000_FUNC_1)
369 mask = E1000_SWFW_PHY1_SM;
Nick Nunleyede3ef02010-07-01 13:37:54 +0000370 else if (hw->bus.func == E1000_FUNC_2)
371 mask = E1000_SWFW_PHY2_SM;
372 else if (hw->bus.func == E1000_FUNC_3)
373 mask = E1000_SWFW_PHY3_SM;
Alexander Duyck008c3422009-10-05 06:32:07 +0000374
Auke Kok9d5c8242008-01-24 02:22:38 -0800375 igb_release_swfw_sync_82575(hw, mask);
376}
377
378/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700379 * igb_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
Auke Kok9d5c8242008-01-24 02:22:38 -0800380 * @hw: pointer to the HW structure
381 * @offset: register offset to be read
382 * @data: pointer to the read data
383 *
384 * Reads the PHY register at offset using the serial gigabit media independent
385 * interface and stores the retrieved information in data.
386 **/
387static s32 igb_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
388 u16 *data)
389{
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000390 s32 ret_val = -E1000_ERR_PARAM;
Auke Kok9d5c8242008-01-24 02:22:38 -0800391
392 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
Auke Kok652fff32008-06-27 11:00:18 -0700393 hw_dbg("PHY Address %u is out of range\n", offset);
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000394 goto out;
Auke Kok9d5c8242008-01-24 02:22:38 -0800395 }
396
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000397 ret_val = hw->phy.ops.acquire(hw);
398 if (ret_val)
399 goto out;
Auke Kok9d5c8242008-01-24 02:22:38 -0800400
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000401 ret_val = igb_read_phy_reg_i2c(hw, offset, data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800402
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000403 hw->phy.ops.release(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -0800404
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000405out:
406 return ret_val;
Auke Kok9d5c8242008-01-24 02:22:38 -0800407}
408
409/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700410 * igb_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
Auke Kok9d5c8242008-01-24 02:22:38 -0800411 * @hw: pointer to the HW structure
412 * @offset: register offset to write to
413 * @data: data to write at register offset
414 *
415 * Writes the data to PHY register at the offset using the serial gigabit
416 * media independent interface.
417 **/
418static s32 igb_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
419 u16 data)
420{
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000421 s32 ret_val = -E1000_ERR_PARAM;
422
Auke Kok9d5c8242008-01-24 02:22:38 -0800423
424 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
Auke Kok652fff32008-06-27 11:00:18 -0700425 hw_dbg("PHY Address %d is out of range\n", offset);
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000426 goto out;
Auke Kok9d5c8242008-01-24 02:22:38 -0800427 }
428
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000429 ret_val = hw->phy.ops.acquire(hw);
430 if (ret_val)
431 goto out;
Auke Kok9d5c8242008-01-24 02:22:38 -0800432
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000433 ret_val = igb_write_phy_reg_i2c(hw, offset, data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800434
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000435 hw->phy.ops.release(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -0800436
Alexander Duyckbf6f7a92009-10-05 06:32:27 +0000437out:
438 return ret_val;
Auke Kok9d5c8242008-01-24 02:22:38 -0800439}
440
441/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700442 * igb_get_phy_id_82575 - Retrieve PHY addr and id
Auke Kok9d5c8242008-01-24 02:22:38 -0800443 * @hw: pointer to the HW structure
444 *
Auke Kok652fff32008-06-27 11:00:18 -0700445 * Retrieves the PHY address and ID for both PHY's which do and do not use
Auke Kok9d5c8242008-01-24 02:22:38 -0800446 * sgmi interface.
447 **/
448static s32 igb_get_phy_id_82575(struct e1000_hw *hw)
449{
450 struct e1000_phy_info *phy = &hw->phy;
451 s32 ret_val = 0;
452 u16 phy_id;
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000453 u32 ctrl_ext;
Nick Nunley4085f742010-07-26 13:15:06 +0000454 u32 mdic;
Auke Kok9d5c8242008-01-24 02:22:38 -0800455
456 /*
457 * For SGMII PHYs, we try the list of possible addresses until
458 * we find one that works. For non-SGMII PHYs
459 * (e.g. integrated copper PHYs), an address of 1 should
460 * work. The result of this function should mean phy->phy_addr
461 * and phy->id are set correctly.
462 */
463 if (!(igb_sgmii_active_82575(hw))) {
464 phy->addr = 1;
465 ret_val = igb_get_phy_id(hw);
466 goto out;
467 }
468
Nick Nunley4085f742010-07-26 13:15:06 +0000469 if (igb_sgmii_uses_mdio_82575(hw)) {
470 switch (hw->mac.type) {
471 case e1000_82575:
472 case e1000_82576:
473 mdic = rd32(E1000_MDIC);
474 mdic &= E1000_MDIC_PHY_MASK;
475 phy->addr = mdic >> E1000_MDIC_PHY_SHIFT;
476 break;
477 case e1000_82580:
478 case e1000_i350:
479 mdic = rd32(E1000_MDICNFG);
480 mdic &= E1000_MDICNFG_PHY_MASK;
481 phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT;
482 break;
483 default:
484 ret_val = -E1000_ERR_PHY;
485 goto out;
486 break;
487 }
488 ret_val = igb_get_phy_id(hw);
489 goto out;
490 }
491
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000492 /* Power on sgmii phy if it is disabled */
493 ctrl_ext = rd32(E1000_CTRL_EXT);
494 wr32(E1000_CTRL_EXT, ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
495 wrfl();
496 msleep(300);
497
Auke Kok9d5c8242008-01-24 02:22:38 -0800498 /*
499 * The address field in the I2CCMD register is 3 bits and 0 is invalid.
500 * Therefore, we need to test 1-7
501 */
502 for (phy->addr = 1; phy->addr < 8; phy->addr++) {
503 ret_val = igb_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
504 if (ret_val == 0) {
Auke Kok652fff32008-06-27 11:00:18 -0700505 hw_dbg("Vendor ID 0x%08X read at address %u\n",
506 phy_id, phy->addr);
Auke Kok9d5c8242008-01-24 02:22:38 -0800507 /*
508 * At the time of this writing, The M88 part is
509 * the only supported SGMII PHY product.
510 */
511 if (phy_id == M88_VENDOR)
512 break;
513 } else {
Auke Kok652fff32008-06-27 11:00:18 -0700514 hw_dbg("PHY address %u was unreadable\n", phy->addr);
Auke Kok9d5c8242008-01-24 02:22:38 -0800515 }
516 }
517
518 /* A valid PHY type couldn't be found. */
519 if (phy->addr == 8) {
520 phy->addr = 0;
521 ret_val = -E1000_ERR_PHY;
522 goto out;
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000523 } else {
524 ret_val = igb_get_phy_id(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -0800525 }
526
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000527 /* restore previous sfp cage power state */
528 wr32(E1000_CTRL_EXT, ctrl_ext);
Auke Kok9d5c8242008-01-24 02:22:38 -0800529
530out:
531 return ret_val;
532}
533
534/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700535 * igb_phy_hw_reset_sgmii_82575 - Performs a PHY reset
Auke Kok9d5c8242008-01-24 02:22:38 -0800536 * @hw: pointer to the HW structure
537 *
538 * Resets the PHY using the serial gigabit media independent interface.
539 **/
540static s32 igb_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
541{
542 s32 ret_val;
543
544 /*
545 * This isn't a true "hard" reset, but is the only reset
546 * available to us at this time.
547 */
548
Auke Kok652fff32008-06-27 11:00:18 -0700549 hw_dbg("Soft resetting SGMII attached PHY...\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800550
551 /*
552 * SFP documentation requires the following to configure the SPF module
553 * to work on SGMII. No further documentation is given.
554 */
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000555 ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
Auke Kok9d5c8242008-01-24 02:22:38 -0800556 if (ret_val)
557 goto out;
558
559 ret_val = igb_phy_sw_reset(hw);
560
561out:
562 return ret_val;
563}
564
565/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700566 * igb_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
Auke Kok9d5c8242008-01-24 02:22:38 -0800567 * @hw: pointer to the HW structure
568 * @active: true to enable LPLU, false to disable
569 *
570 * Sets the LPLU D0 state according to the active flag. When
571 * activating LPLU this function also disables smart speed
572 * and vice versa. LPLU will not be activated unless the
573 * device autonegotiation advertisement meets standards of
574 * either 10 or 10/100 or 10/100/1000 at all duplexes.
575 * This is a function pointer entry point only called by
576 * PHY setup routines.
577 **/
578static s32 igb_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
579{
580 struct e1000_phy_info *phy = &hw->phy;
581 s32 ret_val;
582 u16 data;
583
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000584 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800585 if (ret_val)
586 goto out;
587
588 if (active) {
589 data |= IGP02E1000_PM_D0_LPLU;
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000590 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
Auke Kok652fff32008-06-27 11:00:18 -0700591 data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800592 if (ret_val)
593 goto out;
594
595 /* When LPLU is enabled, we should disable SmartSpeed */
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000596 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
Auke Kok652fff32008-06-27 11:00:18 -0700597 &data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800598 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000599 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
Auke Kok652fff32008-06-27 11:00:18 -0700600 data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800601 if (ret_val)
602 goto out;
603 } else {
604 data &= ~IGP02E1000_PM_D0_LPLU;
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000605 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
Auke Kok652fff32008-06-27 11:00:18 -0700606 data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800607 /*
608 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
609 * during Dx states where the power conservation is most
610 * important. During driver activity we should enable
611 * SmartSpeed, so performance is maintained.
612 */
613 if (phy->smart_speed == e1000_smart_speed_on) {
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000614 ret_val = phy->ops.read_reg(hw,
Auke Kok652fff32008-06-27 11:00:18 -0700615 IGP01E1000_PHY_PORT_CONFIG, &data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800616 if (ret_val)
617 goto out;
618
619 data |= IGP01E1000_PSCFR_SMART_SPEED;
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000620 ret_val = phy->ops.write_reg(hw,
Auke Kok652fff32008-06-27 11:00:18 -0700621 IGP01E1000_PHY_PORT_CONFIG, data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800622 if (ret_val)
623 goto out;
624 } else if (phy->smart_speed == e1000_smart_speed_off) {
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000625 ret_val = phy->ops.read_reg(hw,
Auke Kok652fff32008-06-27 11:00:18 -0700626 IGP01E1000_PHY_PORT_CONFIG, &data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800627 if (ret_val)
628 goto out;
629
630 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
Alexander Duycka8d2a0c2009-02-06 23:17:26 +0000631 ret_val = phy->ops.write_reg(hw,
Auke Kok652fff32008-06-27 11:00:18 -0700632 IGP01E1000_PHY_PORT_CONFIG, data);
Auke Kok9d5c8242008-01-24 02:22:38 -0800633 if (ret_val)
634 goto out;
635 }
636 }
637
638out:
639 return ret_val;
640}
641
642/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700643 * igb_acquire_nvm_82575 - Request for access to EEPROM
Auke Kok9d5c8242008-01-24 02:22:38 -0800644 * @hw: pointer to the HW structure
645 *
Auke Kok652fff32008-06-27 11:00:18 -0700646 * Acquire the necessary semaphores for exclusive access to the EEPROM.
Auke Kok9d5c8242008-01-24 02:22:38 -0800647 * Set the EEPROM access request bit and wait for EEPROM access grant bit.
648 * Return successful if access grant bit set, else clear the request for
649 * EEPROM access and return -E1000_ERR_NVM (-1).
650 **/
651static s32 igb_acquire_nvm_82575(struct e1000_hw *hw)
652{
653 s32 ret_val;
654
655 ret_val = igb_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
656 if (ret_val)
657 goto out;
658
659 ret_val = igb_acquire_nvm(hw);
660
661 if (ret_val)
662 igb_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
663
664out:
665 return ret_val;
666}
667
668/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700669 * igb_release_nvm_82575 - Release exclusive access to EEPROM
Auke Kok9d5c8242008-01-24 02:22:38 -0800670 * @hw: pointer to the HW structure
671 *
672 * Stop any current commands to the EEPROM and clear the EEPROM request bit,
673 * then release the semaphores acquired.
674 **/
675static void igb_release_nvm_82575(struct e1000_hw *hw)
676{
677 igb_release_nvm(hw);
678 igb_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
679}
680
681/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700682 * igb_acquire_swfw_sync_82575 - Acquire SW/FW semaphore
Auke Kok9d5c8242008-01-24 02:22:38 -0800683 * @hw: pointer to the HW structure
684 * @mask: specifies which semaphore to acquire
685 *
686 * Acquire the SW/FW semaphore to access the PHY or NVM. The mask
687 * will also specify which port we're acquiring the lock for.
688 **/
689static s32 igb_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
690{
691 u32 swfw_sync;
692 u32 swmask = mask;
693 u32 fwmask = mask << 16;
694 s32 ret_val = 0;
695 s32 i = 0, timeout = 200; /* FIXME: find real value to use here */
696
697 while (i < timeout) {
698 if (igb_get_hw_semaphore(hw)) {
699 ret_val = -E1000_ERR_SWFW_SYNC;
700 goto out;
701 }
702
703 swfw_sync = rd32(E1000_SW_FW_SYNC);
704 if (!(swfw_sync & (fwmask | swmask)))
705 break;
706
707 /*
708 * Firmware currently using resource (fwmask)
709 * or other software thread using resource (swmask)
710 */
711 igb_put_hw_semaphore(hw);
712 mdelay(5);
713 i++;
714 }
715
716 if (i == timeout) {
Auke Kok652fff32008-06-27 11:00:18 -0700717 hw_dbg("Driver can't access resource, SW_FW_SYNC timeout.\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800718 ret_val = -E1000_ERR_SWFW_SYNC;
719 goto out;
720 }
721
722 swfw_sync |= swmask;
723 wr32(E1000_SW_FW_SYNC, swfw_sync);
724
725 igb_put_hw_semaphore(hw);
726
727out:
728 return ret_val;
729}
730
731/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700732 * igb_release_swfw_sync_82575 - Release SW/FW semaphore
Auke Kok9d5c8242008-01-24 02:22:38 -0800733 * @hw: pointer to the HW structure
734 * @mask: specifies which semaphore to acquire
735 *
736 * Release the SW/FW semaphore used to access the PHY or NVM. The mask
737 * will also specify which port we're releasing the lock for.
738 **/
739static void igb_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
740{
741 u32 swfw_sync;
742
743 while (igb_get_hw_semaphore(hw) != 0);
744 /* Empty */
745
746 swfw_sync = rd32(E1000_SW_FW_SYNC);
747 swfw_sync &= ~mask;
748 wr32(E1000_SW_FW_SYNC, swfw_sync);
749
750 igb_put_hw_semaphore(hw);
751}
752
753/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700754 * igb_get_cfg_done_82575 - Read config done bit
Auke Kok9d5c8242008-01-24 02:22:38 -0800755 * @hw: pointer to the HW structure
756 *
757 * Read the management control register for the config done bit for
758 * completion status. NOTE: silicon which is EEPROM-less will fail trying
759 * to read the config done bit, so an error is *ONLY* logged and returns
760 * 0. If we were to return with error, EEPROM-less silicon
761 * would not be able to be reset or change link.
762 **/
763static s32 igb_get_cfg_done_82575(struct e1000_hw *hw)
764{
765 s32 timeout = PHY_CFG_TIMEOUT;
766 s32 ret_val = 0;
767 u32 mask = E1000_NVM_CFG_DONE_PORT_0;
768
769 if (hw->bus.func == 1)
770 mask = E1000_NVM_CFG_DONE_PORT_1;
Alexander Duyckbb2ac472009-11-19 12:42:01 +0000771 else if (hw->bus.func == E1000_FUNC_2)
772 mask = E1000_NVM_CFG_DONE_PORT_2;
773 else if (hw->bus.func == E1000_FUNC_3)
774 mask = E1000_NVM_CFG_DONE_PORT_3;
Auke Kok9d5c8242008-01-24 02:22:38 -0800775
776 while (timeout) {
777 if (rd32(E1000_EEMNGCTL) & mask)
778 break;
779 msleep(1);
780 timeout--;
781 }
782 if (!timeout)
Auke Kok652fff32008-06-27 11:00:18 -0700783 hw_dbg("MNG configuration cycle has not completed.\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800784
785 /* If EEPROM is not marked present, init the PHY manually */
786 if (((rd32(E1000_EECD) & E1000_EECD_PRES) == 0) &&
787 (hw->phy.type == e1000_phy_igp_3))
788 igb_phy_init_script_igp3(hw);
789
790 return ret_val;
791}
792
793/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700794 * igb_check_for_link_82575 - Check for link
Auke Kok9d5c8242008-01-24 02:22:38 -0800795 * @hw: pointer to the HW structure
796 *
797 * If sgmii is enabled, then use the pcs register to determine link, otherwise
798 * use the generic interface for determining link.
799 **/
800static s32 igb_check_for_link_82575(struct e1000_hw *hw)
801{
802 s32 ret_val;
803 u16 speed, duplex;
804
Alexander Duyck70d92f82009-10-05 06:31:47 +0000805 if (hw->phy.media_type != e1000_media_type_copper) {
Auke Kok9d5c8242008-01-24 02:22:38 -0800806 ret_val = igb_get_pcs_speed_and_duplex_82575(hw, &speed,
Alexander Duyck2d064c02008-07-08 15:10:12 -0700807 &duplex);
Alexander Duyck5d0932a2009-01-31 00:53:18 -0800808 /*
809 * Use this flag to determine if link needs to be checked or
810 * not. If we have link clear the flag so that we do not
811 * continue to check for link.
812 */
813 hw->mac.get_link_status = !hw->mac.serdes_has_link;
814 } else {
Auke Kok9d5c8242008-01-24 02:22:38 -0800815 ret_val = igb_check_for_copper_link(hw);
Alexander Duyck5d0932a2009-01-31 00:53:18 -0800816 }
Auke Kok9d5c8242008-01-24 02:22:38 -0800817
818 return ret_val;
819}
Alexander Duyck70d92f82009-10-05 06:31:47 +0000820
Auke Kok9d5c8242008-01-24 02:22:38 -0800821/**
Nick Nunley88a268c2010-02-17 01:01:59 +0000822 * igb_power_up_serdes_link_82575 - Power up the serdes link after shutdown
823 * @hw: pointer to the HW structure
824 **/
825void igb_power_up_serdes_link_82575(struct e1000_hw *hw)
826{
827 u32 reg;
828
829
830 if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
831 !igb_sgmii_active_82575(hw))
832 return;
833
834 /* Enable PCS to turn on link */
835 reg = rd32(E1000_PCS_CFG0);
836 reg |= E1000_PCS_CFG_PCS_EN;
837 wr32(E1000_PCS_CFG0, reg);
838
839 /* Power up the laser */
840 reg = rd32(E1000_CTRL_EXT);
841 reg &= ~E1000_CTRL_EXT_SDP3_DATA;
842 wr32(E1000_CTRL_EXT, reg);
843
844 /* flush the write to verify completion */
845 wrfl();
846 msleep(1);
847}
848
849/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700850 * igb_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
Auke Kok9d5c8242008-01-24 02:22:38 -0800851 * @hw: pointer to the HW structure
852 * @speed: stores the current speed
853 * @duplex: stores the current duplex
854 *
Auke Kok652fff32008-06-27 11:00:18 -0700855 * Using the physical coding sub-layer (PCS), retrieve the current speed and
Auke Kok9d5c8242008-01-24 02:22:38 -0800856 * duplex, then store the values in the pointers provided.
857 **/
858static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, u16 *speed,
859 u16 *duplex)
860{
861 struct e1000_mac_info *mac = &hw->mac;
862 u32 pcs;
863
864 /* Set up defaults for the return values of this function */
865 mac->serdes_has_link = false;
866 *speed = 0;
867 *duplex = 0;
868
869 /*
870 * Read the PCS Status register for link state. For non-copper mode,
871 * the status register is not accurate. The PCS status register is
872 * used instead.
873 */
874 pcs = rd32(E1000_PCS_LSTAT);
875
876 /*
877 * The link up bit determines when link is up on autoneg. The sync ok
878 * gets set once both sides sync up and agree upon link. Stable link
879 * can be determined by checking for both link up and link sync ok
880 */
881 if ((pcs & E1000_PCS_LSTS_LINK_OK) && (pcs & E1000_PCS_LSTS_SYNK_OK)) {
882 mac->serdes_has_link = true;
883
884 /* Detect and store PCS speed */
885 if (pcs & E1000_PCS_LSTS_SPEED_1000) {
886 *speed = SPEED_1000;
887 } else if (pcs & E1000_PCS_LSTS_SPEED_100) {
888 *speed = SPEED_100;
889 } else {
890 *speed = SPEED_10;
891 }
892
893 /* Detect and store PCS duplex */
894 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) {
895 *duplex = FULL_DUPLEX;
896 } else {
897 *duplex = HALF_DUPLEX;
898 }
899 }
900
901 return 0;
902}
903
904/**
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000905 * igb_shutdown_serdes_link_82575 - Remove link during power down
Alexander Duyck2d064c02008-07-08 15:10:12 -0700906 * @hw: pointer to the HW structure
907 *
908 * In the case of fiber serdes, shut down optics and PCS on driver unload
909 * when management pass thru is not enabled.
910 **/
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000911void igb_shutdown_serdes_link_82575(struct e1000_hw *hw)
Alexander Duyck2d064c02008-07-08 15:10:12 -0700912{
913 u32 reg;
914
Nick Nunley53c992f2010-02-17 01:01:40 +0000915 if (hw->phy.media_type != e1000_media_type_internal_serdes &&
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000916 igb_sgmii_active_82575(hw))
Alexander Duyck2d064c02008-07-08 15:10:12 -0700917 return;
918
Nick Nunley53c992f2010-02-17 01:01:40 +0000919 if (!igb_enable_mng_pass_thru(hw)) {
Alexander Duyck2d064c02008-07-08 15:10:12 -0700920 /* Disable PCS to turn off link */
921 reg = rd32(E1000_PCS_CFG0);
922 reg &= ~E1000_PCS_CFG_PCS_EN;
923 wr32(E1000_PCS_CFG0, reg);
924
925 /* shutdown the laser */
926 reg = rd32(E1000_CTRL_EXT);
Alexander Duyck2fb02a22009-09-14 08:22:54 +0000927 reg |= E1000_CTRL_EXT_SDP3_DATA;
Alexander Duyck2d064c02008-07-08 15:10:12 -0700928 wr32(E1000_CTRL_EXT, reg);
929
930 /* flush the write to verify completion */
931 wrfl();
932 msleep(1);
933 }
Auke Kok9d5c8242008-01-24 02:22:38 -0800934}
935
936/**
Jeff Kirsher733596b2008-06-27 10:59:59 -0700937 * igb_reset_hw_82575 - Reset hardware
Auke Kok9d5c8242008-01-24 02:22:38 -0800938 * @hw: pointer to the HW structure
939 *
940 * This resets the hardware into a known state. This is a
941 * function pointer entry point called by the api module.
942 **/
943static s32 igb_reset_hw_82575(struct e1000_hw *hw)
944{
945 u32 ctrl, icr;
946 s32 ret_val;
947
948 /*
949 * Prevent the PCI-E bus from sticking if there is no TLP connection
950 * on the last TLP read/write transaction when MAC is reset.
951 */
952 ret_val = igb_disable_pcie_master(hw);
953 if (ret_val)
Auke Kok652fff32008-06-27 11:00:18 -0700954 hw_dbg("PCI-E Master disable polling has failed.\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800955
Alexander Duyck009bc062009-07-23 18:08:35 +0000956 /* set the completion timeout for interface */
957 ret_val = igb_set_pcie_completion_timeout(hw);
958 if (ret_val) {
959 hw_dbg("PCI-E Set completion timeout has failed.\n");
960 }
961
Auke Kok652fff32008-06-27 11:00:18 -0700962 hw_dbg("Masking off all interrupts\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800963 wr32(E1000_IMC, 0xffffffff);
964
965 wr32(E1000_RCTL, 0);
966 wr32(E1000_TCTL, E1000_TCTL_PSP);
967 wrfl();
968
969 msleep(10);
970
971 ctrl = rd32(E1000_CTRL);
972
Auke Kok652fff32008-06-27 11:00:18 -0700973 hw_dbg("Issuing a global reset to MAC\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800974 wr32(E1000_CTRL, ctrl | E1000_CTRL_RST);
975
976 ret_val = igb_get_auto_rd_done(hw);
977 if (ret_val) {
978 /*
979 * When auto config read does not complete, do not
980 * return with an error. This can happen in situations
981 * where there is no eeprom and prevents getting link.
982 */
Auke Kok652fff32008-06-27 11:00:18 -0700983 hw_dbg("Auto Read Done did not complete\n");
Auke Kok9d5c8242008-01-24 02:22:38 -0800984 }
985
986 /* If EEPROM is not present, run manual init scripts */
987 if ((rd32(E1000_EECD) & E1000_EECD_PRES) == 0)
988 igb_reset_init_script_82575(hw);
989
990 /* Clear any pending interrupt events. */
991 wr32(E1000_IMC, 0xffffffff);
992 icr = rd32(E1000_ICR);
993
Alexander Duyck5ac16652009-07-23 18:09:12 +0000994 /* Install any alternate MAC address into RAR0 */
995 ret_val = igb_check_alt_mac_addr(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -0800996
997 return ret_val;
998}
999
1000/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001001 * igb_init_hw_82575 - Initialize hardware
Auke Kok9d5c8242008-01-24 02:22:38 -08001002 * @hw: pointer to the HW structure
1003 *
1004 * This inits the hardware readying it for operation.
1005 **/
1006static s32 igb_init_hw_82575(struct e1000_hw *hw)
1007{
1008 struct e1000_mac_info *mac = &hw->mac;
1009 s32 ret_val;
1010 u16 i, rar_count = mac->rar_entry_count;
1011
1012 /* Initialize identification LED */
1013 ret_val = igb_id_led_init(hw);
1014 if (ret_val) {
Auke Kok652fff32008-06-27 11:00:18 -07001015 hw_dbg("Error initializing identification LED\n");
Auke Kok9d5c8242008-01-24 02:22:38 -08001016 /* This is not fatal and we should not stop init due to this */
1017 }
1018
1019 /* Disabling VLAN filtering */
Auke Kok652fff32008-06-27 11:00:18 -07001020 hw_dbg("Initializing the IEEE VLAN\n");
Auke Kok9d5c8242008-01-24 02:22:38 -08001021 igb_clear_vfta(hw);
1022
1023 /* Setup the receive address */
Alexander Duyck5ac16652009-07-23 18:09:12 +00001024 igb_init_rx_addrs(hw, rar_count);
1025
Auke Kok9d5c8242008-01-24 02:22:38 -08001026 /* Zero out the Multicast HASH table */
Auke Kok652fff32008-06-27 11:00:18 -07001027 hw_dbg("Zeroing the MTA\n");
Auke Kok9d5c8242008-01-24 02:22:38 -08001028 for (i = 0; i < mac->mta_reg_count; i++)
1029 array_wr32(E1000_MTA, i, 0);
1030
Alexander Duyck68d480c42009-10-05 06:33:08 +00001031 /* Zero out the Unicast HASH table */
1032 hw_dbg("Zeroing the UTA\n");
1033 for (i = 0; i < mac->uta_reg_count; i++)
1034 array_wr32(E1000_UTA, i, 0);
1035
Auke Kok9d5c8242008-01-24 02:22:38 -08001036 /* Setup link and flow control */
1037 ret_val = igb_setup_link(hw);
1038
1039 /*
1040 * Clear all of the statistics registers (clear on read). It is
1041 * important that we do this after we have tried to establish link
1042 * because the symbol error count will increment wildly if there
1043 * is no link.
1044 */
1045 igb_clear_hw_cntrs_82575(hw);
1046
1047 return ret_val;
1048}
1049
1050/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001051 * igb_setup_copper_link_82575 - Configure copper link settings
Auke Kok9d5c8242008-01-24 02:22:38 -08001052 * @hw: pointer to the HW structure
1053 *
1054 * Configures the link for auto-neg or forced speed and duplex. Then we check
1055 * for link, once link is established calls to configure collision distance
1056 * and flow control are called.
1057 **/
1058static s32 igb_setup_copper_link_82575(struct e1000_hw *hw)
1059{
Alexander Duyck12645a12009-07-23 18:08:16 +00001060 u32 ctrl;
Auke Kok9d5c8242008-01-24 02:22:38 -08001061 s32 ret_val;
Auke Kok9d5c8242008-01-24 02:22:38 -08001062
1063 ctrl = rd32(E1000_CTRL);
1064 ctrl |= E1000_CTRL_SLU;
1065 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1066 wr32(E1000_CTRL, ctrl);
1067
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001068 ret_val = igb_setup_serdes_link_82575(hw);
1069 if (ret_val)
1070 goto out;
1071
1072 if (igb_sgmii_active_82575(hw) && !hw->phy.reset_disable) {
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001073 /* allow time for SFP cage time to power up phy */
1074 msleep(300);
1075
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001076 ret_val = hw->phy.ops.reset(hw);
1077 if (ret_val) {
1078 hw_dbg("Error resetting the PHY.\n");
1079 goto out;
1080 }
1081 }
Auke Kok9d5c8242008-01-24 02:22:38 -08001082 switch (hw->phy.type) {
1083 case e1000_phy_m88:
Joseph Gasparakis308fb392010-09-22 17:56:44 +00001084 if (hw->phy.id == I347AT4_E_PHY_ID ||
1085 hw->phy.id == M88E1112_E_PHY_ID)
1086 ret_val = igb_copper_link_setup_m88_gen2(hw);
1087 else
1088 ret_val = igb_copper_link_setup_m88(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -08001089 break;
1090 case e1000_phy_igp_3:
1091 ret_val = igb_copper_link_setup_igp(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -08001092 break;
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001093 case e1000_phy_82580:
1094 ret_val = igb_copper_link_setup_82580(hw);
1095 break;
Auke Kok9d5c8242008-01-24 02:22:38 -08001096 default:
1097 ret_val = -E1000_ERR_PHY;
1098 break;
1099 }
1100
1101 if (ret_val)
1102 goto out;
1103
Alexander Duyck81fadd82009-10-05 06:35:03 +00001104 ret_val = igb_setup_copper_link(hw);
Auke Kok9d5c8242008-01-24 02:22:38 -08001105out:
1106 return ret_val;
1107}
1108
1109/**
Alexander Duyck70d92f82009-10-05 06:31:47 +00001110 * igb_setup_serdes_link_82575 - Setup link for serdes
Auke Kok9d5c8242008-01-24 02:22:38 -08001111 * @hw: pointer to the HW structure
1112 *
Alexander Duyck70d92f82009-10-05 06:31:47 +00001113 * Configure the physical coding sub-layer (PCS) link. The PCS link is
1114 * used on copper connections where the serialized gigabit media independent
1115 * interface (sgmii), or serdes fiber is being used. Configures the link
1116 * for auto-negotiation or forces speed/duplex.
Auke Kok9d5c8242008-01-24 02:22:38 -08001117 **/
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001118static s32 igb_setup_serdes_link_82575(struct e1000_hw *hw)
Auke Kok9d5c8242008-01-24 02:22:38 -08001119{
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001120 u32 ctrl_ext, ctrl_reg, reg;
1121 bool pcs_autoneg;
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001122
1123 if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1124 !igb_sgmii_active_82575(hw))
1125 return 0;
Auke Kok9d5c8242008-01-24 02:22:38 -08001126
1127 /*
1128 * On the 82575, SerDes loopback mode persists until it is
1129 * explicitly turned off or a power cycle is performed. A read to
1130 * the register does not indicate its status. Therefore, we ensure
1131 * loopback mode is disabled during initialization.
1132 */
1133 wr32(E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1134
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001135 /* power on the sfp cage if present */
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001136 ctrl_ext = rd32(E1000_CTRL_EXT);
1137 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1138 wr32(E1000_CTRL_EXT, ctrl_ext);
Auke Kok9d5c8242008-01-24 02:22:38 -08001139
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001140 ctrl_reg = rd32(E1000_CTRL);
1141 ctrl_reg |= E1000_CTRL_SLU;
1142
1143 if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576) {
1144 /* set both sw defined pins */
1145 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
1146
1147 /* Set switch control to serdes energy detect */
1148 reg = rd32(E1000_CONNSW);
1149 reg |= E1000_CONNSW_ENRGSRC;
1150 wr32(E1000_CONNSW, reg);
Alexander Duyck921aa742009-01-21 14:42:28 -08001151 }
1152
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001153 reg = rd32(E1000_PCS_LCTL);
1154
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001155 /* default pcs_autoneg to the same setting as mac autoneg */
1156 pcs_autoneg = hw->mac.autoneg;
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001157
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001158 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
1159 case E1000_CTRL_EXT_LINK_MODE_SGMII:
1160 /* sgmii mode lets the phy handle forcing speed/duplex */
1161 pcs_autoneg = true;
1162 /* autoneg time out should be disabled for SGMII mode */
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001163 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001164 break;
1165 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1166 /* disable PCS autoneg and support parallel detect only */
1167 pcs_autoneg = false;
1168 default:
1169 /*
1170 * non-SGMII modes only supports a speed of 1000/Full for the
1171 * link so it is best to just force the MAC and let the pcs
1172 * link either autoneg or be forced to 1000/Full
1173 */
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001174 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
1175 E1000_CTRL_FD | E1000_CTRL_FRCDPX;
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001176
1177 /* set speed of 1000/Full if speed/duplex is forced */
1178 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
1179 break;
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001180 }
1181
1182 wr32(E1000_CTRL, ctrl_reg);
Auke Kok9d5c8242008-01-24 02:22:38 -08001183
1184 /*
1185 * New SerDes mode allows for forcing speed or autonegotiating speed
1186 * at 1gb. Autoneg should be default set by most drivers. This is the
1187 * mode that will be compatible with older link partners and switches.
1188 * However, both are supported by the hardware and some drivers/tools.
1189 */
Auke Kok9d5c8242008-01-24 02:22:38 -08001190 reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
1191 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1192
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001193 /*
1194 * We force flow control to prevent the CTRL register values from being
1195 * overwritten by the autonegotiated flow control values
1196 */
1197 reg |= E1000_PCS_LCTL_FORCE_FCTRL;
1198
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001199 if (pcs_autoneg) {
Auke Kok9d5c8242008-01-24 02:22:38 -08001200 /* Set PCS register for autoneg */
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001201 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
Alexander Duyck70d92f82009-10-05 06:31:47 +00001202 E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001203 hw_dbg("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
Auke Kok9d5c8242008-01-24 02:22:38 -08001204 } else {
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001205 /* Set PCS register for forced link */
Alexander Duyckd68caec2009-12-23 13:20:47 +00001206 reg |= E1000_PCS_LCTL_FSD; /* Force Speed */
Alexander Duyck70d92f82009-10-05 06:31:47 +00001207
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001208 hw_dbg("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
Auke Kok9d5c8242008-01-24 02:22:38 -08001209 }
Alexander Duyck726c09e2008-08-04 14:59:56 -07001210
Auke Kok9d5c8242008-01-24 02:22:38 -08001211 wr32(E1000_PCS_LCTL, reg);
1212
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001213 if (!igb_sgmii_active_82575(hw))
1214 igb_force_mac_fc(hw);
1215
Auke Kok9d5c8242008-01-24 02:22:38 -08001216 return 0;
1217}
1218
1219/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001220 * igb_sgmii_active_82575 - Return sgmii state
Auke Kok9d5c8242008-01-24 02:22:38 -08001221 * @hw: pointer to the HW structure
1222 *
1223 * 82575 silicon has a serialized gigabit media independent interface (sgmii)
1224 * which can be enabled for use in the embedded applications. Simply
1225 * return the current state of the sgmii interface.
1226 **/
1227static bool igb_sgmii_active_82575(struct e1000_hw *hw)
1228{
Alexander Duyckc1889bf2009-02-06 23:16:45 +00001229 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
Alexander Duyckc1889bf2009-02-06 23:16:45 +00001230 return dev_spec->sgmii_active;
Auke Kok9d5c8242008-01-24 02:22:38 -08001231}
1232
1233/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001234 * igb_reset_init_script_82575 - Inits HW defaults after reset
Auke Kok9d5c8242008-01-24 02:22:38 -08001235 * @hw: pointer to the HW structure
1236 *
1237 * Inits recommended HW defaults after a reset when there is no EEPROM
1238 * detected. This is only for the 82575.
1239 **/
1240static s32 igb_reset_init_script_82575(struct e1000_hw *hw)
1241{
1242 if (hw->mac.type == e1000_82575) {
Auke Kok652fff32008-06-27 11:00:18 -07001243 hw_dbg("Running reset init script for 82575\n");
Auke Kok9d5c8242008-01-24 02:22:38 -08001244 /* SerDes configuration via SERDESCTRL */
1245 igb_write_8bit_ctrl_reg(hw, E1000_SCTL, 0x00, 0x0C);
1246 igb_write_8bit_ctrl_reg(hw, E1000_SCTL, 0x01, 0x78);
1247 igb_write_8bit_ctrl_reg(hw, E1000_SCTL, 0x1B, 0x23);
1248 igb_write_8bit_ctrl_reg(hw, E1000_SCTL, 0x23, 0x15);
1249
1250 /* CCM configuration via CCMCTL register */
1251 igb_write_8bit_ctrl_reg(hw, E1000_CCMCTL, 0x14, 0x00);
1252 igb_write_8bit_ctrl_reg(hw, E1000_CCMCTL, 0x10, 0x00);
1253
1254 /* PCIe lanes configuration */
1255 igb_write_8bit_ctrl_reg(hw, E1000_GIOCTL, 0x00, 0xEC);
1256 igb_write_8bit_ctrl_reg(hw, E1000_GIOCTL, 0x61, 0xDF);
1257 igb_write_8bit_ctrl_reg(hw, E1000_GIOCTL, 0x34, 0x05);
1258 igb_write_8bit_ctrl_reg(hw, E1000_GIOCTL, 0x2F, 0x81);
1259
1260 /* PCIe PLL Configuration */
1261 igb_write_8bit_ctrl_reg(hw, E1000_SCCTL, 0x02, 0x47);
1262 igb_write_8bit_ctrl_reg(hw, E1000_SCCTL, 0x14, 0x00);
1263 igb_write_8bit_ctrl_reg(hw, E1000_SCCTL, 0x10, 0x00);
1264 }
1265
1266 return 0;
1267}
1268
1269/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001270 * igb_read_mac_addr_82575 - Read device MAC address
Auke Kok9d5c8242008-01-24 02:22:38 -08001271 * @hw: pointer to the HW structure
1272 **/
1273static s32 igb_read_mac_addr_82575(struct e1000_hw *hw)
1274{
1275 s32 ret_val = 0;
1276
Alexander Duyck22896632009-10-05 06:34:25 +00001277 /*
1278 * If there's an alternate MAC address place it in RAR0
1279 * so that it will override the Si installed default perm
1280 * address.
1281 */
1282 ret_val = igb_check_alt_mac_addr(hw);
1283 if (ret_val)
1284 goto out;
Auke Kok9d5c8242008-01-24 02:22:38 -08001285
Alexander Duyck22896632009-10-05 06:34:25 +00001286 ret_val = igb_read_mac_addr(hw);
1287
1288out:
Auke Kok9d5c8242008-01-24 02:22:38 -08001289 return ret_val;
1290}
1291
1292/**
Nick Nunley88a268c2010-02-17 01:01:59 +00001293 * igb_power_down_phy_copper_82575 - Remove link during PHY power down
1294 * @hw: pointer to the HW structure
1295 *
1296 * In the case of a PHY power down to save power, or to turn off link during a
1297 * driver unload, or wake on lan is not enabled, remove the link.
1298 **/
1299void igb_power_down_phy_copper_82575(struct e1000_hw *hw)
1300{
1301 /* If the management interface is not enabled, then power down */
1302 if (!(igb_enable_mng_pass_thru(hw) || igb_check_reset_block(hw)))
1303 igb_power_down_phy_copper(hw);
Nick Nunley88a268c2010-02-17 01:01:59 +00001304}
1305
1306/**
Jeff Kirsher733596b2008-06-27 10:59:59 -07001307 * igb_clear_hw_cntrs_82575 - Clear device specific hardware counters
Auke Kok9d5c8242008-01-24 02:22:38 -08001308 * @hw: pointer to the HW structure
1309 *
1310 * Clears the hardware counters by reading the counter registers.
1311 **/
1312static void igb_clear_hw_cntrs_82575(struct e1000_hw *hw)
1313{
Auke Kok9d5c8242008-01-24 02:22:38 -08001314 igb_clear_hw_cntrs_base(hw);
1315
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001316 rd32(E1000_PRC64);
1317 rd32(E1000_PRC127);
1318 rd32(E1000_PRC255);
1319 rd32(E1000_PRC511);
1320 rd32(E1000_PRC1023);
1321 rd32(E1000_PRC1522);
1322 rd32(E1000_PTC64);
1323 rd32(E1000_PTC127);
1324 rd32(E1000_PTC255);
1325 rd32(E1000_PTC511);
1326 rd32(E1000_PTC1023);
1327 rd32(E1000_PTC1522);
Auke Kok9d5c8242008-01-24 02:22:38 -08001328
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001329 rd32(E1000_ALGNERRC);
1330 rd32(E1000_RXERRC);
1331 rd32(E1000_TNCRS);
1332 rd32(E1000_CEXTERR);
1333 rd32(E1000_TSCTC);
1334 rd32(E1000_TSCTFC);
Auke Kok9d5c8242008-01-24 02:22:38 -08001335
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001336 rd32(E1000_MGTPRC);
1337 rd32(E1000_MGTPDC);
1338 rd32(E1000_MGTPTC);
Auke Kok9d5c8242008-01-24 02:22:38 -08001339
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001340 rd32(E1000_IAC);
1341 rd32(E1000_ICRXOC);
Auke Kok9d5c8242008-01-24 02:22:38 -08001342
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001343 rd32(E1000_ICRXPTC);
1344 rd32(E1000_ICRXATC);
1345 rd32(E1000_ICTXPTC);
1346 rd32(E1000_ICTXATC);
1347 rd32(E1000_ICTXQEC);
1348 rd32(E1000_ICTXQMTC);
1349 rd32(E1000_ICRXDMTC);
Auke Kok9d5c8242008-01-24 02:22:38 -08001350
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001351 rd32(E1000_CBTMPC);
1352 rd32(E1000_HTDPMC);
1353 rd32(E1000_CBRMPC);
1354 rd32(E1000_RPTHC);
1355 rd32(E1000_HGPTC);
1356 rd32(E1000_HTCBDPC);
1357 rd32(E1000_HGORCL);
1358 rd32(E1000_HGORCH);
1359 rd32(E1000_HGOTCL);
1360 rd32(E1000_HGOTCH);
1361 rd32(E1000_LENERRS);
Auke Kok9d5c8242008-01-24 02:22:38 -08001362
1363 /* This register should not be read in copper configurations */
Alexander Duyck2fb02a22009-09-14 08:22:54 +00001364 if (hw->phy.media_type == e1000_media_type_internal_serdes ||
1365 igb_sgmii_active_82575(hw))
Alexander Duyckcc9073b2009-10-05 06:31:25 +00001366 rd32(E1000_SCVPC);
Auke Kok9d5c8242008-01-24 02:22:38 -08001367}
1368
Alexander Duyck662d7202008-06-27 11:00:29 -07001369/**
1370 * igb_rx_fifo_flush_82575 - Clean rx fifo after RX enable
1371 * @hw: pointer to the HW structure
1372 *
1373 * After rx enable if managability is enabled then there is likely some
1374 * bad data at the start of the fifo and possibly in the DMA fifo. This
1375 * function clears the fifos and flushes any packets that came in as rx was
1376 * being enabled.
1377 **/
1378void igb_rx_fifo_flush_82575(struct e1000_hw *hw)
1379{
1380 u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
1381 int i, ms_wait;
1382
1383 if (hw->mac.type != e1000_82575 ||
1384 !(rd32(E1000_MANC) & E1000_MANC_RCV_TCO_EN))
1385 return;
1386
1387 /* Disable all RX queues */
1388 for (i = 0; i < 4; i++) {
1389 rxdctl[i] = rd32(E1000_RXDCTL(i));
1390 wr32(E1000_RXDCTL(i),
1391 rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
1392 }
1393 /* Poll all queues to verify they have shut down */
1394 for (ms_wait = 0; ms_wait < 10; ms_wait++) {
1395 msleep(1);
1396 rx_enabled = 0;
1397 for (i = 0; i < 4; i++)
1398 rx_enabled |= rd32(E1000_RXDCTL(i));
1399 if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
1400 break;
1401 }
1402
1403 if (ms_wait == 10)
1404 hw_dbg("Queue disable timed out after 10ms\n");
1405
1406 /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
1407 * incoming packets are rejected. Set enable and wait 2ms so that
1408 * any packet that was coming in as RCTL.EN was set is flushed
1409 */
1410 rfctl = rd32(E1000_RFCTL);
1411 wr32(E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
1412
1413 rlpml = rd32(E1000_RLPML);
1414 wr32(E1000_RLPML, 0);
1415
1416 rctl = rd32(E1000_RCTL);
1417 temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
1418 temp_rctl |= E1000_RCTL_LPE;
1419
1420 wr32(E1000_RCTL, temp_rctl);
1421 wr32(E1000_RCTL, temp_rctl | E1000_RCTL_EN);
1422 wrfl();
1423 msleep(2);
1424
1425 /* Enable RX queues that were previously enabled and restore our
1426 * previous state
1427 */
1428 for (i = 0; i < 4; i++)
1429 wr32(E1000_RXDCTL(i), rxdctl[i]);
1430 wr32(E1000_RCTL, rctl);
1431 wrfl();
1432
1433 wr32(E1000_RLPML, rlpml);
1434 wr32(E1000_RFCTL, rfctl);
1435
1436 /* Flush receive errors generated by workaround */
1437 rd32(E1000_ROC);
1438 rd32(E1000_RNBC);
1439 rd32(E1000_MPC);
1440}
1441
Alexander Duyck4ae196d2009-02-19 20:40:07 -08001442/**
Alexander Duyck009bc062009-07-23 18:08:35 +00001443 * igb_set_pcie_completion_timeout - set pci-e completion timeout
1444 * @hw: pointer to the HW structure
1445 *
1446 * The defaults for 82575 and 82576 should be in the range of 50us to 50ms,
1447 * however the hardware default for these parts is 500us to 1ms which is less
1448 * than the 10ms recommended by the pci-e spec. To address this we need to
1449 * increase the value to either 10ms to 200ms for capability version 1 config,
1450 * or 16ms to 55ms for version 2.
1451 **/
1452static s32 igb_set_pcie_completion_timeout(struct e1000_hw *hw)
1453{
1454 u32 gcr = rd32(E1000_GCR);
1455 s32 ret_val = 0;
1456 u16 pcie_devctl2;
1457
1458 /* only take action if timeout value is defaulted to 0 */
1459 if (gcr & E1000_GCR_CMPL_TMOUT_MASK)
1460 goto out;
1461
1462 /*
1463 * if capababilities version is type 1 we can write the
1464 * timeout of 10ms to 200ms through the GCR register
1465 */
1466 if (!(gcr & E1000_GCR_CAP_VER2)) {
1467 gcr |= E1000_GCR_CMPL_TMOUT_10ms;
1468 goto out;
1469 }
1470
1471 /*
1472 * for version 2 capabilities we need to write the config space
1473 * directly in order to set the completion timeout value for
1474 * 16ms to 55ms
1475 */
1476 ret_val = igb_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
1477 &pcie_devctl2);
1478 if (ret_val)
1479 goto out;
1480
1481 pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms;
1482
1483 ret_val = igb_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
1484 &pcie_devctl2);
1485out:
1486 /* disable completion timeout resend */
1487 gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND;
1488
1489 wr32(E1000_GCR, gcr);
1490 return ret_val;
1491}
1492
1493/**
Greg Rose13800462010-11-06 02:08:26 +00001494 * igb_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing
1495 * @hw: pointer to the hardware struct
1496 * @enable: state to enter, either enabled or disabled
1497 * @pf: Physical Function pool - do not set anti-spoofing for the PF
1498 *
1499 * enables/disables L2 switch anti-spoofing functionality.
1500 **/
1501void igb_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
1502{
1503 u32 dtxswc;
1504
1505 switch (hw->mac.type) {
1506 case e1000_82576:
1507 case e1000_i350:
1508 dtxswc = rd32(E1000_DTXSWC);
1509 if (enable) {
1510 dtxswc |= (E1000_DTXSWC_MAC_SPOOF_MASK |
1511 E1000_DTXSWC_VLAN_SPOOF_MASK);
1512 /* The PF can spoof - it has to in order to
1513 * support emulation mode NICs */
1514 dtxswc ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
1515 } else {
1516 dtxswc &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
1517 E1000_DTXSWC_VLAN_SPOOF_MASK);
1518 }
1519 wr32(E1000_DTXSWC, dtxswc);
1520 break;
1521 default:
1522 break;
1523 }
1524}
1525
1526/**
Alexander Duyck4ae196d2009-02-19 20:40:07 -08001527 * igb_vmdq_set_loopback_pf - enable or disable vmdq loopback
1528 * @hw: pointer to the hardware struct
1529 * @enable: state to enter, either enabled or disabled
1530 *
1531 * enables/disables L2 switch loopback functionality.
1532 **/
1533void igb_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
1534{
1535 u32 dtxswc = rd32(E1000_DTXSWC);
1536
1537 if (enable)
1538 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1539 else
1540 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1541
1542 wr32(E1000_DTXSWC, dtxswc);
1543}
1544
1545/**
1546 * igb_vmdq_set_replication_pf - enable or disable vmdq replication
1547 * @hw: pointer to the hardware struct
1548 * @enable: state to enter, either enabled or disabled
1549 *
1550 * enables/disables replication of packets across multiple pools.
1551 **/
1552void igb_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
1553{
1554 u32 vt_ctl = rd32(E1000_VT_CTL);
1555
1556 if (enable)
1557 vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
1558 else
1559 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
1560
1561 wr32(E1000_VT_CTL, vt_ctl);
1562}
1563
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001564/**
1565 * igb_read_phy_reg_82580 - Read 82580 MDI control register
1566 * @hw: pointer to the HW structure
1567 * @offset: register offset to be read
1568 * @data: pointer to the read data
1569 *
1570 * Reads the MDI control register in the PHY at offset and stores the
1571 * information read to data.
1572 **/
1573static s32 igb_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
1574{
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001575 s32 ret_val;
1576
1577
1578 ret_val = hw->phy.ops.acquire(hw);
1579 if (ret_val)
1580 goto out;
1581
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001582 ret_val = igb_read_phy_reg_mdic(hw, offset, data);
1583
1584 hw->phy.ops.release(hw);
1585
1586out:
1587 return ret_val;
1588}
1589
1590/**
1591 * igb_write_phy_reg_82580 - Write 82580 MDI control register
1592 * @hw: pointer to the HW structure
1593 * @offset: register offset to write to
1594 * @data: data to write to register at offset
1595 *
1596 * Writes data to MDI control register in the PHY at offset.
1597 **/
1598static s32 igb_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
1599{
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001600 s32 ret_val;
1601
1602
1603 ret_val = hw->phy.ops.acquire(hw);
1604 if (ret_val)
1605 goto out;
1606
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001607 ret_val = igb_write_phy_reg_mdic(hw, offset, data);
1608
1609 hw->phy.ops.release(hw);
1610
1611out:
1612 return ret_val;
1613}
1614
1615/**
Nick Nunley08451e22010-07-26 13:15:29 +00001616 * igb_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
1617 * @hw: pointer to the HW structure
1618 *
1619 * This resets the the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
1620 * the values found in the EEPROM. This addresses an issue in which these
1621 * bits are not restored from EEPROM after reset.
1622 **/
1623static s32 igb_reset_mdicnfg_82580(struct e1000_hw *hw)
1624{
1625 s32 ret_val = 0;
1626 u32 mdicnfg;
Gasparakis, Joseph1b5dda32010-12-09 01:41:01 +00001627 u16 nvm_data = 0;
Nick Nunley08451e22010-07-26 13:15:29 +00001628
1629 if (hw->mac.type != e1000_82580)
1630 goto out;
1631 if (!igb_sgmii_active_82575(hw))
1632 goto out;
1633
1634 ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
1635 NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
1636 &nvm_data);
1637 if (ret_val) {
1638 hw_dbg("NVM Read Error\n");
1639 goto out;
1640 }
1641
1642 mdicnfg = rd32(E1000_MDICNFG);
1643 if (nvm_data & NVM_WORD24_EXT_MDIO)
1644 mdicnfg |= E1000_MDICNFG_EXT_MDIO;
1645 if (nvm_data & NVM_WORD24_COM_MDIO)
1646 mdicnfg |= E1000_MDICNFG_COM_MDIO;
1647 wr32(E1000_MDICNFG, mdicnfg);
1648out:
1649 return ret_val;
1650}
1651
1652/**
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001653 * igb_reset_hw_82580 - Reset hardware
1654 * @hw: pointer to the HW structure
1655 *
1656 * This resets function or entire device (all ports, etc.)
1657 * to a known state.
1658 **/
1659static s32 igb_reset_hw_82580(struct e1000_hw *hw)
1660{
1661 s32 ret_val = 0;
1662 /* BH SW mailbox bit in SW_FW_SYNC */
1663 u16 swmbsw_mask = E1000_SW_SYNCH_MB;
1664 u32 ctrl, icr;
1665 bool global_device_reset = hw->dev_spec._82575.global_device_reset;
1666
1667
1668 hw->dev_spec._82575.global_device_reset = false;
1669
1670 /* Get current control state. */
1671 ctrl = rd32(E1000_CTRL);
1672
1673 /*
1674 * Prevent the PCI-E bus from sticking if there is no TLP connection
1675 * on the last TLP read/write transaction when MAC is reset.
1676 */
1677 ret_val = igb_disable_pcie_master(hw);
1678 if (ret_val)
1679 hw_dbg("PCI-E Master disable polling has failed.\n");
1680
1681 hw_dbg("Masking off all interrupts\n");
1682 wr32(E1000_IMC, 0xffffffff);
1683 wr32(E1000_RCTL, 0);
1684 wr32(E1000_TCTL, E1000_TCTL_PSP);
1685 wrfl();
1686
1687 msleep(10);
1688
1689 /* Determine whether or not a global dev reset is requested */
1690 if (global_device_reset &&
1691 igb_acquire_swfw_sync_82575(hw, swmbsw_mask))
1692 global_device_reset = false;
1693
1694 if (global_device_reset &&
1695 !(rd32(E1000_STATUS) & E1000_STAT_DEV_RST_SET))
1696 ctrl |= E1000_CTRL_DEV_RST;
1697 else
1698 ctrl |= E1000_CTRL_RST;
1699
1700 wr32(E1000_CTRL, ctrl);
1701
1702 /* Add delay to insure DEV_RST has time to complete */
1703 if (global_device_reset)
1704 msleep(5);
1705
1706 ret_val = igb_get_auto_rd_done(hw);
1707 if (ret_val) {
1708 /*
1709 * When auto config read does not complete, do not
1710 * return with an error. This can happen in situations
1711 * where there is no eeprom and prevents getting link.
1712 */
1713 hw_dbg("Auto Read Done did not complete\n");
1714 }
1715
1716 /* If EEPROM is not present, run manual init scripts */
1717 if ((rd32(E1000_EECD) & E1000_EECD_PRES) == 0)
1718 igb_reset_init_script_82575(hw);
1719
1720 /* clear global device reset status bit */
1721 wr32(E1000_STATUS, E1000_STAT_DEV_RST_SET);
1722
1723 /* Clear any pending interrupt events. */
1724 wr32(E1000_IMC, 0xffffffff);
1725 icr = rd32(E1000_ICR);
1726
Nick Nunley08451e22010-07-26 13:15:29 +00001727 ret_val = igb_reset_mdicnfg_82580(hw);
1728 if (ret_val)
1729 hw_dbg("Could not reset MDICNFG based on EEPROM\n");
1730
Alexander Duyckbb2ac472009-11-19 12:42:01 +00001731 /* Install any alternate MAC address into RAR0 */
1732 ret_val = igb_check_alt_mac_addr(hw);
1733
1734 /* Release semaphore */
1735 if (global_device_reset)
1736 igb_release_swfw_sync_82575(hw, swmbsw_mask);
1737
1738 return ret_val;
1739}
1740
1741/**
1742 * igb_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual RX PBA size
1743 * @data: data received by reading RXPBS register
1744 *
1745 * The 82580 uses a table based approach for packet buffer allocation sizes.
1746 * This function converts the retrieved value into the correct table value
1747 * 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
1748 * 0x0 36 72 144 1 2 4 8 16
1749 * 0x8 35 70 140 rsv rsv rsv rsv rsv
1750 */
1751u16 igb_rxpbs_adjust_82580(u32 data)
1752{
1753 u16 ret_val = 0;
1754
1755 if (data < E1000_82580_RXPBS_TABLE_SIZE)
1756 ret_val = e1000_82580_rxpbs_table[data];
1757
1758 return ret_val;
1759}
1760
Carolyn Wyborny09b068d2011-03-11 20:42:13 -08001761/**
1762 * igb_set_eee_i350 - Enable/disable EEE support
1763 * @hw: pointer to the HW structure
1764 *
1765 * Enable/disable EEE based on setting in dev_spec structure.
1766 *
1767 **/
1768s32 igb_set_eee_i350(struct e1000_hw *hw)
1769{
1770 s32 ret_val = 0;
1771 u32 ipcnfg, eeer, ctrl_ext;
1772
1773 ctrl_ext = rd32(E1000_CTRL_EXT);
1774 if ((hw->mac.type != e1000_i350) ||
1775 (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK))
1776 goto out;
1777 ipcnfg = rd32(E1000_IPCNFG);
1778 eeer = rd32(E1000_EEER);
1779
1780 /* enable or disable per user setting */
1781 if (!(hw->dev_spec._82575.eee_disable)) {
1782 ipcnfg |= (E1000_IPCNFG_EEE_1G_AN |
1783 E1000_IPCNFG_EEE_100M_AN);
1784 eeer |= (E1000_EEER_TX_LPI_EN |
1785 E1000_EEER_RX_LPI_EN |
1786 E1000_EEER_LPI_FC);
1787
1788 } else {
1789 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN |
1790 E1000_IPCNFG_EEE_100M_AN);
1791 eeer &= ~(E1000_EEER_TX_LPI_EN |
1792 E1000_EEER_RX_LPI_EN |
1793 E1000_EEER_LPI_FC);
1794 }
1795 wr32(E1000_IPCNFG, ipcnfg);
1796 wr32(E1000_EEER, eeer);
1797out:
1798
1799 return ret_val;
1800}
Auke Kok9d5c8242008-01-24 02:22:38 -08001801static struct e1000_mac_operations e1000_mac_ops_82575 = {
Auke Kok9d5c8242008-01-24 02:22:38 -08001802 .init_hw = igb_init_hw_82575,
1803 .check_for_link = igb_check_for_link_82575,
Alexander Duyck2d064c02008-07-08 15:10:12 -07001804 .rar_set = igb_rar_set,
Auke Kok9d5c8242008-01-24 02:22:38 -08001805 .read_mac_addr = igb_read_mac_addr_82575,
1806 .get_speed_and_duplex = igb_get_speed_and_duplex_copper,
1807};
1808
1809static struct e1000_phy_operations e1000_phy_ops_82575 = {
Alexander Duycka8d2a0c2009-02-06 23:17:26 +00001810 .acquire = igb_acquire_phy_82575,
Auke Kok9d5c8242008-01-24 02:22:38 -08001811 .get_cfg_done = igb_get_cfg_done_82575,
Alexander Duycka8d2a0c2009-02-06 23:17:26 +00001812 .release = igb_release_phy_82575,
Auke Kok9d5c8242008-01-24 02:22:38 -08001813};
1814
1815static struct e1000_nvm_operations e1000_nvm_ops_82575 = {
Alexander Duyck312c75a2009-02-06 23:17:47 +00001816 .acquire = igb_acquire_nvm_82575,
1817 .read = igb_read_nvm_eerd,
1818 .release = igb_release_nvm_82575,
1819 .write = igb_write_nvm_spi,
Auke Kok9d5c8242008-01-24 02:22:38 -08001820};
1821
1822const struct e1000_info e1000_82575_info = {
1823 .get_invariants = igb_get_invariants_82575,
1824 .mac_ops = &e1000_mac_ops_82575,
1825 .phy_ops = &e1000_phy_ops_82575,
1826 .nvm_ops = &e1000_nvm_ops_82575,
1827};
1828