Deleted Added
full compact
ixgbe_82598.c (225736) ixgbe_82598.c (235528)
1/******************************************************************************
2
1/******************************************************************************
2
3 Copyright (c) 2001-2010, Intel Corporation
3 Copyright (c) 2001-2012, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11

--- 13 unchanged lines hidden (view full) ---

25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11

--- 13 unchanged lines hidden (view full) ---

25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: stable/9/sys/dev/ixgbe/ixgbe_82598.c 215911 2010-11-26 22:46:32Z jfv $*/
33/*$FreeBSD: stable/9/sys/dev/ixgbe/ixgbe_82598.c 235528 2012-05-17 00:06:54Z jfv $*/
34
35#include "ixgbe_type.h"
34
35#include "ixgbe_type.h"
36#include "ixgbe_82598.h"
36#include "ixgbe_api.h"
37#include "ixgbe_common.h"
38#include "ixgbe_phy.h"
39
37#include "ixgbe_api.h"
38#include "ixgbe_common.h"
39#include "ixgbe_phy.h"
40
40u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw);
41s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw);
42static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
41static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
43 ixgbe_link_speed *speed,
44 bool *autoneg);
42 ixgbe_link_speed *speed,
43 bool *autoneg);
45static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
44static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
46s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num);
47static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
45static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
48 bool autoneg_wait_to_complete);
46 bool autoneg_wait_to_complete);
49static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
47static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
50 ixgbe_link_speed *speed, bool *link_up,
51 bool link_up_wait_to_complete);
48 ixgbe_link_speed *speed, bool *link_up,
49 bool link_up_wait_to_complete);
52static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
50static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
53 ixgbe_link_speed speed,
54 bool autoneg,
55 bool autoneg_wait_to_complete);
51 ixgbe_link_speed speed,
52 bool autoneg,
53 bool autoneg_wait_to_complete);
56static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
54static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
57 ixgbe_link_speed speed,
58 bool autoneg,
59 bool autoneg_wait_to_complete);
55 ixgbe_link_speed speed,
56 bool autoneg,
57 bool autoneg_wait_to_complete);
60static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
58static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
61s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw);
62void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw);
63s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
64static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
59static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
65s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan,
66 u32 vind, bool vlan_on);
67static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw);
60static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw);
68s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val);
69s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val);
70s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
71 u8 *eeprom_data);
72u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw);
73s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw);
74void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw);
75void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw);
61static void ixgbe_set_rxpba_82598(struct ixgbe_hw *hw, int num_pb,
62 u32 headroom, int strategy);
76
77/**
78 * ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
79 * @hw: pointer to the HW structure
80 *
81 * The defaults for 82598 should be in the range of 50us to 50ms,
82 * however the hardware default for these parts is 500us to 1ms which is less
83 * than the 10ms recommended by the pci-e spec. To address this we need to

--- 42 unchanged lines hidden (view full) ---

126u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
127{
128 u32 msix_count = 18;
129
130 DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
131
132 if (hw->mac.msix_vectors_from_pcie) {
133 msix_count = IXGBE_READ_PCIE_WORD(hw,
63
64/**
65 * ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
66 * @hw: pointer to the HW structure
67 *
68 * The defaults for 82598 should be in the range of 50us to 50ms,
69 * however the hardware default for these parts is 500us to 1ms which is less
70 * than the 10ms recommended by the pci-e spec. To address this we need to

--- 42 unchanged lines hidden (view full) ---

113u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
114{
115 u32 msix_count = 18;
116
117 DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
118
119 if (hw->mac.msix_vectors_from_pcie) {
120 msix_count = IXGBE_READ_PCIE_WORD(hw,
134 IXGBE_PCIE_MSIX_82598_CAPS);
121 IXGBE_PCIE_MSIX_82598_CAPS);
135 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
136
137 /* MSI-X count is zero-based in HW, so increment to give
138 * proper value */
139 msix_count++;
140 }
141 return msix_count;
142}

--- 20 unchanged lines hidden (view full) ---

163 phy->ops.init = &ixgbe_init_phy_ops_82598;
164
165 /* MAC */
166 mac->ops.start_hw = &ixgbe_start_hw_82598;
167 mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_82598;
168 mac->ops.reset_hw = &ixgbe_reset_hw_82598;
169 mac->ops.get_media_type = &ixgbe_get_media_type_82598;
170 mac->ops.get_supported_physical_layer =
122 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
123
124 /* MSI-X count is zero-based in HW, so increment to give
125 * proper value */
126 msix_count++;
127 }
128 return msix_count;
129}

--- 20 unchanged lines hidden (view full) ---

150 phy->ops.init = &ixgbe_init_phy_ops_82598;
151
152 /* MAC */
153 mac->ops.start_hw = &ixgbe_start_hw_82598;
154 mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_82598;
155 mac->ops.reset_hw = &ixgbe_reset_hw_82598;
156 mac->ops.get_media_type = &ixgbe_get_media_type_82598;
157 mac->ops.get_supported_physical_layer =
171 &ixgbe_get_supported_physical_layer_82598;
158 &ixgbe_get_supported_physical_layer_82598;
172 mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82598;
173 mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82598;
174 mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598;
175
176 /* RAR, Multicast, VLAN */
177 mac->ops.set_vmdq = &ixgbe_set_vmdq_82598;
178 mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82598;
179 mac->ops.set_vfta = &ixgbe_set_vfta_82598;
159 mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82598;
160 mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82598;
161 mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598;
162
163 /* RAR, Multicast, VLAN */
164 mac->ops.set_vmdq = &ixgbe_set_vmdq_82598;
165 mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82598;
166 mac->ops.set_vfta = &ixgbe_set_vfta_82598;
167 mac->ops.set_vlvf = NULL;
180 mac->ops.clear_vfta = &ixgbe_clear_vfta_82598;
181
182 /* Flow Control */
183 mac->ops.fc_enable = &ixgbe_fc_enable_82598;
184
168 mac->ops.clear_vfta = &ixgbe_clear_vfta_82598;
169
170 /* Flow Control */
171 mac->ops.fc_enable = &ixgbe_fc_enable_82598;
172
185 mac->mcft_size = 128;
186 mac->vft_size = 128;
187 mac->num_rar_entries = 16;
188 mac->rx_pb_size = 512;
189 mac->max_tx_queues = 32;
190 mac->max_rx_queues = 64;
191 mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw);
173 mac->mcft_size = 128;
174 mac->vft_size = 128;
175 mac->num_rar_entries = 16;
176 mac->rx_pb_size = 512;
177 mac->max_tx_queues = 32;
178 mac->max_rx_queues = 64;
179 mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw);
192
193 /* SFP+ Module */
194 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598;
195
196 /* Link */
197 mac->ops.check_link = &ixgbe_check_mac_link_82598;
198 mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
199 mac->ops.flap_tx_laser = NULL;
180
181 /* SFP+ Module */
182 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598;
183
184 /* Link */
185 mac->ops.check_link = &ixgbe_check_mac_link_82598;
186 mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
187 mac->ops.flap_tx_laser = NULL;
200 mac->ops.get_link_capabilities =
201 &ixgbe_get_link_capabilities_82598;
188 mac->ops.get_link_capabilities = &ixgbe_get_link_capabilities_82598;
189 mac->ops.setup_rxpba = &ixgbe_set_rxpba_82598;
202
190
191 /* Manageability interface */
192 mac->ops.set_fw_drv_ver = NULL;
193
203 return ret_val;
204}
205
206/**
207 * ixgbe_init_phy_ops_82598 - PHY/SFP specific init
208 * @hw: pointer to hardware structure
209 *
210 * Initialize any function pointers that were not able to be

--- 12 unchanged lines hidden (view full) ---

223
224 /* Identify the PHY */
225 phy->ops.identify(hw);
226
227 /* Overwrite the link function pointers if copper PHY */
228 if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
229 mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
230 mac->ops.get_link_capabilities =
194 return ret_val;
195}
196
197/**
198 * ixgbe_init_phy_ops_82598 - PHY/SFP specific init
199 * @hw: pointer to hardware structure
200 *
201 * Initialize any function pointers that were not able to be

--- 12 unchanged lines hidden (view full) ---

214
215 /* Identify the PHY */
216 phy->ops.identify(hw);
217
218 /* Overwrite the link function pointers if copper PHY */
219 if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
220 mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
221 mac->ops.get_link_capabilities =
231 &ixgbe_get_copper_link_capabilities_generic;
222 &ixgbe_get_copper_link_capabilities_generic;
232 }
233
234 switch (hw->phy.type) {
235 case ixgbe_phy_tn:
236 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
237 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
238 phy->ops.get_firmware_version =
223 }
224
225 switch (hw->phy.type) {
226 case ixgbe_phy_tn:
227 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
228 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
229 phy->ops.get_firmware_version =
239 &ixgbe_get_phy_firmware_version_tnx;
230 &ixgbe_get_phy_firmware_version_tnx;
240 break;
231 break;
241 case ixgbe_phy_aq:
242 phy->ops.get_firmware_version =
243 &ixgbe_get_phy_firmware_version_generic;
244 break;
245 case ixgbe_phy_nl:
246 phy->ops.reset = &ixgbe_reset_phy_nl;
247
248 /* Call SFP+ identify routine to get the SFP+ module type */
249 ret_val = phy->ops.identify_sfp(hw);
250 if (ret_val != IXGBE_SUCCESS)
251 goto out;
252 else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) {
253 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
254 goto out;
255 }
256
257 /* Check to see if SFP+ module is supported */
258 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw,
232 case ixgbe_phy_nl:
233 phy->ops.reset = &ixgbe_reset_phy_nl;
234
235 /* Call SFP+ identify routine to get the SFP+ module type */
236 ret_val = phy->ops.identify_sfp(hw);
237 if (ret_val != IXGBE_SUCCESS)
238 goto out;
239 else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) {
240 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
241 goto out;
242 }
243
244 /* Check to see if SFP+ module is supported */
245 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw,
259 &list_offset,
260 &data_offset);
246 &list_offset,
247 &data_offset);
261 if (ret_val != IXGBE_SUCCESS) {
262 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
263 goto out;
264 }
265 break;
266 default:
267 break;
268 }

--- 27 unchanged lines hidden (view full) ---

296 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
297 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
298 }
299
300 for (i = 0; ((i < hw->mac.max_rx_queues) &&
301 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
302 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
303 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
248 if (ret_val != IXGBE_SUCCESS) {
249 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
250 goto out;
251 }
252 break;
253 default:
254 break;
255 }

--- 27 unchanged lines hidden (view full) ---

283 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
284 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
285 }
286
287 for (i = 0; ((i < hw->mac.max_rx_queues) &&
288 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
289 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
290 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
304 IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
291 IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
305 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
306 }
307
308 /* set the completion timeout for interface */
309 if (ret_val == IXGBE_SUCCESS)
310 ixgbe_set_pcie_completion_timeout(hw);
311
312 return ret_val;
313}
314
315/**
316 * ixgbe_get_link_capabilities_82598 - Determines link capabilities
317 * @hw: pointer to hardware structure
318 * @speed: pointer to link speed
319 * @autoneg: boolean auto-negotiation value
320 *
321 * Determines the link capabilities by reading the AUTOC register.
322 **/
323static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
292 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
293 }
294
295 /* set the completion timeout for interface */
296 if (ret_val == IXGBE_SUCCESS)
297 ixgbe_set_pcie_completion_timeout(hw);
298
299 return ret_val;
300}
301
302/**
303 * ixgbe_get_link_capabilities_82598 - Determines link capabilities
304 * @hw: pointer to hardware structure
305 * @speed: pointer to link speed
306 * @autoneg: boolean auto-negotiation value
307 *
308 * Determines the link capabilities by reading the AUTOC register.
309 **/
310static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
324 ixgbe_link_speed *speed,
325 bool *autoneg)
311 ixgbe_link_speed *speed,
312 bool *autoneg)
326{
327 s32 status = IXGBE_SUCCESS;
328 u32 autoc = 0;
329
330 DEBUGFUNC("ixgbe_get_link_capabilities_82598");
331
332 /*
333 * Determine link capabilities based on the stored value of AUTOC,

--- 50 unchanged lines hidden (view full) ---

384 enum ixgbe_media_type media_type;
385
386 DEBUGFUNC("ixgbe_get_media_type_82598");
387
388 /* Detect if there is a copper PHY attached. */
389 switch (hw->phy.type) {
390 case ixgbe_phy_cu_unknown:
391 case ixgbe_phy_tn:
313{
314 s32 status = IXGBE_SUCCESS;
315 u32 autoc = 0;
316
317 DEBUGFUNC("ixgbe_get_link_capabilities_82598");
318
319 /*
320 * Determine link capabilities based on the stored value of AUTOC,

--- 50 unchanged lines hidden (view full) ---

371 enum ixgbe_media_type media_type;
372
373 DEBUGFUNC("ixgbe_get_media_type_82598");
374
375 /* Detect if there is a copper PHY attached. */
376 switch (hw->phy.type) {
377 case ixgbe_phy_cu_unknown:
378 case ixgbe_phy_tn:
392 case ixgbe_phy_aq:
393 media_type = ixgbe_media_type_copper;
394 goto out;
395 default:
396 break;
397 }
398
399 /* Media type for I82598 is based on device ID */
400 switch (hw->device_id) {

--- 34 unchanged lines hidden (view full) ---

435 * Enable flow control according to the current settings.
436 **/
437s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
438{
439 s32 ret_val = IXGBE_SUCCESS;
440 u32 fctrl_reg;
441 u32 rmcs_reg;
442 u32 reg;
379 media_type = ixgbe_media_type_copper;
380 goto out;
381 default:
382 break;
383 }
384
385 /* Media type for I82598 is based on device ID */
386 switch (hw->device_id) {

--- 34 unchanged lines hidden (view full) ---

421 * Enable flow control according to the current settings.
422 **/
423s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
424{
425 s32 ret_val = IXGBE_SUCCESS;
426 u32 fctrl_reg;
427 u32 rmcs_reg;
428 u32 reg;
443 u32 rx_pba_size;
444 u32 link_speed = 0;
445 bool link_up;
446
447 DEBUGFUNC("ixgbe_fc_enable_82598");
448
449 /*
450 * On 82598 having Rx FC on causes resets while doing 1G
451 * so if it's on turn it off once we know link_speed. For

--- 75 unchanged lines hidden (view full) ---

527
528 /* Set 802.3x based flow control settings. */
529 fctrl_reg |= IXGBE_FCTRL_DPF;
530 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg);
531 IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg);
532
533 /* Set up and enable Rx high/low water mark thresholds, enable XON. */
534 if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
429 u32 link_speed = 0;
430 bool link_up;
431
432 DEBUGFUNC("ixgbe_fc_enable_82598");
433
434 /*
435 * On 82598 having Rx FC on causes resets while doing 1G
436 * so if it's on turn it off once we know link_speed. For

--- 75 unchanged lines hidden (view full) ---

512
513 /* Set 802.3x based flow control settings. */
514 fctrl_reg |= IXGBE_FCTRL_DPF;
515 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg);
516 IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg);
517
518 /* Set up and enable Rx high/low water mark thresholds, enable XON. */
519 if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
535 rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
536 rx_pba_size >>= IXGBE_RXPBSIZE_SHIFT;
537
538 reg = (rx_pba_size - hw->fc.low_water) << 6;
520 reg = hw->fc.low_water << 6;
539 if (hw->fc.send_xon)
540 reg |= IXGBE_FCRTL_XONE;
541
542 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), reg);
543
521 if (hw->fc.send_xon)
522 reg |= IXGBE_FCRTL_XONE;
523
524 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), reg);
525
544 reg = (rx_pba_size - hw->fc.high_water) << 6;
526 reg = hw->fc.high_water[packetbuf_num] << 6;
545 reg |= IXGBE_FCRTH_FCEN;
546
547 IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), reg);
548 }
549
550 /* Configure pause time (2 TCs per register) */
551 reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
552 if ((packetbuf_num & 1) == 0)

--- 11 unchanged lines hidden (view full) ---

564/**
565 * ixgbe_start_mac_link_82598 - Configures MAC link settings
566 * @hw: pointer to hardware structure
567 *
568 * Configures link settings based on values in the ixgbe_hw struct.
569 * Restarts the link. Performs autonegotiation if needed.
570 **/
571static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
527 reg |= IXGBE_FCRTH_FCEN;
528
529 IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), reg);
530 }
531
532 /* Configure pause time (2 TCs per register) */
533 reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
534 if ((packetbuf_num & 1) == 0)

--- 11 unchanged lines hidden (view full) ---

546/**
547 * ixgbe_start_mac_link_82598 - Configures MAC link settings
548 * @hw: pointer to hardware structure
549 *
550 * Configures link settings based on values in the ixgbe_hw struct.
551 * Restarts the link. Performs autonegotiation if needed.
552 **/
553static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
572 bool autoneg_wait_to_complete)
554 bool autoneg_wait_to_complete)
573{
574 u32 autoc_reg;
575 u32 links_reg;
576 u32 i;
577 s32 status = IXGBE_SUCCESS;
578
579 DEBUGFUNC("ixgbe_start_mac_link_82598");
580

--- 41 unchanged lines hidden (view full) ---

622 u16 an_reg;
623
624 if (hw->device_id != IXGBE_DEV_ID_82598AT2)
625 return IXGBE_SUCCESS;
626
627 for (timeout = 0;
628 timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
629 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
555{
556 u32 autoc_reg;
557 u32 links_reg;
558 u32 i;
559 s32 status = IXGBE_SUCCESS;
560
561 DEBUGFUNC("ixgbe_start_mac_link_82598");
562

--- 41 unchanged lines hidden (view full) ---

604 u16 an_reg;
605
606 if (hw->device_id != IXGBE_DEV_ID_82598AT2)
607 return IXGBE_SUCCESS;
608
609 for (timeout = 0;
610 timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
611 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
630 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
612 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
631
632 if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
633 (an_reg & IXGBE_MII_AUTONEG_LINK_UP))
634 break;
635
636 msec_delay(100);
637 }
638

--- 10 unchanged lines hidden (view full) ---

649 * @hw: pointer to hardware structure
650 * @speed: pointer to link speed
651 * @link_up: TRUE is link is up, FALSE otherwise
652 * @link_up_wait_to_complete: bool used to wait for link up or not
653 *
654 * Reads the links register to determine if link is up and the current speed
655 **/
656static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
613
614 if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
615 (an_reg & IXGBE_MII_AUTONEG_LINK_UP))
616 break;
617
618 msec_delay(100);
619 }
620

--- 10 unchanged lines hidden (view full) ---

631 * @hw: pointer to hardware structure
632 * @speed: pointer to link speed
633 * @link_up: TRUE is link is up, FALSE otherwise
634 * @link_up_wait_to_complete: bool used to wait for link up or not
635 *
636 * Reads the links register to determine if link is up and the current speed
637 **/
638static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
657 ixgbe_link_speed *speed, bool *link_up,
658 bool link_up_wait_to_complete)
639 ixgbe_link_speed *speed, bool *link_up,
640 bool link_up_wait_to_complete)
659{
660 u32 links_reg;
661 u32 i;
662 u16 link_reg, adapt_comp_reg;
663
664 DEBUGFUNC("ixgbe_check_mac_link_82598");
665
666 /*
667 * SERDES PHY requires us to read link status from undocumented
668 * register 0xC79F. Bit 0 set indicates link is up/ready; clear
669 * indicates link down. OxC00C is read to check that the XAUI lanes
670 * are active. Bit 0 clear indicates active; set indicates inactive.
671 */
672 if (hw->phy.type == ixgbe_phy_nl) {
673 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
674 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
675 hw->phy.ops.read_reg(hw, 0xC00C, IXGBE_TWINAX_DEV,
641{
642 u32 links_reg;
643 u32 i;
644 u16 link_reg, adapt_comp_reg;
645
646 DEBUGFUNC("ixgbe_check_mac_link_82598");
647
648 /*
649 * SERDES PHY requires us to read link status from undocumented
650 * register 0xC79F. Bit 0 set indicates link is up/ready; clear
651 * indicates link down. OxC00C is read to check that the XAUI lanes
652 * are active. Bit 0 clear indicates active; set indicates inactive.
653 */
654 if (hw->phy.type == ixgbe_phy_nl) {
655 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
656 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
657 hw->phy.ops.read_reg(hw, 0xC00C, IXGBE_TWINAX_DEV,
676 &adapt_comp_reg);
658 &adapt_comp_reg);
677 if (link_up_wait_to_complete) {
678 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
679 if ((link_reg & 1) &&
680 ((adapt_comp_reg & 1) == 0)) {
681 *link_up = TRUE;
682 break;
683 } else {
684 *link_up = FALSE;
685 }
686 msec_delay(100);
687 hw->phy.ops.read_reg(hw, 0xC79F,
659 if (link_up_wait_to_complete) {
660 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
661 if ((link_reg & 1) &&
662 ((adapt_comp_reg & 1) == 0)) {
663 *link_up = TRUE;
664 break;
665 } else {
666 *link_up = FALSE;
667 }
668 msec_delay(100);
669 hw->phy.ops.read_reg(hw, 0xC79F,
688 IXGBE_TWINAX_DEV,
689 &link_reg);
670 IXGBE_TWINAX_DEV,
671 &link_reg);
690 hw->phy.ops.read_reg(hw, 0xC00C,
672 hw->phy.ops.read_reg(hw, 0xC00C,
691 IXGBE_TWINAX_DEV,
692 &adapt_comp_reg);
673 IXGBE_TWINAX_DEV,
674 &adapt_comp_reg);
693 }
694 } else {
695 if ((link_reg & 1) && ((adapt_comp_reg & 1) == 0))
696 *link_up = TRUE;
697 else
698 *link_up = FALSE;
699 }
700

--- 24 unchanged lines hidden (view full) ---

725 *speed = IXGBE_LINK_SPEED_10GB_FULL;
726 else
727 *speed = IXGBE_LINK_SPEED_1GB_FULL;
728
729 if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
730 (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
731 *link_up = FALSE;
732
675 }
676 } else {
677 if ((link_reg & 1) && ((adapt_comp_reg & 1) == 0))
678 *link_up = TRUE;
679 else
680 *link_up = FALSE;
681 }
682

--- 24 unchanged lines hidden (view full) ---

707 *speed = IXGBE_LINK_SPEED_10GB_FULL;
708 else
709 *speed = IXGBE_LINK_SPEED_1GB_FULL;
710
711 if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
712 (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
713 *link_up = FALSE;
714
733 /* if link is down, zero out the current_mode */
734 if (*link_up == FALSE) {
735 hw->fc.current_mode = ixgbe_fc_none;
736 hw->fc.fc_was_autonegged = FALSE;
737 }
738out:
739 return IXGBE_SUCCESS;
740}
741
742/**
743 * ixgbe_setup_mac_link_82598 - Set MAC link speed
744 * @hw: pointer to hardware structure
745 * @speed: new link speed
746 * @autoneg: TRUE if autonegotiation enabled
747 * @autoneg_wait_to_complete: TRUE when waiting for completion is needed
748 *
749 * Set the link speed in the AUTOC register and restarts link.
750 **/
751static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
715out:
716 return IXGBE_SUCCESS;
717}
718
719/**
720 * ixgbe_setup_mac_link_82598 - Set MAC link speed
721 * @hw: pointer to hardware structure
722 * @speed: new link speed
723 * @autoneg: TRUE if autonegotiation enabled
724 * @autoneg_wait_to_complete: TRUE when waiting for completion is needed
725 *
726 * Set the link speed in the AUTOC register and restarts link.
727 **/
728static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
752 ixgbe_link_speed speed, bool autoneg,
753 bool autoneg_wait_to_complete)
729 ixgbe_link_speed speed, bool autoneg,
730 bool autoneg_wait_to_complete)
754{
731{
755 s32 status = IXGBE_SUCCESS;
732 s32 status = IXGBE_SUCCESS;
756 ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
733 ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
757 u32 curr_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
758 u32 autoc = curr_autoc;
759 u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
734 u32 curr_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
735 u32 autoc = curr_autoc;
736 u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
760
761 DEBUGFUNC("ixgbe_setup_mac_link_82598");
762
763 /* Check to see if speed passed in is supported. */
764 ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
765 speed &= link_capabilities;
766
767 if (speed == IXGBE_LINK_SPEED_UNKNOWN)
768 status = IXGBE_ERR_LINK_SETUP;
769
770 /* Set KX4/KX support according to speed requested */
771 else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN ||
737
738 DEBUGFUNC("ixgbe_setup_mac_link_82598");
739
740 /* Check to see if speed passed in is supported. */
741 ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
742 speed &= link_capabilities;
743
744 if (speed == IXGBE_LINK_SPEED_UNKNOWN)
745 status = IXGBE_ERR_LINK_SETUP;
746
747 /* Set KX4/KX support according to speed requested */
748 else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN ||
772 link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
749 link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
773 autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK;
774 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
775 autoc |= IXGBE_AUTOC_KX4_SUPP;
776 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
777 autoc |= IXGBE_AUTOC_KX_SUPP;
778 if (autoc != curr_autoc)
779 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
780 }
781
782 if (status == IXGBE_SUCCESS) {
783 /*
784 * Setup and restart the link based on the new values in
785 * ixgbe_hw This will write the AUTOC register based on the new
786 * stored values
787 */
788 status = ixgbe_start_mac_link_82598(hw,
750 autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK;
751 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
752 autoc |= IXGBE_AUTOC_KX4_SUPP;
753 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
754 autoc |= IXGBE_AUTOC_KX_SUPP;
755 if (autoc != curr_autoc)
756 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
757 }
758
759 if (status == IXGBE_SUCCESS) {
760 /*
761 * Setup and restart the link based on the new values in
762 * ixgbe_hw This will write the AUTOC register based on the new
763 * stored values
764 */
765 status = ixgbe_start_mac_link_82598(hw,
789 autoneg_wait_to_complete);
766 autoneg_wait_to_complete);
790 }
791
792 return status;
793}
794
795
796/**
797 * ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
798 * @hw: pointer to hardware structure
799 * @speed: new link speed
800 * @autoneg: TRUE if autonegotiation enabled
801 * @autoneg_wait_to_complete: TRUE if waiting is needed to complete
802 *
803 * Sets the link speed in the AUTOC register in the MAC and restarts link.
804 **/
805static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
767 }
768
769 return status;
770}
771
772
773/**
774 * ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
775 * @hw: pointer to hardware structure
776 * @speed: new link speed
777 * @autoneg: TRUE if autonegotiation enabled
778 * @autoneg_wait_to_complete: TRUE if waiting is needed to complete
779 *
780 * Sets the link speed in the AUTOC register in the MAC and restarts link.
781 **/
782static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
806 ixgbe_link_speed speed,
807 bool autoneg,
808 bool autoneg_wait_to_complete)
783 ixgbe_link_speed speed,
784 bool autoneg,
785 bool autoneg_wait_to_complete)
809{
810 s32 status;
811
812 DEBUGFUNC("ixgbe_setup_copper_link_82598");
813
814 /* Setup the PHY according to input speed */
815 status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
786{
787 s32 status;
788
789 DEBUGFUNC("ixgbe_setup_copper_link_82598");
790
791 /* Setup the PHY according to input speed */
792 status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
816 autoneg_wait_to_complete);
793 autoneg_wait_to_complete);
817 /* Set up MAC */
818 ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
819
820 return status;
821}
822
823/**
824 * ixgbe_reset_hw_82598 - Performs hardware reset

--- 11 unchanged lines hidden (view full) ---

836 u32 gheccr;
837 u32 i;
838 u32 autoc;
839 u8 analog_val;
840
841 DEBUGFUNC("ixgbe_reset_hw_82598");
842
843 /* Call adapter stop to disable tx/rx and clear interrupts */
794 /* Set up MAC */
795 ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
796
797 return status;
798}
799
800/**
801 * ixgbe_reset_hw_82598 - Performs hardware reset

--- 11 unchanged lines hidden (view full) ---

813 u32 gheccr;
814 u32 i;
815 u32 autoc;
816 u8 analog_val;
817
818 DEBUGFUNC("ixgbe_reset_hw_82598");
819
820 /* Call adapter stop to disable tx/rx and clear interrupts */
844 hw->mac.ops.stop_adapter(hw);
821 status = hw->mac.ops.stop_adapter(hw);
822 if (status != IXGBE_SUCCESS)
823 goto reset_hw_out;
845
846 /*
847 * Power up the Atlas Tx lanes if they are currently powered down.
848 * Atlas Tx lanes are powered down for MAC loopback tests, but
849 * they are not automatically restored on reset.
850 */
851 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val);
852 if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) {
853 /* Enable Tx Atlas so packets can be transmitted again */
854 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
824
825 /*
826 * Power up the Atlas Tx lanes if they are currently powered down.
827 * Atlas Tx lanes are powered down for MAC loopback tests, but
828 * they are not automatically restored on reset.
829 */
830 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val);
831 if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) {
832 /* Enable Tx Atlas so packets can be transmitted again */
833 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
855 &analog_val);
834 &analog_val);
856 analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN;
857 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
835 analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN;
836 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
858 analog_val);
837 analog_val);
859
860 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
838
839 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
861 &analog_val);
840 &analog_val);
862 analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL;
863 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
841 analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL;
842 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
864 analog_val);
843 analog_val);
865
866 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
844
845 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
867 &analog_val);
846 &analog_val);
868 analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL;
869 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
847 analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL;
848 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
870 analog_val);
849 analog_val);
871
872 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
850
851 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
873 &analog_val);
852 &analog_val);
874 analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL;
875 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
853 analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL;
854 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
876 analog_val);
855 analog_val);
877 }
878
879 /* Reset PHY */
880 if (hw->phy.reset_disable == FALSE) {
881 /* PHY ops must be identified and initialized prior to reset */
882
883 /* Init PHY and function pointers, perform SFP setup */
884 phy_status = hw->phy.ops.init(hw);
885 if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED)
886 goto reset_hw_out;
856 }
857
858 /* Reset PHY */
859 if (hw->phy.reset_disable == FALSE) {
860 /* PHY ops must be identified and initialized prior to reset */
861
862 /* Init PHY and function pointers, perform SFP setup */
863 phy_status = hw->phy.ops.init(hw);
864 if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED)
865 goto reset_hw_out;
887 else if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT)
888 goto no_phy_reset;
866 if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT)
867 goto mac_reset_top;
889
890 hw->phy.ops.reset(hw);
891 }
892
868
869 hw->phy.ops.reset(hw);
870 }
871
893no_phy_reset:
894 /*
895 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
896 * access and verify no pending requests before reset
897 */
898 ixgbe_disable_pcie_master(hw);
899
900mac_reset_top:
901 /*
902 * Issue global reset to the MAC. This needs to be a SW reset.
903 * If link reset is used, it might reset the MAC when mng is using it
904 */
872mac_reset_top:
873 /*
874 * Issue global reset to the MAC. This needs to be a SW reset.
875 * If link reset is used, it might reset the MAC when mng is using it
876 */
905 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
906 IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST));
877 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL) | IXGBE_CTRL_RST;
878 IXGBE_WRITE_REG(hw, IXGBE_CTRL, ctrl);
907 IXGBE_WRITE_FLUSH(hw);
908
909 /* Poll for reset bit to self-clear indicating reset is complete */
910 for (i = 0; i < 10; i++) {
911 usec_delay(1);
912 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
913 if (!(ctrl & IXGBE_CTRL_RST))
914 break;
915 }
916 if (ctrl & IXGBE_CTRL_RST) {
917 status = IXGBE_ERR_RESET_FAILED;
918 DEBUGOUT("Reset polling failed to complete.\n");
919 }
920
879 IXGBE_WRITE_FLUSH(hw);
880
881 /* Poll for reset bit to self-clear indicating reset is complete */
882 for (i = 0; i < 10; i++) {
883 usec_delay(1);
884 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
885 if (!(ctrl & IXGBE_CTRL_RST))
886 break;
887 }
888 if (ctrl & IXGBE_CTRL_RST) {
889 status = IXGBE_ERR_RESET_FAILED;
890 DEBUGOUT("Reset polling failed to complete.\n");
891 }
892
893 msec_delay(50);
894
921 /*
922 * Double resets are required for recovery from certain error
923 * conditions. Between resets, it is necessary to stall to allow time
895 /*
896 * Double resets are required for recovery from certain error
897 * conditions. Between resets, it is necessary to stall to allow time
924 * for any pending HW events to complete. We use 1usec since that is
925 * what is needed for ixgbe_disable_pcie_master(). The second reset
926 * then clears out any effects of those events.
898 * for any pending HW events to complete.
927 */
928 if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
929 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
899 */
900 if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
901 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
930 usec_delay(1);
931 goto mac_reset_top;
932 }
933
902 goto mac_reset_top;
903 }
904
934 msec_delay(50);
935
936 gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR);
937 gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6));
938 IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr);
939
940 /*
941 * Store the original AUTOC value if it has not been
942 * stored off yet. Otherwise restore the stored original
943 * AUTOC value since the reset operation sets back to deaults.

--- 54 unchanged lines hidden (view full) ---

998 * @rar: receive address register index to associate with a VMDq index
999 * @vmdq: VMDq clear index (not used in 82598, but elsewhere)
1000 **/
1001static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
1002{
1003 u32 rar_high;
1004 u32 rar_entries = hw->mac.num_rar_entries;
1005
905 gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR);
906 gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6));
907 IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr);
908
909 /*
910 * Store the original AUTOC value if it has not been
911 * stored off yet. Otherwise restore the stored original
912 * AUTOC value since the reset operation sets back to deaults.

--- 54 unchanged lines hidden (view full) ---

967 * @rar: receive address register index to associate with a VMDq index
968 * @vmdq: VMDq clear index (not used in 82598, but elsewhere)
969 **/
970static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
971{
972 u32 rar_high;
973 u32 rar_entries = hw->mac.num_rar_entries;
974
1006 UNREFERENCED_PARAMETER(vmdq);
975 UNREFERENCED_1PARAMETER(vmdq);
1007
1008 /* Make sure we are using a valid rar index range */
1009 if (rar >= rar_entries) {
1010 DEBUGOUT1("RAR index %d is out of range.\n", rar);
1011 return IXGBE_ERR_INVALID_ARGUMENT;
1012 }
1013
1014 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));

--- 10 unchanged lines hidden (view full) ---

1025 * @hw: pointer to hardware structure
1026 * @vlan: VLAN id to write to VLAN filter
1027 * @vind: VMDq output index that maps queue to VLAN id in VFTA
1028 * @vlan_on: boolean flag to turn on/off VLAN in VFTA
1029 *
1030 * Turn on/off specified VLAN in the VLAN filter table.
1031 **/
1032s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
976
977 /* Make sure we are using a valid rar index range */
978 if (rar >= rar_entries) {
979 DEBUGOUT1("RAR index %d is out of range.\n", rar);
980 return IXGBE_ERR_INVALID_ARGUMENT;
981 }
982
983 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));

--- 10 unchanged lines hidden (view full) ---

994 * @hw: pointer to hardware structure
995 * @vlan: VLAN id to write to VLAN filter
996 * @vind: VMDq output index that maps queue to VLAN id in VFTA
997 * @vlan_on: boolean flag to turn on/off VLAN in VFTA
998 *
999 * Turn on/off specified VLAN in the VLAN filter table.
1000 **/
1001s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
1033 bool vlan_on)
1002 bool vlan_on)
1034{
1035 u32 regindex;
1036 u32 bitindex;
1037 u32 bits;
1038 u32 vftabyte;
1039
1040 DEBUGFUNC("ixgbe_set_vfta_82598");
1041

--- 42 unchanged lines hidden (view full) ---

1084 DEBUGFUNC("ixgbe_clear_vfta_82598");
1085
1086 for (offset = 0; offset < hw->mac.vft_size; offset++)
1087 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
1088
1089 for (vlanbyte = 0; vlanbyte < 4; vlanbyte++)
1090 for (offset = 0; offset < hw->mac.vft_size; offset++)
1091 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset),
1003{
1004 u32 regindex;
1005 u32 bitindex;
1006 u32 bits;
1007 u32 vftabyte;
1008
1009 DEBUGFUNC("ixgbe_set_vfta_82598");
1010

--- 42 unchanged lines hidden (view full) ---

1053 DEBUGFUNC("ixgbe_clear_vfta_82598");
1054
1055 for (offset = 0; offset < hw->mac.vft_size; offset++)
1056 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
1057
1058 for (vlanbyte = 0; vlanbyte < 4; vlanbyte++)
1059 for (offset = 0; offset < hw->mac.vft_size; offset++)
1060 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset),
1092 0);
1061 0);
1093
1094 return IXGBE_SUCCESS;
1095}
1096
1097/**
1098 * ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register
1099 * @hw: pointer to hardware structure
1100 * @reg: analog register to read
1101 * @val: read value
1102 *
1103 * Performs read operation to Atlas analog register specified.
1104 **/
1105s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
1106{
1107 u32 atlas_ctl;
1108
1109 DEBUGFUNC("ixgbe_read_analog_reg8_82598");
1110
1111 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
1062
1063 return IXGBE_SUCCESS;
1064}
1065
1066/**
1067 * ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register
1068 * @hw: pointer to hardware structure
1069 * @reg: analog register to read
1070 * @val: read value
1071 *
1072 * Performs read operation to Atlas analog register specified.
1073 **/
1074s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
1075{
1076 u32 atlas_ctl;
1077
1078 DEBUGFUNC("ixgbe_read_analog_reg8_82598");
1079
1080 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
1112 IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
1081 IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
1113 IXGBE_WRITE_FLUSH(hw);
1114 usec_delay(10);
1115 atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL);
1116 *val = (u8)atlas_ctl;
1117
1118 return IXGBE_SUCCESS;
1119}
1120

--- 23 unchanged lines hidden (view full) ---

1144 * ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
1145 * @hw: pointer to hardware structure
1146 * @byte_offset: EEPROM byte offset to read
1147 * @eeprom_data: value read
1148 *
1149 * Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
1150 **/
1151s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
1082 IXGBE_WRITE_FLUSH(hw);
1083 usec_delay(10);
1084 atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL);
1085 *val = (u8)atlas_ctl;
1086
1087 return IXGBE_SUCCESS;
1088}
1089

--- 23 unchanged lines hidden (view full) ---

1113 * ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
1114 * @hw: pointer to hardware structure
1115 * @byte_offset: EEPROM byte offset to read
1116 * @eeprom_data: value read
1117 *
1118 * Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
1119 **/
1120s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
1152 u8 *eeprom_data)
1121 u8 *eeprom_data)
1153{
1154 s32 status = IXGBE_SUCCESS;
1155 u16 sfp_addr = 0;
1156 u16 sfp_data = 0;
1157 u16 sfp_stat = 0;
1158 u32 i;
1159
1160 DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
1161
1162 if (hw->phy.type == ixgbe_phy_nl) {
1163 /*
1164 * NetLogic phy SDA/SCL registers are at addresses 0xC30A to
1165 * 0xC30D. These registers are used to talk to the SFP+
1166 * module's EEPROM through the SDA/SCL (I2C) interface.
1167 */
1168 sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
1169 sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
1170 hw->phy.ops.write_reg(hw,
1122{
1123 s32 status = IXGBE_SUCCESS;
1124 u16 sfp_addr = 0;
1125 u16 sfp_data = 0;
1126 u16 sfp_stat = 0;
1127 u32 i;
1128
1129 DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
1130
1131 if (hw->phy.type == ixgbe_phy_nl) {
1132 /*
1133 * NetLogic phy SDA/SCL registers are at addresses 0xC30A to
1134 * 0xC30D. These registers are used to talk to the SFP+
1135 * module's EEPROM through the SDA/SCL (I2C) interface.
1136 */
1137 sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
1138 sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
1139 hw->phy.ops.write_reg(hw,
1171 IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
1172 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1173 sfp_addr);
1140 IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
1141 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1142 sfp_addr);
1174
1175 /* Poll status */
1176 for (i = 0; i < 100; i++) {
1177 hw->phy.ops.read_reg(hw,
1143
1144 /* Poll status */
1145 for (i = 0; i < 100; i++) {
1146 hw->phy.ops.read_reg(hw,
1178 IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT,
1179 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1180 &sfp_stat);
1147 IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT,
1148 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1149 &sfp_stat);
1181 sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK;
1182 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS)
1183 break;
1184 msec_delay(10);
1185 }
1186
1187 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) {
1188 DEBUGOUT("EEPROM read did not pass.\n");
1189 status = IXGBE_ERR_SFP_NOT_PRESENT;
1190 goto out;
1191 }
1192
1193 /* Read data */
1194 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA,
1150 sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK;
1151 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS)
1152 break;
1153 msec_delay(10);
1154 }
1155
1156 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) {
1157 DEBUGOUT("EEPROM read did not pass.\n");
1158 status = IXGBE_ERR_SFP_NOT_PRESENT;
1159 goto out;
1160 }
1161
1162 /* Read data */
1163 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA,
1195 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &sfp_data);
1164 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &sfp_data);
1196
1197 *eeprom_data = (u8)(sfp_data >> 8);
1198 } else {
1199 status = IXGBE_ERR_PHY;
1200 goto out;
1201 }
1202
1203out:

--- 17 unchanged lines hidden (view full) ---

1221 DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
1222
1223 hw->phy.ops.identify(hw);
1224
1225 /* Copper PHY must be checked before AUTOC LMS to determine correct
1226 * physical layer because 10GBase-T PHYs use LMS = KX4/KX */
1227 switch (hw->phy.type) {
1228 case ixgbe_phy_tn:
1165
1166 *eeprom_data = (u8)(sfp_data >> 8);
1167 } else {
1168 status = IXGBE_ERR_PHY;
1169 goto out;
1170 }
1171
1172out:

--- 17 unchanged lines hidden (view full) ---

1190 DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
1191
1192 hw->phy.ops.identify(hw);
1193
1194 /* Copper PHY must be checked before AUTOC LMS to determine correct
1195 * physical layer because 10GBase-T PHYs use LMS = KX4/KX */
1196 switch (hw->phy.type) {
1197 case ixgbe_phy_tn:
1229 case ixgbe_phy_aq:
1230 case ixgbe_phy_cu_unknown:
1231 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
1232 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
1233 if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
1234 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1235 if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
1236 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1237 if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)

--- 122 unchanged lines hidden (view full) ---

1360 regval |= IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
1361 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
1362 }
1363
1364 for (i = 0; ((i < hw->mac.max_rx_queues) &&
1365 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1366 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
1367 regval |= (IXGBE_DCA_RXCTRL_DESC_WRO_EN |
1198 case ixgbe_phy_cu_unknown:
1199 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
1200 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
1201 if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
1202 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1203 if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
1204 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1205 if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)

--- 122 unchanged lines hidden (view full) ---

1328 regval |= IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
1329 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
1330 }
1331
1332 for (i = 0; ((i < hw->mac.max_rx_queues) &&
1333 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1334 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
1335 regval |= (IXGBE_DCA_RXCTRL_DESC_WRO_EN |
1368 IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
1336 IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
1369 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
1370 }
1371
1372}
1337 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
1338 }
1339
1340}
1341
1342/**
1343 * ixgbe_set_rxpba_82598 - Initialize RX packet buffer
1344 * @hw: pointer to hardware structure
1345 * @num_pb: number of packet buffers to allocate
1346 * @headroom: reserve n KB of headroom
1347 * @strategy: packet buffer allocation strategy
1348 **/
1349static void ixgbe_set_rxpba_82598(struct ixgbe_hw *hw, int num_pb,
1350 u32 headroom, int strategy)
1351{
1352 u32 rxpktsize = IXGBE_RXPBSIZE_64KB;
1353 u8 i = 0;
1354 UNREFERENCED_1PARAMETER(headroom);
1355
1356 if (!num_pb)
1357 return;
1358
1359 /* Setup Rx packet buffer sizes */
1360 switch (strategy) {
1361 case PBA_STRATEGY_WEIGHTED:
1362 /* Setup the first four at 80KB */
1363 rxpktsize = IXGBE_RXPBSIZE_80KB;
1364 for (; i < 4; i++)
1365 IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
1366 /* Setup the last four at 48KB...don't re-init i */
1367 rxpktsize = IXGBE_RXPBSIZE_48KB;
1368 /* Fall Through */
1369 case PBA_STRATEGY_EQUAL:
1370 default:
1371 /* Divide the remaining Rx packet buffer evenly among the TCs */
1372 for (; i < IXGBE_MAX_PACKET_BUFFERS; i++)
1373 IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), rxpktsize);
1374 break;
1375 }
1376
1377 /* Setup Tx packet buffer sizes */
1378 for (i = 0; i < IXGBE_MAX_PACKET_BUFFERS; i++)
1379 IXGBE_WRITE_REG(hw, IXGBE_TXPBSIZE(i), IXGBE_TXPBSIZE_40KB);
1380
1381 return;
1382}