diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb')
21 files changed, 362 insertions, 253 deletions
diff --git a/drivers/net/ethernet/intel/igb/Makefile b/drivers/net/ethernet/intel/igb/Makefile index f19700e285bb..5bcb2de75933 100644 --- a/drivers/net/ethernet/intel/igb/Makefile +++ b/drivers/net/ethernet/intel/igb/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | ################################################################################ | 1 | ################################################################################ |
2 | # | 2 | # |
3 | # Intel 82575 PCI-Express Ethernet Linux driver | 3 | # Intel 82575 PCI-Express Ethernet Linux driver |
4 | # Copyright(c) 1999 - 2013 Intel Corporation. | 4 | # Copyright(c) 1999 - 2014 Intel Corporation. |
5 | # | 5 | # |
6 | # This program is free software; you can redistribute it and/or modify it | 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, | 7 | # under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | # more details. | 13 | # more details. |
14 | # | 14 | # |
15 | # You should have received a copy of the GNU General Public License along with | 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., | 16 | # this program; if not, see <http://www.gnu.org/licenses/>. |
17 | # 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | # | 17 | # |
19 | # The full GNU General Public License is included in this distribution in | 18 | # The full GNU General Public License is included in this distribution in |
20 | # the file called "COPYING". | 19 | # the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c index 06df6928f44c..fa36fe12e775 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.c +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -77,8 +76,6 @@ static s32 igb_update_nvm_checksum_i350(struct e1000_hw *hw); | |||
77 | static const u16 e1000_82580_rxpbs_table[] = | 76 | static const u16 e1000_82580_rxpbs_table[] = |
78 | { 36, 72, 144, 1, 2, 4, 8, 16, | 77 | { 36, 72, 144, 1, 2, 4, 8, 16, |
79 | 35, 70, 140 }; | 78 | 35, 70, 140 }; |
80 | #define E1000_82580_RXPBS_TABLE_SIZE \ | ||
81 | (sizeof(e1000_82580_rxpbs_table)/sizeof(u16)) | ||
82 | 79 | ||
83 | /** | 80 | /** |
84 | * igb_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO | 81 | * igb_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO |
@@ -2308,7 +2305,7 @@ u16 igb_rxpbs_adjust_82580(u32 data) | |||
2308 | { | 2305 | { |
2309 | u16 ret_val = 0; | 2306 | u16 ret_val = 0; |
2310 | 2307 | ||
2311 | if (data < E1000_82580_RXPBS_TABLE_SIZE) | 2308 | if (data < ARRAY_SIZE(e1000_82580_rxpbs_table)) |
2312 | ret_val = e1000_82580_rxpbs_table[data]; | 2309 | ret_val = e1000_82580_rxpbs_table[data]; |
2313 | 2310 | ||
2314 | return ret_val; | 2311 | return ret_val; |
@@ -2714,13 +2711,14 @@ static const u8 e1000_emc_therm_limit[4] = { | |||
2714 | E1000_EMC_DIODE3_THERM_LIMIT | 2711 | E1000_EMC_DIODE3_THERM_LIMIT |
2715 | }; | 2712 | }; |
2716 | 2713 | ||
2714 | #ifdef CONFIG_IGB_HWMON | ||
2717 | /** | 2715 | /** |
2718 | * igb_get_thermal_sensor_data_generic - Gathers thermal sensor data | 2716 | * igb_get_thermal_sensor_data_generic - Gathers thermal sensor data |
2719 | * @hw: pointer to hardware structure | 2717 | * @hw: pointer to hardware structure |
2720 | * | 2718 | * |
2721 | * Updates the temperatures in mac.thermal_sensor_data | 2719 | * Updates the temperatures in mac.thermal_sensor_data |
2722 | **/ | 2720 | **/ |
2723 | s32 igb_get_thermal_sensor_data_generic(struct e1000_hw *hw) | 2721 | static s32 igb_get_thermal_sensor_data_generic(struct e1000_hw *hw) |
2724 | { | 2722 | { |
2725 | s32 status = E1000_SUCCESS; | 2723 | s32 status = E1000_SUCCESS; |
2726 | u16 ets_offset; | 2724 | u16 ets_offset; |
@@ -2774,7 +2772,7 @@ s32 igb_get_thermal_sensor_data_generic(struct e1000_hw *hw) | |||
2774 | * Sets the thermal sensor thresholds according to the NVM map | 2772 | * Sets the thermal sensor thresholds according to the NVM map |
2775 | * and save off the threshold and location values into mac.thermal_sensor_data | 2773 | * and save off the threshold and location values into mac.thermal_sensor_data |
2776 | **/ | 2774 | **/ |
2777 | s32 igb_init_thermal_sensor_thresh_generic(struct e1000_hw *hw) | 2775 | static s32 igb_init_thermal_sensor_thresh_generic(struct e1000_hw *hw) |
2778 | { | 2776 | { |
2779 | s32 status = E1000_SUCCESS; | 2777 | s32 status = E1000_SUCCESS; |
2780 | u16 ets_offset; | 2778 | u16 ets_offset; |
@@ -2836,6 +2834,7 @@ s32 igb_init_thermal_sensor_thresh_generic(struct e1000_hw *hw) | |||
2836 | return status; | 2834 | return status; |
2837 | } | 2835 | } |
2838 | 2836 | ||
2837 | #endif | ||
2839 | static struct e1000_mac_operations e1000_mac_ops_82575 = { | 2838 | static struct e1000_mac_operations e1000_mac_ops_82575 = { |
2840 | .init_hw = igb_init_hw_82575, | 2839 | .init_hw = igb_init_hw_82575, |
2841 | .check_for_link = igb_check_for_link_82575, | 2840 | .check_for_link = igb_check_for_link_82575, |
diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.h b/drivers/net/ethernet/intel/igb/e1000_82575.h index 8c2437722aad..09d78be72416 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.h +++ b/drivers/net/ethernet/intel/igb/e1000_82575.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -231,6 +230,10 @@ struct e1000_adv_tx_context_desc { | |||
231 | #define E1000_VMOLR_STRVLAN 0x40000000 /* Vlan stripping enable */ | 230 | #define E1000_VMOLR_STRVLAN 0x40000000 /* Vlan stripping enable */ |
232 | #define E1000_VMOLR_STRCRC 0x80000000 /* CRC stripping enable */ | 231 | #define E1000_VMOLR_STRCRC 0x80000000 /* CRC stripping enable */ |
233 | 232 | ||
233 | #define E1000_DVMOLR_HIDEVLAN 0x20000000 /* Hide vlan enable */ | ||
234 | #define E1000_DVMOLR_STRVLAN 0x40000000 /* Vlan stripping enable */ | ||
235 | #define E1000_DVMOLR_STRCRC 0x80000000 /* CRC stripping enable */ | ||
236 | |||
234 | #define E1000_VLVF_ARRAY_SIZE 32 | 237 | #define E1000_VLVF_ARRAY_SIZE 32 |
235 | #define E1000_VLVF_VLANID_MASK 0x00000FFF | 238 | #define E1000_VLVF_VLANID_MASK 0x00000FFF |
236 | #define E1000_VLVF_POOLSEL_SHIFT 12 | 239 | #define E1000_VLVF_POOLSEL_SHIFT 12 |
@@ -266,8 +269,7 @@ u16 igb_rxpbs_adjust_82580(u32 data); | |||
266 | s32 igb_read_emi_reg(struct e1000_hw *, u16 addr, u16 *data); | 269 | s32 igb_read_emi_reg(struct e1000_hw *, u16 addr, u16 *data); |
267 | s32 igb_set_eee_i350(struct e1000_hw *); | 270 | s32 igb_set_eee_i350(struct e1000_hw *); |
268 | s32 igb_set_eee_i354(struct e1000_hw *); | 271 | s32 igb_set_eee_i354(struct e1000_hw *); |
269 | s32 igb_init_thermal_sensor_thresh_generic(struct e1000_hw *); | 272 | s32 igb_get_eee_status_i354(struct e1000_hw *hw, bool *status); |
270 | s32 igb_get_thermal_sensor_data_generic(struct e1000_hw *hw); | ||
271 | 273 | ||
272 | #define E1000_I2C_THERMAL_SENSOR_ADDR 0xF8 | 274 | #define E1000_I2C_THERMAL_SENSOR_ADDR 0xF8 |
273 | #define E1000_EMC_INTERNAL_DATA 0x00 | 275 | #define E1000_EMC_INTERNAL_DATA 0x00 |
diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h index 0571b973be80..b05bf925ac72 100644 --- a/drivers/net/ethernet/intel/igb/e1000_defines.h +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -44,7 +43,11 @@ | |||
44 | #define E1000_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ | 43 | #define E1000_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */ |
45 | 44 | ||
46 | /* Extended Device Control */ | 45 | /* Extended Device Control */ |
46 | #define E1000_CTRL_EXT_SDP2_DATA 0x00000040 /* Value of SW Defineable Pin 2 */ | ||
47 | #define E1000_CTRL_EXT_SDP3_DATA 0x00000080 /* Value of SW Defineable Pin 3 */ | 47 | #define E1000_CTRL_EXT_SDP3_DATA 0x00000080 /* Value of SW Defineable Pin 3 */ |
48 | #define E1000_CTRL_EXT_SDP2_DIR 0x00000400 /* SDP2 Data direction */ | ||
49 | #define E1000_CTRL_EXT_SDP3_DIR 0x00000800 /* SDP3 Data direction */ | ||
50 | |||
48 | /* Physical Func Reset Done Indication */ | 51 | /* Physical Func Reset Done Indication */ |
49 | #define E1000_CTRL_EXT_PFRSTD 0x00004000 | 52 | #define E1000_CTRL_EXT_PFRSTD 0x00004000 |
50 | #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 | 53 | #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 |
@@ -191,7 +194,8 @@ | |||
191 | /* enable link status from external LINK_0 and LINK_1 pins */ | 194 | /* enable link status from external LINK_0 and LINK_1 pins */ |
192 | #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ | 195 | #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */ |
193 | #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ | 196 | #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */ |
194 | #define E1000_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */ | 197 | #define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */ |
198 | #define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */ | ||
195 | #define E1000_CTRL_RST 0x04000000 /* Global reset */ | 199 | #define E1000_CTRL_RST 0x04000000 /* Global reset */ |
196 | #define E1000_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */ | 200 | #define E1000_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */ |
197 | #define E1000_CTRL_TFCE 0x10000000 /* Transmit flow control enable */ | 201 | #define E1000_CTRL_TFCE 0x10000000 /* Transmit flow control enable */ |
@@ -529,8 +533,67 @@ | |||
529 | 533 | ||
530 | #define E1000_TIMINCA_16NS_SHIFT 24 | 534 | #define E1000_TIMINCA_16NS_SHIFT 24 |
531 | 535 | ||
532 | #define E1000_TSICR_TXTS 0x00000002 | 536 | /* Time Sync Interrupt Cause/Mask Register Bits */ |
533 | #define E1000_TSIM_TXTS 0x00000002 | 537 | |
538 | #define TSINTR_SYS_WRAP (1 << 0) /* SYSTIM Wrap around. */ | ||
539 | #define TSINTR_TXTS (1 << 1) /* Transmit Timestamp. */ | ||
540 | #define TSINTR_RXTS (1 << 2) /* Receive Timestamp. */ | ||
541 | #define TSINTR_TT0 (1 << 3) /* Target Time 0 Trigger. */ | ||
542 | #define TSINTR_TT1 (1 << 4) /* Target Time 1 Trigger. */ | ||
543 | #define TSINTR_AUTT0 (1 << 5) /* Auxiliary Timestamp 0 Taken. */ | ||
544 | #define TSINTR_AUTT1 (1 << 6) /* Auxiliary Timestamp 1 Taken. */ | ||
545 | #define TSINTR_TADJ (1 << 7) /* Time Adjust Done. */ | ||
546 | |||
547 | #define TSYNC_INTERRUPTS TSINTR_TXTS | ||
548 | #define E1000_TSICR_TXTS TSINTR_TXTS | ||
549 | |||
550 | /* TSAUXC Configuration Bits */ | ||
551 | #define TSAUXC_EN_TT0 (1 << 0) /* Enable target time 0. */ | ||
552 | #define TSAUXC_EN_TT1 (1 << 1) /* Enable target time 1. */ | ||
553 | #define TSAUXC_EN_CLK0 (1 << 2) /* Enable Configurable Frequency Clock 0. */ | ||
554 | #define TSAUXC_SAMP_AUT0 (1 << 3) /* Latch SYSTIML/H into AUXSTMPL/0. */ | ||
555 | #define TSAUXC_ST0 (1 << 4) /* Start Clock 0 Toggle on Target Time 0. */ | ||
556 | #define TSAUXC_EN_CLK1 (1 << 5) /* Enable Configurable Frequency Clock 1. */ | ||
557 | #define TSAUXC_SAMP_AUT1 (1 << 6) /* Latch SYSTIML/H into AUXSTMPL/1. */ | ||
558 | #define TSAUXC_ST1 (1 << 7) /* Start Clock 1 Toggle on Target Time 1. */ | ||
559 | #define TSAUXC_EN_TS0 (1 << 8) /* Enable hardware timestamp 0. */ | ||
560 | #define TSAUXC_AUTT0 (1 << 9) /* Auxiliary Timestamp Taken. */ | ||
561 | #define TSAUXC_EN_TS1 (1 << 10) /* Enable hardware timestamp 0. */ | ||
562 | #define TSAUXC_AUTT1 (1 << 11) /* Auxiliary Timestamp Taken. */ | ||
563 | #define TSAUXC_PLSG (1 << 17) /* Generate a pulse. */ | ||
564 | #define TSAUXC_DISABLE (1 << 31) /* Disable SYSTIM Count Operation. */ | ||
565 | |||
566 | /* SDP Configuration Bits */ | ||
567 | #define AUX0_SEL_SDP0 (0 << 0) /* Assign SDP0 to auxiliary time stamp 0. */ | ||
568 | #define AUX0_SEL_SDP1 (1 << 0) /* Assign SDP1 to auxiliary time stamp 0. */ | ||
569 | #define AUX0_SEL_SDP2 (2 << 0) /* Assign SDP2 to auxiliary time stamp 0. */ | ||
570 | #define AUX0_SEL_SDP3 (3 << 0) /* Assign SDP3 to auxiliary time stamp 0. */ | ||
571 | #define AUX0_TS_SDP_EN (1 << 2) /* Enable auxiliary time stamp trigger 0. */ | ||
572 | #define AUX1_SEL_SDP0 (0 << 3) /* Assign SDP0 to auxiliary time stamp 1. */ | ||
573 | #define AUX1_SEL_SDP1 (1 << 3) /* Assign SDP1 to auxiliary time stamp 1. */ | ||
574 | #define AUX1_SEL_SDP2 (2 << 3) /* Assign SDP2 to auxiliary time stamp 1. */ | ||
575 | #define AUX1_SEL_SDP3 (3 << 3) /* Assign SDP3 to auxiliary time stamp 1. */ | ||
576 | #define AUX1_TS_SDP_EN (1 << 5) /* Enable auxiliary time stamp trigger 1. */ | ||
577 | #define TS_SDP0_SEL_TT0 (0 << 6) /* Target time 0 is output on SDP0. */ | ||
578 | #define TS_SDP0_SEL_TT1 (1 << 6) /* Target time 1 is output on SDP0. */ | ||
579 | #define TS_SDP0_SEL_FC0 (2 << 6) /* Freq clock 0 is output on SDP0. */ | ||
580 | #define TS_SDP0_SEL_FC1 (3 << 6) /* Freq clock 1 is output on SDP0. */ | ||
581 | #define TS_SDP0_EN (1 << 8) /* SDP0 is assigned to Tsync. */ | ||
582 | #define TS_SDP1_SEL_TT0 (0 << 9) /* Target time 0 is output on SDP1. */ | ||
583 | #define TS_SDP1_SEL_TT1 (1 << 9) /* Target time 1 is output on SDP1. */ | ||
584 | #define TS_SDP1_SEL_FC0 (2 << 9) /* Freq clock 0 is output on SDP1. */ | ||
585 | #define TS_SDP1_SEL_FC1 (3 << 9) /* Freq clock 1 is output on SDP1. */ | ||
586 | #define TS_SDP1_EN (1 << 11) /* SDP1 is assigned to Tsync. */ | ||
587 | #define TS_SDP2_SEL_TT0 (0 << 12) /* Target time 0 is output on SDP2. */ | ||
588 | #define TS_SDP2_SEL_TT1 (1 << 12) /* Target time 1 is output on SDP2. */ | ||
589 | #define TS_SDP2_SEL_FC0 (2 << 12) /* Freq clock 0 is output on SDP2. */ | ||
590 | #define TS_SDP2_SEL_FC1 (3 << 12) /* Freq clock 1 is output on SDP2. */ | ||
591 | #define TS_SDP2_EN (1 << 14) /* SDP2 is assigned to Tsync. */ | ||
592 | #define TS_SDP3_SEL_TT0 (0 << 15) /* Target time 0 is output on SDP3. */ | ||
593 | #define TS_SDP3_SEL_TT1 (1 << 15) /* Target time 1 is output on SDP3. */ | ||
594 | #define TS_SDP3_SEL_FC0 (2 << 15) /* Freq clock 0 is output on SDP3. */ | ||
595 | #define TS_SDP3_SEL_FC1 (3 << 15) /* Freq clock 1 is output on SDP3. */ | ||
596 | #define TS_SDP3_EN (1 << 17) /* SDP3 is assigned to Tsync. */ | ||
534 | 597 | ||
535 | #define E1000_MDICNFG_EXT_MDIO 0x80000000 /* MDI ext/int destination */ | 598 | #define E1000_MDICNFG_EXT_MDIO 0x80000000 /* MDI ext/int destination */ |
536 | #define E1000_MDICNFG_COM_MDIO 0x40000000 /* MDI shared w/ lan 0 */ | 599 | #define E1000_MDICNFG_COM_MDIO 0x40000000 /* MDI shared w/ lan 0 */ |
diff --git a/drivers/net/ethernet/intel/igb/e1000_hw.h b/drivers/net/ethernet/intel/igb/e1000_hw.h index ab99e2b582a8..10741d170f2d 100644 --- a/drivers/net/ethernet/intel/igb/e1000_hw.h +++ b/drivers/net/ethernet/intel/igb/e1000_hw.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_i210.c b/drivers/net/ethernet/intel/igb/e1000_i210.c index 0c0393316a3a..db963397cc27 100644 --- a/drivers/net/ethernet/intel/igb/e1000_i210.c +++ b/drivers/net/ethernet/intel/igb/e1000_i210.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -35,6 +34,8 @@ | |||
35 | #include "e1000_hw.h" | 34 | #include "e1000_hw.h" |
36 | #include "e1000_i210.h" | 35 | #include "e1000_i210.h" |
37 | 36 | ||
37 | static s32 igb_update_flash_i210(struct e1000_hw *hw); | ||
38 | |||
38 | /** | 39 | /** |
39 | * igb_get_hw_semaphore_i210 - Acquire hardware semaphore | 40 | * igb_get_hw_semaphore_i210 - Acquire hardware semaphore |
40 | * @hw: pointer to the HW structure | 41 | * @hw: pointer to the HW structure |
@@ -111,7 +112,7 @@ static s32 igb_get_hw_semaphore_i210(struct e1000_hw *hw) | |||
111 | * Return successful if access grant bit set, else clear the request for | 112 | * Return successful if access grant bit set, else clear the request for |
112 | * EEPROM access and return -E1000_ERR_NVM (-1). | 113 | * EEPROM access and return -E1000_ERR_NVM (-1). |
113 | **/ | 114 | **/ |
114 | s32 igb_acquire_nvm_i210(struct e1000_hw *hw) | 115 | static s32 igb_acquire_nvm_i210(struct e1000_hw *hw) |
115 | { | 116 | { |
116 | return igb_acquire_swfw_sync_i210(hw, E1000_SWFW_EEP_SM); | 117 | return igb_acquire_swfw_sync_i210(hw, E1000_SWFW_EEP_SM); |
117 | } | 118 | } |
@@ -123,7 +124,7 @@ s32 igb_acquire_nvm_i210(struct e1000_hw *hw) | |||
123 | * Stop any current commands to the EEPROM and clear the EEPROM request bit, | 124 | * Stop any current commands to the EEPROM and clear the EEPROM request bit, |
124 | * then release the semaphores acquired. | 125 | * then release the semaphores acquired. |
125 | **/ | 126 | **/ |
126 | void igb_release_nvm_i210(struct e1000_hw *hw) | 127 | static void igb_release_nvm_i210(struct e1000_hw *hw) |
127 | { | 128 | { |
128 | igb_release_swfw_sync_i210(hw, E1000_SWFW_EEP_SM); | 129 | igb_release_swfw_sync_i210(hw, E1000_SWFW_EEP_SM); |
129 | } | 130 | } |
@@ -206,8 +207,8 @@ void igb_release_swfw_sync_i210(struct e1000_hw *hw, u16 mask) | |||
206 | * Reads a 16 bit word from the Shadow Ram using the EERD register. | 207 | * Reads a 16 bit word from the Shadow Ram using the EERD register. |
207 | * Uses necessary synchronization semaphores. | 208 | * Uses necessary synchronization semaphores. |
208 | **/ | 209 | **/ |
209 | s32 igb_read_nvm_srrd_i210(struct e1000_hw *hw, u16 offset, u16 words, | 210 | static s32 igb_read_nvm_srrd_i210(struct e1000_hw *hw, u16 offset, u16 words, |
210 | u16 *data) | 211 | u16 *data) |
211 | { | 212 | { |
212 | s32 status = E1000_SUCCESS; | 213 | s32 status = E1000_SUCCESS; |
213 | u16 i, count; | 214 | u16 i, count; |
@@ -306,8 +307,8 @@ out: | |||
306 | * If error code is returned, data and Shadow RAM may be inconsistent - buffer | 307 | * If error code is returned, data and Shadow RAM may be inconsistent - buffer |
307 | * partially written. | 308 | * partially written. |
308 | **/ | 309 | **/ |
309 | s32 igb_write_nvm_srwr_i210(struct e1000_hw *hw, u16 offset, u16 words, | 310 | static s32 igb_write_nvm_srwr_i210(struct e1000_hw *hw, u16 offset, u16 words, |
310 | u16 *data) | 311 | u16 *data) |
311 | { | 312 | { |
312 | s32 status = E1000_SUCCESS; | 313 | s32 status = E1000_SUCCESS; |
313 | u16 i, count; | 314 | u16 i, count; |
@@ -555,7 +556,7 @@ s32 igb_read_invm_version(struct e1000_hw *hw, | |||
555 | * Calculates the EEPROM checksum by reading/adding each word of the EEPROM | 556 | * Calculates the EEPROM checksum by reading/adding each word of the EEPROM |
556 | * and then verifies that the sum of the EEPROM is equal to 0xBABA. | 557 | * and then verifies that the sum of the EEPROM is equal to 0xBABA. |
557 | **/ | 558 | **/ |
558 | s32 igb_validate_nvm_checksum_i210(struct e1000_hw *hw) | 559 | static s32 igb_validate_nvm_checksum_i210(struct e1000_hw *hw) |
559 | { | 560 | { |
560 | s32 status = E1000_SUCCESS; | 561 | s32 status = E1000_SUCCESS; |
561 | s32 (*read_op_ptr)(struct e1000_hw *, u16, u16, u16 *); | 562 | s32 (*read_op_ptr)(struct e1000_hw *, u16, u16, u16 *); |
@@ -590,7 +591,7 @@ s32 igb_validate_nvm_checksum_i210(struct e1000_hw *hw) | |||
590 | * up to the checksum. Then calculates the EEPROM checksum and writes the | 591 | * up to the checksum. Then calculates the EEPROM checksum and writes the |
591 | * value to the EEPROM. Next commit EEPROM data onto the Flash. | 592 | * value to the EEPROM. Next commit EEPROM data onto the Flash. |
592 | **/ | 593 | **/ |
593 | s32 igb_update_nvm_checksum_i210(struct e1000_hw *hw) | 594 | static s32 igb_update_nvm_checksum_i210(struct e1000_hw *hw) |
594 | { | 595 | { |
595 | s32 ret_val = E1000_SUCCESS; | 596 | s32 ret_val = E1000_SUCCESS; |
596 | u16 checksum = 0; | 597 | u16 checksum = 0; |
@@ -684,7 +685,7 @@ bool igb_get_flash_presence_i210(struct e1000_hw *hw) | |||
684 | * @hw: pointer to the HW structure | 685 | * @hw: pointer to the HW structure |
685 | * | 686 | * |
686 | **/ | 687 | **/ |
687 | s32 igb_update_flash_i210(struct e1000_hw *hw) | 688 | static s32 igb_update_flash_i210(struct e1000_hw *hw) |
688 | { | 689 | { |
689 | s32 ret_val = E1000_SUCCESS; | 690 | s32 ret_val = E1000_SUCCESS; |
690 | u32 flup; | 691 | u32 flup; |
diff --git a/drivers/net/ethernet/intel/igb/e1000_i210.h b/drivers/net/ethernet/intel/igb/e1000_i210.h index 2d913716573a..907fe99a9813 100644 --- a/drivers/net/ethernet/intel/igb/e1000_i210.h +++ b/drivers/net/ethernet/intel/igb/e1000_i210.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -28,17 +27,8 @@ | |||
28 | #ifndef _E1000_I210_H_ | 27 | #ifndef _E1000_I210_H_ |
29 | #define _E1000_I210_H_ | 28 | #define _E1000_I210_H_ |
30 | 29 | ||
31 | s32 igb_update_flash_i210(struct e1000_hw *hw); | ||
32 | s32 igb_update_nvm_checksum_i210(struct e1000_hw *hw); | ||
33 | s32 igb_validate_nvm_checksum_i210(struct e1000_hw *hw); | ||
34 | s32 igb_write_nvm_srwr_i210(struct e1000_hw *hw, u16 offset, u16 words, | ||
35 | u16 *data); | ||
36 | s32 igb_read_nvm_srrd_i210(struct e1000_hw *hw, u16 offset, u16 words, | ||
37 | u16 *data); | ||
38 | s32 igb_acquire_swfw_sync_i210(struct e1000_hw *hw, u16 mask); | 30 | s32 igb_acquire_swfw_sync_i210(struct e1000_hw *hw, u16 mask); |
39 | void igb_release_swfw_sync_i210(struct e1000_hw *hw, u16 mask); | 31 | void igb_release_swfw_sync_i210(struct e1000_hw *hw, u16 mask); |
40 | s32 igb_acquire_nvm_i210(struct e1000_hw *hw); | ||
41 | void igb_release_nvm_i210(struct e1000_hw *hw); | ||
42 | s32 igb_valid_led_default_i210(struct e1000_hw *hw, u16 *data); | 32 | s32 igb_valid_led_default_i210(struct e1000_hw *hw, u16 *data); |
43 | s32 igb_read_invm_version(struct e1000_hw *hw, | 33 | s32 igb_read_invm_version(struct e1000_hw *hw, |
44 | struct e1000_fw_version *invm_ver); | 34 | struct e1000_fw_version *invm_ver); |
diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.c b/drivers/net/ethernet/intel/igb/e1000_mac.c index 298f0ed50670..5910a932ea7c 100644 --- a/drivers/net/ethernet/intel/igb/e1000_mac.c +++ b/drivers/net/ethernet/intel/igb/e1000_mac.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.h b/drivers/net/ethernet/intel/igb/e1000_mac.h index e4cbe8ef67b3..99299ba8ee3a 100644 --- a/drivers/net/ethernet/intel/igb/e1000_mac.h +++ b/drivers/net/ethernet/intel/igb/e1000_mac.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_mbx.c b/drivers/net/ethernet/intel/igb/e1000_mbx.c index dac1447fabf7..d5b121771c31 100644 --- a/drivers/net/ethernet/intel/igb/e1000_mbx.c +++ b/drivers/net/ethernet/intel/igb/e1000_mbx.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_mbx.h b/drivers/net/ethernet/intel/igb/e1000_mbx.h index de9bba41acf3..f52f5515e5a8 100644 --- a/drivers/net/ethernet/intel/igb/e1000_mbx.h +++ b/drivers/net/ethernet/intel/igb/e1000_mbx.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_nvm.c b/drivers/net/ethernet/intel/igb/e1000_nvm.c index a7db7f3db914..9abf82919c65 100644 --- a/drivers/net/ethernet/intel/igb/e1000_nvm.c +++ b/drivers/net/ethernet/intel/igb/e1000_nvm.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_nvm.h b/drivers/net/ethernet/intel/igb/e1000_nvm.h index 433b7419cb98..5b101170b17e 100644 --- a/drivers/net/ethernet/intel/igb/e1000_nvm.h +++ b/drivers/net/ethernet/intel/igb/e1000_nvm.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.c b/drivers/net/ethernet/intel/igb/e1000_phy.c index ad2b74d95138..4009bbab7407 100644 --- a/drivers/net/ethernet/intel/igb/e1000_phy.c +++ b/drivers/net/ethernet/intel/igb/e1000_phy.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -394,77 +393,6 @@ s32 igb_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data) | |||
394 | } | 393 | } |
395 | 394 | ||
396 | /** | 395 | /** |
397 | * e1000_write_sfp_data_byte - Writes SFP module data. | ||
398 | * @hw: pointer to the HW structure | ||
399 | * @offset: byte location offset to write to | ||
400 | * @data: data to write | ||
401 | * | ||
402 | * Writes one byte to SFP module data stored | ||
403 | * in SFP resided EEPROM memory or SFP diagnostic area. | ||
404 | * Function should be called with | ||
405 | * E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access | ||
406 | * E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters | ||
407 | * access | ||
408 | **/ | ||
409 | s32 e1000_write_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 data) | ||
410 | { | ||
411 | u32 i = 0; | ||
412 | u32 i2ccmd = 0; | ||
413 | u32 data_local = 0; | ||
414 | |||
415 | if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) { | ||
416 | hw_dbg("I2CCMD command address exceeds upper limit\n"); | ||
417 | return -E1000_ERR_PHY; | ||
418 | } | ||
419 | /* The programming interface is 16 bits wide | ||
420 | * so we need to read the whole word first | ||
421 | * then update appropriate byte lane and write | ||
422 | * the updated word back. | ||
423 | */ | ||
424 | /* Set up Op-code, EEPROM Address,in the I2CCMD | ||
425 | * register. The MAC will take care of interfacing | ||
426 | * with an EEPROM to write the data given. | ||
427 | */ | ||
428 | i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | | ||
429 | E1000_I2CCMD_OPCODE_READ); | ||
430 | /* Set a command to read single word */ | ||
431 | wr32(E1000_I2CCMD, i2ccmd); | ||
432 | for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { | ||
433 | udelay(50); | ||
434 | /* Poll the ready bit to see if lastly | ||
435 | * launched I2C operation completed | ||
436 | */ | ||
437 | i2ccmd = rd32(E1000_I2CCMD); | ||
438 | if (i2ccmd & E1000_I2CCMD_READY) { | ||
439 | /* Check if this is READ or WRITE phase */ | ||
440 | if ((i2ccmd & E1000_I2CCMD_OPCODE_READ) == | ||
441 | E1000_I2CCMD_OPCODE_READ) { | ||
442 | /* Write the selected byte | ||
443 | * lane and update whole word | ||
444 | */ | ||
445 | data_local = i2ccmd & 0xFF00; | ||
446 | data_local |= data; | ||
447 | i2ccmd = ((offset << | ||
448 | E1000_I2CCMD_REG_ADDR_SHIFT) | | ||
449 | E1000_I2CCMD_OPCODE_WRITE | data_local); | ||
450 | wr32(E1000_I2CCMD, i2ccmd); | ||
451 | } else { | ||
452 | break; | ||
453 | } | ||
454 | } | ||
455 | } | ||
456 | if (!(i2ccmd & E1000_I2CCMD_READY)) { | ||
457 | hw_dbg("I2CCMD Write did not complete\n"); | ||
458 | return -E1000_ERR_PHY; | ||
459 | } | ||
460 | if (i2ccmd & E1000_I2CCMD_ERROR) { | ||
461 | hw_dbg("I2CCMD Error bit set\n"); | ||
462 | return -E1000_ERR_PHY; | ||
463 | } | ||
464 | return 0; | ||
465 | } | ||
466 | |||
467 | /** | ||
468 | * igb_read_phy_reg_igp - Read igp PHY register | 396 | * igb_read_phy_reg_igp - Read igp PHY register |
469 | * @hw: pointer to the HW structure | 397 | * @hw: pointer to the HW structure |
470 | * @offset: register offset to be read | 398 | * @offset: register offset to be read |
diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.h b/drivers/net/ethernet/intel/igb/e1000_phy.h index 6a0873f2095a..4c2c36c46a73 100644 --- a/drivers/net/ethernet/intel/igb/e1000_phy.h +++ b/drivers/net/ethernet/intel/igb/e1000_phy.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -70,7 +69,6 @@ s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data); | |||
70 | s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data); | 69 | s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data); |
71 | s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data); | 70 | s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data); |
72 | s32 igb_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data); | 71 | s32 igb_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data); |
73 | s32 e1000_write_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 data); | ||
74 | s32 igb_copper_link_setup_82580(struct e1000_hw *hw); | 72 | s32 igb_copper_link_setup_82580(struct e1000_hw *hw); |
75 | s32 igb_get_phy_info_82580(struct e1000_hw *hw); | 73 | s32 igb_get_phy_info_82580(struct e1000_hw *hw); |
76 | s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw); | 74 | s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw); |
diff --git a/drivers/net/ethernet/intel/igb/e1000_regs.h b/drivers/net/ethernet/intel/igb/e1000_regs.h index 82632c6c53af..bdb246e848e1 100644 --- a/drivers/net/ethernet/intel/igb/e1000_regs.h +++ b/drivers/net/ethernet/intel/igb/e1000_regs.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -41,6 +40,7 @@ | |||
41 | #define E1000_FCT 0x00030 /* Flow Control Type - RW */ | 40 | #define E1000_FCT 0x00030 /* Flow Control Type - RW */ |
42 | #define E1000_CONNSW 0x00034 /* Copper/Fiber switch control - RW */ | 41 | #define E1000_CONNSW 0x00034 /* Copper/Fiber switch control - RW */ |
43 | #define E1000_VET 0x00038 /* VLAN Ether Type - RW */ | 42 | #define E1000_VET 0x00038 /* VLAN Ether Type - RW */ |
43 | #define E1000_TSSDP 0x0003C /* Time Sync SDP Configuration Register - RW */ | ||
44 | #define E1000_ICR 0x000C0 /* Interrupt Cause Read - R/clr */ | 44 | #define E1000_ICR 0x000C0 /* Interrupt Cause Read - R/clr */ |
45 | #define E1000_ITR 0x000C4 /* Interrupt Throttling Rate - RW */ | 45 | #define E1000_ITR 0x000C4 /* Interrupt Throttling Rate - RW */ |
46 | #define E1000_ICS 0x000C8 /* Interrupt Cause Set - WO */ | 46 | #define E1000_ICS 0x000C8 /* Interrupt Cause Set - WO */ |
@@ -102,6 +102,14 @@ | |||
102 | #define E1000_SYSTIMH 0x0B604 /* System time register High - RO */ | 102 | #define E1000_SYSTIMH 0x0B604 /* System time register High - RO */ |
103 | #define E1000_TIMINCA 0x0B608 /* Increment attributes register - RW */ | 103 | #define E1000_TIMINCA 0x0B608 /* Increment attributes register - RW */ |
104 | #define E1000_TSAUXC 0x0B640 /* Timesync Auxiliary Control register */ | 104 | #define E1000_TSAUXC 0x0B640 /* Timesync Auxiliary Control register */ |
105 | #define E1000_TRGTTIML0 0x0B644 /* Target Time Register 0 Low - RW */ | ||
106 | #define E1000_TRGTTIMH0 0x0B648 /* Target Time Register 0 High - RW */ | ||
107 | #define E1000_TRGTTIML1 0x0B64C /* Target Time Register 1 Low - RW */ | ||
108 | #define E1000_TRGTTIMH1 0x0B650 /* Target Time Register 1 High - RW */ | ||
109 | #define E1000_AUXSTMPL0 0x0B65C /* Auxiliary Time Stamp 0 Register Low - RO */ | ||
110 | #define E1000_AUXSTMPH0 0x0B660 /* Auxiliary Time Stamp 0 Register High - RO */ | ||
111 | #define E1000_AUXSTMPL1 0x0B664 /* Auxiliary Time Stamp 1 Register Low - RO */ | ||
112 | #define E1000_AUXSTMPH1 0x0B668 /* Auxiliary Time Stamp 1 Register High - RO */ | ||
105 | #define E1000_SYSTIMR 0x0B6F8 /* System time register Residue */ | 113 | #define E1000_SYSTIMR 0x0B6F8 /* System time register Residue */ |
106 | #define E1000_TSICR 0x0B66C /* Interrupt Cause Register */ | 114 | #define E1000_TSICR 0x0B66C /* Interrupt Cause Register */ |
107 | #define E1000_TSIM 0x0B674 /* Interrupt Mask Register */ | 115 | #define E1000_TSIM 0x0B674 /* Interrupt Mask Register */ |
@@ -349,16 +357,30 @@ | |||
349 | #define E1000_P2VMAILBOX(_n) (0x00C00 + (4 * (_n))) | 357 | #define E1000_P2VMAILBOX(_n) (0x00C00 + (4 * (_n))) |
350 | #define E1000_VMBMEM(_n) (0x00800 + (64 * (_n))) | 358 | #define E1000_VMBMEM(_n) (0x00800 + (64 * (_n))) |
351 | #define E1000_VMOLR(_n) (0x05AD0 + (4 * (_n))) | 359 | #define E1000_VMOLR(_n) (0x05AD0 + (4 * (_n))) |
360 | #define E1000_DVMOLR(_n) (0x0C038 + (64 * (_n))) | ||
352 | #define E1000_VLVF(_n) (0x05D00 + (4 * (_n))) /* VLAN Virtual Machine | 361 | #define E1000_VLVF(_n) (0x05D00 + (4 * (_n))) /* VLAN Virtual Machine |
353 | * Filter - RW */ | 362 | * Filter - RW */ |
354 | #define E1000_VMVIR(_n) (0x03700 + (4 * (_n))) | 363 | #define E1000_VMVIR(_n) (0x03700 + (4 * (_n))) |
355 | 364 | ||
356 | #define wr32(reg, value) (writel(value, hw->hw_addr + reg)) | 365 | struct e1000_hw; |
357 | #define rd32(reg) (readl(hw->hw_addr + reg)) | 366 | |
367 | u32 igb_rd32(struct e1000_hw *hw, u32 reg); | ||
368 | |||
369 | /* write operations, indexed using DWORDS */ | ||
370 | #define wr32(reg, val) \ | ||
371 | do { \ | ||
372 | u8 __iomem *hw_addr = ACCESS_ONCE((hw)->hw_addr); \ | ||
373 | if (!E1000_REMOVED(hw_addr)) \ | ||
374 | writel((val), &hw_addr[(reg)]); \ | ||
375 | } while (0) | ||
376 | |||
377 | #define rd32(reg) (igb_rd32(hw, reg)) | ||
378 | |||
358 | #define wrfl() ((void)rd32(E1000_STATUS)) | 379 | #define wrfl() ((void)rd32(E1000_STATUS)) |
359 | 380 | ||
360 | #define array_wr32(reg, offset, value) \ | 381 | #define array_wr32(reg, offset, value) \ |
361 | (writel(value, hw->hw_addr + reg + ((offset) << 2))) | 382 | wr32((reg) + ((offset) << 2), (value)) |
383 | |||
362 | #define array_rd32(reg, offset) \ | 384 | #define array_rd32(reg, offset) \ |
363 | (readl(hw->hw_addr + reg + ((offset) << 2))) | 385 | (readl(hw->hw_addr + reg + ((offset) << 2))) |
364 | 386 | ||
@@ -397,4 +419,6 @@ | |||
397 | #define E1000_INVM_DATA_REG(_n) (0x12120 + 4*(_n)) | 419 | #define E1000_INVM_DATA_REG(_n) (0x12120 + 4*(_n)) |
398 | #define E1000_INVM_SIZE 64 /* Number of INVM Data Registers */ | 420 | #define E1000_INVM_SIZE 64 /* Number of INVM Data Registers */ |
399 | 421 | ||
422 | #define E1000_REMOVED(h) unlikely(!(h)) | ||
423 | |||
400 | #endif | 424 | #endif |
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h index ccf472f073dd..411b213c63be 100644 --- a/drivers/net/ethernet/intel/igb/igb.h +++ b/drivers/net/ethernet/intel/igb/igb.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -42,6 +41,7 @@ | |||
42 | #include <linux/i2c.h> | 41 | #include <linux/i2c.h> |
43 | #include <linux/i2c-algo-bit.h> | 42 | #include <linux/i2c-algo-bit.h> |
44 | #include <linux/pci.h> | 43 | #include <linux/pci.h> |
44 | #include <linux/mdio.h> | ||
45 | 45 | ||
46 | struct igb_adapter; | 46 | struct igb_adapter; |
47 | 47 | ||
@@ -434,6 +434,7 @@ struct igb_adapter { | |||
434 | struct delayed_work ptp_overflow_work; | 434 | struct delayed_work ptp_overflow_work; |
435 | struct work_struct ptp_tx_work; | 435 | struct work_struct ptp_tx_work; |
436 | struct sk_buff *ptp_tx_skb; | 436 | struct sk_buff *ptp_tx_skb; |
437 | struct hwtstamp_config tstamp_config; | ||
437 | unsigned long ptp_tx_start; | 438 | unsigned long ptp_tx_start; |
438 | unsigned long last_rx_ptp_check; | 439 | unsigned long last_rx_ptp_check; |
439 | spinlock_t tmreg_lock; | 440 | spinlock_t tmreg_lock; |
@@ -456,6 +457,7 @@ struct igb_adapter { | |||
456 | unsigned long link_check_timeout; | 457 | unsigned long link_check_timeout; |
457 | int copper_tries; | 458 | int copper_tries; |
458 | struct e1000_info ei; | 459 | struct e1000_info ei; |
460 | u16 eee_advert; | ||
459 | }; | 461 | }; |
460 | 462 | ||
461 | #define IGB_FLAG_HAS_MSI (1 << 0) | 463 | #define IGB_FLAG_HAS_MSI (1 << 0) |
@@ -472,6 +474,7 @@ struct igb_adapter { | |||
472 | #define IGB_FLAG_MAS_CAPABLE (1 << 11) | 474 | #define IGB_FLAG_MAS_CAPABLE (1 << 11) |
473 | #define IGB_FLAG_MAS_ENABLE (1 << 12) | 475 | #define IGB_FLAG_MAS_ENABLE (1 << 12) |
474 | #define IGB_FLAG_HAS_MSIX (1 << 13) | 476 | #define IGB_FLAG_HAS_MSIX (1 << 13) |
477 | #define IGB_FLAG_EEE (1 << 14) | ||
475 | 478 | ||
476 | /* Media Auto Sense */ | 479 | /* Media Auto Sense */ |
477 | #define IGB_MAS_ENABLE_0 0X0001 | 480 | #define IGB_MAS_ENABLE_0 0X0001 |
@@ -525,9 +528,7 @@ void igb_set_fw_version(struct igb_adapter *); | |||
525 | void igb_ptp_init(struct igb_adapter *adapter); | 528 | void igb_ptp_init(struct igb_adapter *adapter); |
526 | void igb_ptp_stop(struct igb_adapter *adapter); | 529 | void igb_ptp_stop(struct igb_adapter *adapter); |
527 | void igb_ptp_reset(struct igb_adapter *adapter); | 530 | void igb_ptp_reset(struct igb_adapter *adapter); |
528 | void igb_ptp_tx_work(struct work_struct *work); | ||
529 | void igb_ptp_rx_hang(struct igb_adapter *adapter); | 531 | void igb_ptp_rx_hang(struct igb_adapter *adapter); |
530 | void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter); | ||
531 | void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb); | 532 | void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb); |
532 | void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, unsigned char *va, | 533 | void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, unsigned char *va, |
533 | struct sk_buff *skb); | 534 | struct sk_buff *skb); |
@@ -545,8 +546,8 @@ static inline void igb_ptp_rx_hwtstamp(struct igb_ring *rx_ring, | |||
545 | rx_ring->last_rx_timestamp = jiffies; | 546 | rx_ring->last_rx_timestamp = jiffies; |
546 | } | 547 | } |
547 | 548 | ||
548 | int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, | 549 | int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr); |
549 | int cmd); | 550 | int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr); |
550 | #ifdef CONFIG_IGB_HWMON | 551 | #ifdef CONFIG_IGB_HWMON |
551 | void igb_sysfs_exit(struct igb_adapter *adapter); | 552 | void igb_sysfs_exit(struct igb_adapter *adapter); |
552 | int igb_sysfs_init(struct igb_adapter *adapter); | 553 | int igb_sysfs_init(struct igb_adapter *adapter); |
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c index 1df02378de69..e5570acbeea8 100644 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -2274,15 +2273,15 @@ static void igb_get_ethtool_stats(struct net_device *netdev, | |||
2274 | 2273 | ||
2275 | ring = adapter->tx_ring[j]; | 2274 | ring = adapter->tx_ring[j]; |
2276 | do { | 2275 | do { |
2277 | start = u64_stats_fetch_begin_bh(&ring->tx_syncp); | 2276 | start = u64_stats_fetch_begin_irq(&ring->tx_syncp); |
2278 | data[i] = ring->tx_stats.packets; | 2277 | data[i] = ring->tx_stats.packets; |
2279 | data[i+1] = ring->tx_stats.bytes; | 2278 | data[i+1] = ring->tx_stats.bytes; |
2280 | data[i+2] = ring->tx_stats.restart_queue; | 2279 | data[i+2] = ring->tx_stats.restart_queue; |
2281 | } while (u64_stats_fetch_retry_bh(&ring->tx_syncp, start)); | 2280 | } while (u64_stats_fetch_retry_irq(&ring->tx_syncp, start)); |
2282 | do { | 2281 | do { |
2283 | start = u64_stats_fetch_begin_bh(&ring->tx_syncp2); | 2282 | start = u64_stats_fetch_begin_irq(&ring->tx_syncp2); |
2284 | restart2 = ring->tx_stats.restart_queue2; | 2283 | restart2 = ring->tx_stats.restart_queue2; |
2285 | } while (u64_stats_fetch_retry_bh(&ring->tx_syncp2, start)); | 2284 | } while (u64_stats_fetch_retry_irq(&ring->tx_syncp2, start)); |
2286 | data[i+2] += restart2; | 2285 | data[i+2] += restart2; |
2287 | 2286 | ||
2288 | i += IGB_TX_QUEUE_STATS_LEN; | 2287 | i += IGB_TX_QUEUE_STATS_LEN; |
@@ -2290,13 +2289,13 @@ static void igb_get_ethtool_stats(struct net_device *netdev, | |||
2290 | for (j = 0; j < adapter->num_rx_queues; j++) { | 2289 | for (j = 0; j < adapter->num_rx_queues; j++) { |
2291 | ring = adapter->rx_ring[j]; | 2290 | ring = adapter->rx_ring[j]; |
2292 | do { | 2291 | do { |
2293 | start = u64_stats_fetch_begin_bh(&ring->rx_syncp); | 2292 | start = u64_stats_fetch_begin_irq(&ring->rx_syncp); |
2294 | data[i] = ring->rx_stats.packets; | 2293 | data[i] = ring->rx_stats.packets; |
2295 | data[i+1] = ring->rx_stats.bytes; | 2294 | data[i+1] = ring->rx_stats.bytes; |
2296 | data[i+2] = ring->rx_stats.drops; | 2295 | data[i+2] = ring->rx_stats.drops; |
2297 | data[i+3] = ring->rx_stats.csum_err; | 2296 | data[i+3] = ring->rx_stats.csum_err; |
2298 | data[i+4] = ring->rx_stats.alloc_failed; | 2297 | data[i+4] = ring->rx_stats.alloc_failed; |
2299 | } while (u64_stats_fetch_retry_bh(&ring->rx_syncp, start)); | 2298 | } while (u64_stats_fetch_retry_irq(&ring->rx_syncp, start)); |
2300 | i += IGB_RX_QUEUE_STATS_LEN; | 2299 | i += IGB_RX_QUEUE_STATS_LEN; |
2301 | } | 2300 | } |
2302 | spin_unlock(&adapter->stats64_lock); | 2301 | spin_unlock(&adapter->stats64_lock); |
@@ -2354,6 +2353,11 @@ static int igb_get_ts_info(struct net_device *dev, | |||
2354 | { | 2353 | { |
2355 | struct igb_adapter *adapter = netdev_priv(dev); | 2354 | struct igb_adapter *adapter = netdev_priv(dev); |
2356 | 2355 | ||
2356 | if (adapter->ptp_clock) | ||
2357 | info->phc_index = ptp_clock_index(adapter->ptp_clock); | ||
2358 | else | ||
2359 | info->phc_index = -1; | ||
2360 | |||
2357 | switch (adapter->hw.mac.type) { | 2361 | switch (adapter->hw.mac.type) { |
2358 | case e1000_82575: | 2362 | case e1000_82575: |
2359 | info->so_timestamping = | 2363 | info->so_timestamping = |
@@ -2375,11 +2379,6 @@ static int igb_get_ts_info(struct net_device *dev, | |||
2375 | SOF_TIMESTAMPING_RX_HARDWARE | | 2379 | SOF_TIMESTAMPING_RX_HARDWARE | |
2376 | SOF_TIMESTAMPING_RAW_HARDWARE; | 2380 | SOF_TIMESTAMPING_RAW_HARDWARE; |
2377 | 2381 | ||
2378 | if (adapter->ptp_clock) | ||
2379 | info->phc_index = ptp_clock_index(adapter->ptp_clock); | ||
2380 | else | ||
2381 | info->phc_index = -1; | ||
2382 | |||
2383 | info->tx_types = | 2382 | info->tx_types = |
2384 | (1 << HWTSTAMP_TX_OFF) | | 2383 | (1 << HWTSTAMP_TX_OFF) | |
2385 | (1 << HWTSTAMP_TX_ON); | 2384 | (1 << HWTSTAMP_TX_ON); |
@@ -2588,7 +2587,7 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata) | |||
2588 | { | 2587 | { |
2589 | struct igb_adapter *adapter = netdev_priv(netdev); | 2588 | struct igb_adapter *adapter = netdev_priv(netdev); |
2590 | struct e1000_hw *hw = &adapter->hw; | 2589 | struct e1000_hw *hw = &adapter->hw; |
2591 | u32 ipcnfg, eeer, ret_val; | 2590 | u32 ret_val; |
2592 | u16 phy_data; | 2591 | u16 phy_data; |
2593 | 2592 | ||
2594 | if ((hw->mac.type < e1000_i350) || | 2593 | if ((hw->mac.type < e1000_i350) || |
@@ -2597,16 +2596,25 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata) | |||
2597 | 2596 | ||
2598 | edata->supported = (SUPPORTED_1000baseT_Full | | 2597 | edata->supported = (SUPPORTED_1000baseT_Full | |
2599 | SUPPORTED_100baseT_Full); | 2598 | SUPPORTED_100baseT_Full); |
2599 | if (!hw->dev_spec._82575.eee_disable) | ||
2600 | edata->advertised = | ||
2601 | mmd_eee_adv_to_ethtool_adv_t(adapter->eee_advert); | ||
2602 | |||
2603 | /* The IPCNFG and EEER registers are not supported on I354. */ | ||
2604 | if (hw->mac.type == e1000_i354) { | ||
2605 | igb_get_eee_status_i354(hw, (bool *)&edata->eee_active); | ||
2606 | } else { | ||
2607 | u32 eeer; | ||
2600 | 2608 | ||
2601 | ipcnfg = rd32(E1000_IPCNFG); | 2609 | eeer = rd32(E1000_EEER); |
2602 | eeer = rd32(E1000_EEER); | ||
2603 | 2610 | ||
2604 | /* EEE status on negotiated link */ | 2611 | /* EEE status on negotiated link */ |
2605 | if (ipcnfg & E1000_IPCNFG_EEE_1G_AN) | 2612 | if (eeer & E1000_EEER_EEE_NEG) |
2606 | edata->advertised = ADVERTISED_1000baseT_Full; | 2613 | edata->eee_active = true; |
2607 | 2614 | ||
2608 | if (ipcnfg & E1000_IPCNFG_EEE_100M_AN) | 2615 | if (eeer & E1000_EEER_TX_LPI_EN) |
2609 | edata->advertised |= ADVERTISED_100baseT_Full; | 2616 | edata->tx_lpi_enabled = true; |
2617 | } | ||
2610 | 2618 | ||
2611 | /* EEE Link Partner Advertised */ | 2619 | /* EEE Link Partner Advertised */ |
2612 | switch (hw->mac.type) { | 2620 | switch (hw->mac.type) { |
@@ -2617,8 +2625,8 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata) | |||
2617 | return -ENODATA; | 2625 | return -ENODATA; |
2618 | 2626 | ||
2619 | edata->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(phy_data); | 2627 | edata->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(phy_data); |
2620 | |||
2621 | break; | 2628 | break; |
2629 | case e1000_i354: | ||
2622 | case e1000_i210: | 2630 | case e1000_i210: |
2623 | case e1000_i211: | 2631 | case e1000_i211: |
2624 | ret_val = igb_read_xmdio_reg(hw, E1000_EEE_LP_ADV_ADDR_I210, | 2632 | ret_val = igb_read_xmdio_reg(hw, E1000_EEE_LP_ADV_ADDR_I210, |
@@ -2634,12 +2642,10 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata) | |||
2634 | break; | 2642 | break; |
2635 | } | 2643 | } |
2636 | 2644 | ||
2637 | if (eeer & E1000_EEER_EEE_NEG) | ||
2638 | edata->eee_active = true; | ||
2639 | |||
2640 | edata->eee_enabled = !hw->dev_spec._82575.eee_disable; | 2645 | edata->eee_enabled = !hw->dev_spec._82575.eee_disable; |
2641 | 2646 | ||
2642 | if (eeer & E1000_EEER_TX_LPI_EN) | 2647 | if ((hw->mac.type == e1000_i354) && |
2648 | (edata->eee_enabled)) | ||
2643 | edata->tx_lpi_enabled = true; | 2649 | edata->tx_lpi_enabled = true; |
2644 | 2650 | ||
2645 | /* Report correct negotiated EEE status for devices that | 2651 | /* Report correct negotiated EEE status for devices that |
@@ -2687,9 +2693,10 @@ static int igb_set_eee(struct net_device *netdev, | |||
2687 | return -EINVAL; | 2693 | return -EINVAL; |
2688 | } | 2694 | } |
2689 | 2695 | ||
2690 | if (eee_curr.advertised != edata->advertised) { | 2696 | if (edata->advertised & |
2697 | ~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL)) { | ||
2691 | dev_err(&adapter->pdev->dev, | 2698 | dev_err(&adapter->pdev->dev, |
2692 | "Setting EEE Advertisement is not supported\n"); | 2699 | "EEE Advertisement supports only 100Tx and or 100T full duplex\n"); |
2693 | return -EINVAL; | 2700 | return -EINVAL; |
2694 | } | 2701 | } |
2695 | 2702 | ||
@@ -2699,9 +2706,14 @@ static int igb_set_eee(struct net_device *netdev, | |||
2699 | return -EINVAL; | 2706 | return -EINVAL; |
2700 | } | 2707 | } |
2701 | 2708 | ||
2709 | adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised); | ||
2702 | if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) { | 2710 | if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) { |
2703 | hw->dev_spec._82575.eee_disable = !edata->eee_enabled; | 2711 | hw->dev_spec._82575.eee_disable = !edata->eee_enabled; |
2704 | igb_set_eee_i350(hw); | 2712 | adapter->flags |= IGB_FLAG_EEE; |
2713 | if (hw->mac.type == e1000_i350) | ||
2714 | igb_set_eee_i350(hw); | ||
2715 | else | ||
2716 | igb_set_eee_i354(hw); | ||
2705 | 2717 | ||
2706 | /* reset link */ | 2718 | /* reset link */ |
2707 | if (netif_running(netdev)) | 2719 | if (netif_running(netdev)) |
@@ -2779,9 +2791,11 @@ static int igb_get_module_eeprom(struct net_device *netdev, | |||
2779 | /* Read EEPROM block, SFF-8079/SFF-8472, word at a time */ | 2791 | /* Read EEPROM block, SFF-8079/SFF-8472, word at a time */ |
2780 | for (i = 0; i < last_word - first_word + 1; i++) { | 2792 | for (i = 0; i < last_word - first_word + 1; i++) { |
2781 | status = igb_read_phy_reg_i2c(hw, first_word + i, &dataword[i]); | 2793 | status = igb_read_phy_reg_i2c(hw, first_word + i, &dataword[i]); |
2782 | if (status != E1000_SUCCESS) | 2794 | if (status != E1000_SUCCESS) { |
2783 | /* Error occurred while reading module */ | 2795 | /* Error occurred while reading module */ |
2796 | kfree(dataword); | ||
2784 | return -EIO; | 2797 | return -EIO; |
2798 | } | ||
2785 | 2799 | ||
2786 | be16_to_cpus(&dataword[i]); | 2800 | be16_to_cpus(&dataword[i]); |
2787 | } | 2801 | } |
diff --git a/drivers/net/ethernet/intel/igb/igb_hwmon.c b/drivers/net/ethernet/intel/igb/igb_hwmon.c index e0af5bc61613..8333f67acf96 100644 --- a/drivers/net/ethernet/intel/igb/igb_hwmon.c +++ b/drivers/net/ethernet/intel/igb/igb_hwmon.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 46d31a49f5ea..cd20409858d1 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel(R) Gigabit Ethernet Linux driver | 3 | Intel(R) Gigabit Ethernet Linux driver |
4 | Copyright(c) 2007-2013 Intel Corporation. | 4 | Copyright(c) 2007-2014 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 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, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -13,8 +13,7 @@ | |||
13 | more details. | 13 | more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License along with | 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., | 16 | this program; if not, see <http://www.gnu.org/licenses/>. |
17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | 17 | ||
19 | The full GNU General Public License is included in this distribution in | 18 | The full GNU General Public License is included in this distribution in |
20 | the file called "COPYING". | 19 | the file called "COPYING". |
@@ -70,7 +69,7 @@ char igb_driver_version[] = DRV_VERSION; | |||
70 | static const char igb_driver_string[] = | 69 | static const char igb_driver_string[] = |
71 | "Intel(R) Gigabit Ethernet Network Driver"; | 70 | "Intel(R) Gigabit Ethernet Network Driver"; |
72 | static const char igb_copyright[] = | 71 | static const char igb_copyright[] = |
73 | "Copyright (c) 2007-2013 Intel Corporation."; | 72 | "Copyright (c) 2007-2014 Intel Corporation."; |
74 | 73 | ||
75 | static const struct e1000_info *igb_info_tbl[] = { | 74 | static const struct e1000_info *igb_info_tbl[] = { |
76 | [board_82575] = &e1000_82575_info, | 75 | [board_82575] = &e1000_82575_info, |
@@ -752,6 +751,28 @@ static void igb_cache_ring_register(struct igb_adapter *adapter) | |||
752 | } | 751 | } |
753 | } | 752 | } |
754 | 753 | ||
754 | u32 igb_rd32(struct e1000_hw *hw, u32 reg) | ||
755 | { | ||
756 | struct igb_adapter *igb = container_of(hw, struct igb_adapter, hw); | ||
757 | u8 __iomem *hw_addr = ACCESS_ONCE(hw->hw_addr); | ||
758 | u32 value = 0; | ||
759 | |||
760 | if (E1000_REMOVED(hw_addr)) | ||
761 | return ~value; | ||
762 | |||
763 | value = readl(&hw_addr[reg]); | ||
764 | |||
765 | /* reads should not return all F's */ | ||
766 | if (!(~value) && (!reg || !(~readl(hw_addr)))) { | ||
767 | struct net_device *netdev = igb->netdev; | ||
768 | hw->hw_addr = NULL; | ||
769 | netif_device_detach(netdev); | ||
770 | netdev_err(netdev, "PCIe link lost, device now detached\n"); | ||
771 | } | ||
772 | |||
773 | return value; | ||
774 | } | ||
775 | |||
755 | /** | 776 | /** |
756 | * igb_write_ivar - configure ivar for given MSI-X vector | 777 | * igb_write_ivar - configure ivar for given MSI-X vector |
757 | * @hw: pointer to the HW structure | 778 | * @hw: pointer to the HW structure |
@@ -1014,6 +1035,12 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx) | |||
1014 | { | 1035 | { |
1015 | struct igb_q_vector *q_vector = adapter->q_vector[v_idx]; | 1036 | struct igb_q_vector *q_vector = adapter->q_vector[v_idx]; |
1016 | 1037 | ||
1038 | /* Coming from igb_set_interrupt_capability, the vectors are not yet | ||
1039 | * allocated. So, q_vector is NULL so we should stop here. | ||
1040 | */ | ||
1041 | if (!q_vector) | ||
1042 | return; | ||
1043 | |||
1017 | if (q_vector->tx.ring) | 1044 | if (q_vector->tx.ring) |
1018 | adapter->tx_ring[q_vector->tx.ring->queue_index] = NULL; | 1045 | adapter->tx_ring[q_vector->tx.ring->queue_index] = NULL; |
1019 | 1046 | ||
@@ -1111,16 +1138,18 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix) | |||
1111 | for (i = 0; i < numvecs; i++) | 1138 | for (i = 0; i < numvecs; i++) |
1112 | adapter->msix_entries[i].entry = i; | 1139 | adapter->msix_entries[i].entry = i; |
1113 | 1140 | ||
1114 | err = pci_enable_msix(adapter->pdev, | 1141 | err = pci_enable_msix_range(adapter->pdev, |
1115 | adapter->msix_entries, | 1142 | adapter->msix_entries, |
1116 | numvecs); | 1143 | numvecs, |
1117 | if (err == 0) | 1144 | numvecs); |
1145 | if (err > 0) | ||
1118 | return; | 1146 | return; |
1119 | 1147 | ||
1120 | igb_reset_interrupt_capability(adapter); | 1148 | igb_reset_interrupt_capability(adapter); |
1121 | 1149 | ||
1122 | /* If we can't do MSI-X, try MSI */ | 1150 | /* If we can't do MSI-X, try MSI */ |
1123 | msi_only: | 1151 | msi_only: |
1152 | adapter->flags &= ~IGB_FLAG_HAS_MSIX; | ||
1124 | #ifdef CONFIG_PCI_IOV | 1153 | #ifdef CONFIG_PCI_IOV |
1125 | /* disable SR-IOV for non MSI-X configurations */ | 1154 | /* disable SR-IOV for non MSI-X configurations */ |
1126 | if (adapter->vf_data) { | 1155 | if (adapter->vf_data) { |
@@ -1726,6 +1755,10 @@ int igb_up(struct igb_adapter *adapter) | |||
1726 | hw->mac.get_link_status = 1; | 1755 | hw->mac.get_link_status = 1; |
1727 | schedule_work(&adapter->watchdog_task); | 1756 | schedule_work(&adapter->watchdog_task); |
1728 | 1757 | ||
1758 | if ((adapter->flags & IGB_FLAG_EEE) && | ||
1759 | (!hw->dev_spec._82575.eee_disable)) | ||
1760 | adapter->eee_advert = MDIO_EEE_100TX | MDIO_EEE_1000T; | ||
1761 | |||
1729 | return 0; | 1762 | return 0; |
1730 | } | 1763 | } |
1731 | 1764 | ||
@@ -1974,6 +2007,21 @@ void igb_reset(struct igb_adapter *adapter) | |||
1974 | } | 2007 | } |
1975 | } | 2008 | } |
1976 | #endif | 2009 | #endif |
2010 | /* Re-establish EEE setting */ | ||
2011 | if (hw->phy.media_type == e1000_media_type_copper) { | ||
2012 | switch (mac->type) { | ||
2013 | case e1000_i350: | ||
2014 | case e1000_i210: | ||
2015 | case e1000_i211: | ||
2016 | igb_set_eee_i350(hw); | ||
2017 | break; | ||
2018 | case e1000_i354: | ||
2019 | igb_set_eee_i354(hw); | ||
2020 | break; | ||
2021 | default: | ||
2022 | break; | ||
2023 | } | ||
2024 | } | ||
1977 | if (!netif_running(adapter->netdev)) | 2025 | if (!netif_running(adapter->netdev)) |
1978 | igb_power_down_link(adapter); | 2026 | igb_power_down_link(adapter); |
1979 | 2027 | ||
@@ -2560,23 +2608,36 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
2560 | (adapter->flags & IGB_FLAG_HAS_MSIX) ? "MSI-X" : | 2608 | (adapter->flags & IGB_FLAG_HAS_MSIX) ? "MSI-X" : |
2561 | (adapter->flags & IGB_FLAG_HAS_MSI) ? "MSI" : "legacy", | 2609 | (adapter->flags & IGB_FLAG_HAS_MSI) ? "MSI" : "legacy", |
2562 | adapter->num_rx_queues, adapter->num_tx_queues); | 2610 | adapter->num_rx_queues, adapter->num_tx_queues); |
2563 | switch (hw->mac.type) { | 2611 | if (hw->phy.media_type == e1000_media_type_copper) { |
2564 | case e1000_i350: | 2612 | switch (hw->mac.type) { |
2565 | case e1000_i210: | 2613 | case e1000_i350: |
2566 | case e1000_i211: | 2614 | case e1000_i210: |
2567 | igb_set_eee_i350(hw); | 2615 | case e1000_i211: |
2568 | break; | 2616 | /* Enable EEE for internal copper PHY devices */ |
2569 | case e1000_i354: | 2617 | err = igb_set_eee_i350(hw); |
2570 | if (hw->phy.media_type == e1000_media_type_copper) { | 2618 | if ((!err) && |
2619 | (!hw->dev_spec._82575.eee_disable)) { | ||
2620 | adapter->eee_advert = | ||
2621 | MDIO_EEE_100TX | MDIO_EEE_1000T; | ||
2622 | adapter->flags |= IGB_FLAG_EEE; | ||
2623 | } | ||
2624 | break; | ||
2625 | case e1000_i354: | ||
2571 | if ((rd32(E1000_CTRL_EXT) & | 2626 | if ((rd32(E1000_CTRL_EXT) & |
2572 | E1000_CTRL_EXT_LINK_MODE_SGMII)) | 2627 | E1000_CTRL_EXT_LINK_MODE_SGMII)) { |
2573 | igb_set_eee_i354(hw); | 2628 | err = igb_set_eee_i354(hw); |
2629 | if ((!err) && | ||
2630 | (!hw->dev_spec._82575.eee_disable)) { | ||
2631 | adapter->eee_advert = | ||
2632 | MDIO_EEE_100TX | MDIO_EEE_1000T; | ||
2633 | adapter->flags |= IGB_FLAG_EEE; | ||
2634 | } | ||
2635 | } | ||
2636 | break; | ||
2637 | default: | ||
2638 | break; | ||
2574 | } | 2639 | } |
2575 | break; | ||
2576 | default: | ||
2577 | break; | ||
2578 | } | 2640 | } |
2579 | |||
2580 | pm_runtime_put_noidle(&pdev->dev); | 2641 | pm_runtime_put_noidle(&pdev->dev); |
2581 | return 0; | 2642 | return 0; |
2582 | 2643 | ||
@@ -3510,6 +3571,13 @@ static inline void igb_set_vmolr(struct igb_adapter *adapter, | |||
3510 | 3571 | ||
3511 | vmolr = rd32(E1000_VMOLR(vfn)); | 3572 | vmolr = rd32(E1000_VMOLR(vfn)); |
3512 | vmolr |= E1000_VMOLR_STRVLAN; /* Strip vlan tags */ | 3573 | vmolr |= E1000_VMOLR_STRVLAN; /* Strip vlan tags */ |
3574 | if (hw->mac.type == e1000_i350) { | ||
3575 | u32 dvmolr; | ||
3576 | |||
3577 | dvmolr = rd32(E1000_DVMOLR(vfn)); | ||
3578 | dvmolr |= E1000_DVMOLR_STRVLAN; | ||
3579 | wr32(E1000_DVMOLR(vfn), dvmolr); | ||
3580 | } | ||
3513 | if (aupe) | 3581 | if (aupe) |
3514 | vmolr |= E1000_VMOLR_AUPE; /* Accept untagged packets */ | 3582 | vmolr |= E1000_VMOLR_AUPE; /* Accept untagged packets */ |
3515 | else | 3583 | else |
@@ -4158,6 +4226,15 @@ static void igb_watchdog_task(struct work_struct *work) | |||
4158 | (ctrl & E1000_CTRL_RFCE) ? "RX" : | 4226 | (ctrl & E1000_CTRL_RFCE) ? "RX" : |
4159 | (ctrl & E1000_CTRL_TFCE) ? "TX" : "None"); | 4227 | (ctrl & E1000_CTRL_TFCE) ? "TX" : "None"); |
4160 | 4228 | ||
4229 | /* disable EEE if enabled */ | ||
4230 | if ((adapter->flags & IGB_FLAG_EEE) && | ||
4231 | (adapter->link_duplex == HALF_DUPLEX)) { | ||
4232 | dev_info(&adapter->pdev->dev, | ||
4233 | "EEE Disabled: unsupported at half duplex. Re-enable using ethtool when at full duplex.\n"); | ||
4234 | adapter->hw.dev_spec._82575.eee_disable = true; | ||
4235 | adapter->flags &= ~IGB_FLAG_EEE; | ||
4236 | } | ||
4237 | |||
4161 | /* check if SmartSpeed worked */ | 4238 | /* check if SmartSpeed worked */ |
4162 | igb_check_downshift(hw); | 4239 | igb_check_downshift(hw); |
4163 | if (phy->speed_downgraded) | 4240 | if (phy->speed_downgraded) |
@@ -4306,8 +4383,7 @@ enum latency_range { | |||
4306 | * were determined based on theoretical maximum wire speed and testing | 4383 | * were determined based on theoretical maximum wire speed and testing |
4307 | * data, in order to minimize response time while increasing bulk | 4384 | * data, in order to minimize response time while increasing bulk |
4308 | * throughput. | 4385 | * throughput. |
4309 | * This functionality is controlled by the InterruptThrottleRate module | 4386 | * This functionality is controlled by ethtool's coalescing settings. |
4310 | * parameter (see igb_param.c) | ||
4311 | * NOTE: This function is called only when operating in a multiqueue | 4387 | * NOTE: This function is called only when operating in a multiqueue |
4312 | * receive environment. | 4388 | * receive environment. |
4313 | **/ | 4389 | **/ |
@@ -4381,8 +4457,7 @@ clear_counts: | |||
4381 | * based on theoretical maximum wire speed and thresholds were set based | 4457 | * based on theoretical maximum wire speed and thresholds were set based |
4382 | * on testing data as well as attempting to minimize response time | 4458 | * on testing data as well as attempting to minimize response time |
4383 | * while increasing bulk throughput. | 4459 | * while increasing bulk throughput. |
4384 | * this functionality is controlled by the InterruptThrottleRate module | 4460 | * This functionality is controlled by ethtool's coalescing settings. |
4385 | * parameter (see igb_param.c) | ||
4386 | * NOTE: These calculations are only valid when operating in a single- | 4461 | * NOTE: These calculations are only valid when operating in a single- |
4387 | * queue environment. | 4462 | * queue environment. |
4388 | **/ | 4463 | **/ |
@@ -4546,7 +4621,7 @@ static int igb_tso(struct igb_ring *tx_ring, | |||
4546 | /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ | 4621 | /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ |
4547 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP; | 4622 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP; |
4548 | 4623 | ||
4549 | if (first->protocol == __constant_htons(ETH_P_IP)) { | 4624 | if (first->protocol == htons(ETH_P_IP)) { |
4550 | struct iphdr *iph = ip_hdr(skb); | 4625 | struct iphdr *iph = ip_hdr(skb); |
4551 | iph->tot_len = 0; | 4626 | iph->tot_len = 0; |
4552 | iph->check = 0; | 4627 | iph->check = 0; |
@@ -4602,12 +4677,12 @@ static void igb_tx_csum(struct igb_ring *tx_ring, struct igb_tx_buffer *first) | |||
4602 | } else { | 4677 | } else { |
4603 | u8 l4_hdr = 0; | 4678 | u8 l4_hdr = 0; |
4604 | switch (first->protocol) { | 4679 | switch (first->protocol) { |
4605 | case __constant_htons(ETH_P_IP): | 4680 | case htons(ETH_P_IP): |
4606 | vlan_macip_lens |= skb_network_header_len(skb); | 4681 | vlan_macip_lens |= skb_network_header_len(skb); |
4607 | type_tucmd |= E1000_ADVTXD_TUCMD_IPV4; | 4682 | type_tucmd |= E1000_ADVTXD_TUCMD_IPV4; |
4608 | l4_hdr = ip_hdr(skb)->protocol; | 4683 | l4_hdr = ip_hdr(skb)->protocol; |
4609 | break; | 4684 | break; |
4610 | case __constant_htons(ETH_P_IPV6): | 4685 | case htons(ETH_P_IPV6): |
4611 | vlan_macip_lens |= skb_network_header_len(skb); | 4686 | vlan_macip_lens |= skb_network_header_len(skb); |
4612 | l4_hdr = ipv6_hdr(skb)->nexthdr; | 4687 | l4_hdr = ipv6_hdr(skb)->nexthdr; |
4613 | break; | 4688 | break; |
@@ -5127,10 +5202,10 @@ void igb_update_stats(struct igb_adapter *adapter, | |||
5127 | } | 5202 | } |
5128 | 5203 | ||
5129 | do { | 5204 | do { |
5130 | start = u64_stats_fetch_begin_bh(&ring->rx_syncp); | 5205 | start = u64_stats_fetch_begin_irq(&ring->rx_syncp); |
5131 | _bytes = ring->rx_stats.bytes; | 5206 | _bytes = ring->rx_stats.bytes; |
5132 | _packets = ring->rx_stats.packets; | 5207 | _packets = ring->rx_stats.packets; |
5133 | } while (u64_stats_fetch_retry_bh(&ring->rx_syncp, start)); | 5208 | } while (u64_stats_fetch_retry_irq(&ring->rx_syncp, start)); |
5134 | bytes += _bytes; | 5209 | bytes += _bytes; |
5135 | packets += _packets; | 5210 | packets += _packets; |
5136 | } | 5211 | } |
@@ -5143,10 +5218,10 @@ void igb_update_stats(struct igb_adapter *adapter, | |||
5143 | for (i = 0; i < adapter->num_tx_queues; i++) { | 5218 | for (i = 0; i < adapter->num_tx_queues; i++) { |
5144 | struct igb_ring *ring = adapter->tx_ring[i]; | 5219 | struct igb_ring *ring = adapter->tx_ring[i]; |
5145 | do { | 5220 | do { |
5146 | start = u64_stats_fetch_begin_bh(&ring->tx_syncp); | 5221 | start = u64_stats_fetch_begin_irq(&ring->tx_syncp); |
5147 | _bytes = ring->tx_stats.bytes; | 5222 | _bytes = ring->tx_stats.bytes; |
5148 | _packets = ring->tx_stats.packets; | 5223 | _packets = ring->tx_stats.packets; |
5149 | } while (u64_stats_fetch_retry_bh(&ring->tx_syncp, start)); | 5224 | } while (u64_stats_fetch_retry_irq(&ring->tx_syncp, start)); |
5150 | bytes += _bytes; | 5225 | bytes += _bytes; |
5151 | packets += _packets; | 5226 | packets += _packets; |
5152 | } | 5227 | } |
@@ -6620,7 +6695,9 @@ static inline void igb_rx_hash(struct igb_ring *ring, | |||
6620 | struct sk_buff *skb) | 6695 | struct sk_buff *skb) |
6621 | { | 6696 | { |
6622 | if (ring->netdev->features & NETIF_F_RXHASH) | 6697 | if (ring->netdev->features & NETIF_F_RXHASH) |
6623 | skb->rxhash = le32_to_cpu(rx_desc->wb.lower.hi_dword.rss); | 6698 | skb_set_hash(skb, |
6699 | le32_to_cpu(rx_desc->wb.lower.hi_dword.rss), | ||
6700 | PKT_HASH_TYPE_L3); | ||
6624 | } | 6701 | } |
6625 | 6702 | ||
6626 | /** | 6703 | /** |
@@ -6690,7 +6767,7 @@ static unsigned int igb_get_headlen(unsigned char *data, | |||
6690 | hdr.network += ETH_HLEN; | 6767 | hdr.network += ETH_HLEN; |
6691 | 6768 | ||
6692 | /* handle any vlan tag if present */ | 6769 | /* handle any vlan tag if present */ |
6693 | if (protocol == __constant_htons(ETH_P_8021Q)) { | 6770 | if (protocol == htons(ETH_P_8021Q)) { |
6694 | if ((hdr.network - data) > (max_len - VLAN_HLEN)) | 6771 | if ((hdr.network - data) > (max_len - VLAN_HLEN)) |
6695 | return max_len; | 6772 | return max_len; |
6696 | 6773 | ||
@@ -6699,7 +6776,7 @@ static unsigned int igb_get_headlen(unsigned char *data, | |||
6699 | } | 6776 | } |
6700 | 6777 | ||
6701 | /* handle L3 protocols */ | 6778 | /* handle L3 protocols */ |
6702 | if (protocol == __constant_htons(ETH_P_IP)) { | 6779 | if (protocol == htons(ETH_P_IP)) { |
6703 | if ((hdr.network - data) > (max_len - sizeof(struct iphdr))) | 6780 | if ((hdr.network - data) > (max_len - sizeof(struct iphdr))) |
6704 | return max_len; | 6781 | return max_len; |
6705 | 6782 | ||
@@ -6713,7 +6790,7 @@ static unsigned int igb_get_headlen(unsigned char *data, | |||
6713 | /* record next protocol if header is present */ | 6790 | /* record next protocol if header is present */ |
6714 | if (!(hdr.ipv4->frag_off & htons(IP_OFFSET))) | 6791 | if (!(hdr.ipv4->frag_off & htons(IP_OFFSET))) |
6715 | nexthdr = hdr.ipv4->protocol; | 6792 | nexthdr = hdr.ipv4->protocol; |
6716 | } else if (protocol == __constant_htons(ETH_P_IPV6)) { | 6793 | } else if (protocol == htons(ETH_P_IPV6)) { |
6717 | if ((hdr.network - data) > (max_len - sizeof(struct ipv6hdr))) | 6794 | if ((hdr.network - data) > (max_len - sizeof(struct ipv6hdr))) |
6718 | return max_len; | 6795 | return max_len; |
6719 | 6796 | ||
@@ -6903,7 +6980,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) | |||
6903 | unsigned int total_bytes = 0, total_packets = 0; | 6980 | unsigned int total_bytes = 0, total_packets = 0; |
6904 | u16 cleaned_count = igb_desc_unused(rx_ring); | 6981 | u16 cleaned_count = igb_desc_unused(rx_ring); |
6905 | 6982 | ||
6906 | do { | 6983 | while (likely(total_packets < budget)) { |
6907 | union e1000_adv_rx_desc *rx_desc; | 6984 | union e1000_adv_rx_desc *rx_desc; |
6908 | 6985 | ||
6909 | /* return some buffers to hardware, one at a time is too slow */ | 6986 | /* return some buffers to hardware, one at a time is too slow */ |
@@ -6955,7 +7032,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) | |||
6955 | 7032 | ||
6956 | /* update budget accounting */ | 7033 | /* update budget accounting */ |
6957 | total_packets++; | 7034 | total_packets++; |
6958 | } while (likely(total_packets < budget)); | 7035 | } |
6959 | 7036 | ||
6960 | /* place incomplete frames back on ring for completion */ | 7037 | /* place incomplete frames back on ring for completion */ |
6961 | rx_ring->skb = skb; | 7038 | rx_ring->skb = skb; |
@@ -7114,8 +7191,10 @@ static int igb_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | |||
7114 | case SIOCGMIIREG: | 7191 | case SIOCGMIIREG: |
7115 | case SIOCSMIIREG: | 7192 | case SIOCSMIIREG: |
7116 | return igb_mii_ioctl(netdev, ifr, cmd); | 7193 | return igb_mii_ioctl(netdev, ifr, cmd); |
7194 | case SIOCGHWTSTAMP: | ||
7195 | return igb_ptp_get_ts_config(netdev, ifr); | ||
7117 | case SIOCSHWTSTAMP: | 7196 | case SIOCSHWTSTAMP: |
7118 | return igb_ptp_hwtstamp_ioctl(netdev, ifr, cmd); | 7197 | return igb_ptp_set_ts_config(netdev, ifr); |
7119 | default: | 7198 | default: |
7120 | return -EOPNOTSUPP; | 7199 | return -EOPNOTSUPP; |
7121 | } | 7200 | } |
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c index 5a54e3dc535d..da55fbb090b2 100644 --- a/drivers/net/ethernet/intel/igb/igb_ptp.c +++ b/drivers/net/ethernet/intel/igb/igb_ptp.c | |||
@@ -12,9 +12,8 @@ | |||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. | 13 | * GNU General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU General Public License along | 15 | * You should have received a copy of the GNU General Public License along with |
16 | * with this program; if not, write to the Free Software Foundation, Inc., | 16 | * this program; if not, see <http://www.gnu.org/licenses/>. |
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | */ | 17 | */ |
19 | #include <linux/module.h> | 18 | #include <linux/module.h> |
20 | #include <linux/device.h> | 19 | #include <linux/device.h> |
@@ -75,6 +74,8 @@ | |||
75 | #define INCVALUE_82576 (16 << IGB_82576_TSYNC_SHIFT) | 74 | #define INCVALUE_82576 (16 << IGB_82576_TSYNC_SHIFT) |
76 | #define IGB_NBITS_82580 40 | 75 | #define IGB_NBITS_82580 40 |
77 | 76 | ||
77 | static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter); | ||
78 | |||
78 | /* SYSTIM read access for the 82576 */ | 79 | /* SYSTIM read access for the 82576 */ |
79 | static cycle_t igb_ptp_read_82576(const struct cyclecounter *cc) | 80 | static cycle_t igb_ptp_read_82576(const struct cyclecounter *cc) |
80 | { | 81 | { |
@@ -372,7 +373,7 @@ static int igb_ptp_enable(struct ptp_clock_info *ptp, | |||
372 | * This work function polls the TSYNCTXCTL valid bit to determine when a | 373 | * This work function polls the TSYNCTXCTL valid bit to determine when a |
373 | * timestamp has been taken for the current stored skb. | 374 | * timestamp has been taken for the current stored skb. |
374 | **/ | 375 | **/ |
375 | void igb_ptp_tx_work(struct work_struct *work) | 376 | static void igb_ptp_tx_work(struct work_struct *work) |
376 | { | 377 | { |
377 | struct igb_adapter *adapter = container_of(work, struct igb_adapter, | 378 | struct igb_adapter *adapter = container_of(work, struct igb_adapter, |
378 | ptp_tx_work); | 379 | ptp_tx_work); |
@@ -466,7 +467,7 @@ void igb_ptp_rx_hang(struct igb_adapter *adapter) | |||
466 | * available, then it must have been for this skb here because we only | 467 | * available, then it must have been for this skb here because we only |
467 | * allow only one such packet into the queue. | 468 | * allow only one such packet into the queue. |
468 | **/ | 469 | **/ |
469 | void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) | 470 | static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter) |
470 | { | 471 | { |
471 | struct e1000_hw *hw = &adapter->hw; | 472 | struct e1000_hw *hw = &adapter->hw; |
472 | struct skb_shared_hwtstamps shhwtstamps; | 473 | struct skb_shared_hwtstamps shhwtstamps; |
@@ -540,10 +541,26 @@ void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, | |||
540 | } | 541 | } |
541 | 542 | ||
542 | /** | 543 | /** |
543 | * igb_ptp_hwtstamp_ioctl - control hardware time stamping | 544 | * igb_ptp_get_ts_config - get hardware time stamping config |
545 | * @netdev: | ||
546 | * @ifreq: | ||
547 | * | ||
548 | * Get the hwtstamp_config settings to return to the user. Rather than attempt | ||
549 | * to deconstruct the settings from the registers, just return a shadow copy | ||
550 | * of the last known settings. | ||
551 | **/ | ||
552 | int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr) | ||
553 | { | ||
554 | struct igb_adapter *adapter = netdev_priv(netdev); | ||
555 | struct hwtstamp_config *config = &adapter->tstamp_config; | ||
556 | |||
557 | return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ? | ||
558 | -EFAULT : 0; | ||
559 | } | ||
560 | /** | ||
561 | * igb_ptp_set_ts_config - control hardware time stamping | ||
544 | * @netdev: | 562 | * @netdev: |
545 | * @ifreq: | 563 | * @ifreq: |
546 | * @cmd: | ||
547 | * | 564 | * |
548 | * Outgoing time stamping can be enabled and disabled. Play nice and | 565 | * Outgoing time stamping can be enabled and disabled. Play nice and |
549 | * disable it when requested, although it shouldn't case any overhead | 566 | * disable it when requested, although it shouldn't case any overhead |
@@ -557,12 +574,11 @@ void igb_ptp_rx_rgtstamp(struct igb_q_vector *q_vector, | |||
557 | * not supported, with the exception of "all V2 events regardless of | 574 | * not supported, with the exception of "all V2 events regardless of |
558 | * level 2 or 4". | 575 | * level 2 or 4". |
559 | **/ | 576 | **/ |
560 | int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | 577 | int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr) |
561 | struct ifreq *ifr, int cmd) | ||
562 | { | 578 | { |
563 | struct igb_adapter *adapter = netdev_priv(netdev); | 579 | struct igb_adapter *adapter = netdev_priv(netdev); |
564 | struct e1000_hw *hw = &adapter->hw; | 580 | struct e1000_hw *hw = &adapter->hw; |
565 | struct hwtstamp_config config; | 581 | struct hwtstamp_config *config = &adapter->tstamp_config; |
566 | u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED; | 582 | u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED; |
567 | u32 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; | 583 | u32 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; |
568 | u32 tsync_rx_cfg = 0; | 584 | u32 tsync_rx_cfg = 0; |
@@ -570,14 +586,14 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
570 | bool is_l2 = false; | 586 | bool is_l2 = false; |
571 | u32 regval; | 587 | u32 regval; |
572 | 588 | ||
573 | if (copy_from_user(&config, ifr->ifr_data, sizeof(config))) | 589 | if (copy_from_user(config, ifr->ifr_data, sizeof(*config))) |
574 | return -EFAULT; | 590 | return -EFAULT; |
575 | 591 | ||
576 | /* reserved for future extensions */ | 592 | /* reserved for future extensions */ |
577 | if (config.flags) | 593 | if (config->flags) |
578 | return -EINVAL; | 594 | return -EINVAL; |
579 | 595 | ||
580 | switch (config.tx_type) { | 596 | switch (config->tx_type) { |
581 | case HWTSTAMP_TX_OFF: | 597 | case HWTSTAMP_TX_OFF: |
582 | tsync_tx_ctl = 0; | 598 | tsync_tx_ctl = 0; |
583 | case HWTSTAMP_TX_ON: | 599 | case HWTSTAMP_TX_ON: |
@@ -586,7 +602,7 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
586 | return -ERANGE; | 602 | return -ERANGE; |
587 | } | 603 | } |
588 | 604 | ||
589 | switch (config.rx_filter) { | 605 | switch (config->rx_filter) { |
590 | case HWTSTAMP_FILTER_NONE: | 606 | case HWTSTAMP_FILTER_NONE: |
591 | tsync_rx_ctl = 0; | 607 | tsync_rx_ctl = 0; |
592 | break; | 608 | break; |
@@ -610,7 +626,7 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
610 | case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: | 626 | case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: |
611 | case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: | 627 | case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: |
612 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2; | 628 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2; |
613 | config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; | 629 | config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; |
614 | is_l2 = true; | 630 | is_l2 = true; |
615 | is_l4 = true; | 631 | is_l4 = true; |
616 | break; | 632 | break; |
@@ -621,12 +637,12 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
621 | */ | 637 | */ |
622 | if (hw->mac.type != e1000_82576) { | 638 | if (hw->mac.type != e1000_82576) { |
623 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; | 639 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; |
624 | config.rx_filter = HWTSTAMP_FILTER_ALL; | 640 | config->rx_filter = HWTSTAMP_FILTER_ALL; |
625 | break; | 641 | break; |
626 | } | 642 | } |
627 | /* fall through */ | 643 | /* fall through */ |
628 | default: | 644 | default: |
629 | config.rx_filter = HWTSTAMP_FILTER_NONE; | 645 | config->rx_filter = HWTSTAMP_FILTER_NONE; |
630 | return -ERANGE; | 646 | return -ERANGE; |
631 | } | 647 | } |
632 | 648 | ||
@@ -643,7 +659,7 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
643 | if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) { | 659 | if ((hw->mac.type >= e1000_82580) && tsync_rx_ctl) { |
644 | tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; | 660 | tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; |
645 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; | 661 | tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; |
646 | config.rx_filter = HWTSTAMP_FILTER_ALL; | 662 | config->rx_filter = HWTSTAMP_FILTER_ALL; |
647 | is_l2 = true; | 663 | is_l2 = true; |
648 | is_l4 = true; | 664 | is_l4 = true; |
649 | 665 | ||
@@ -707,7 +723,7 @@ int igb_ptp_hwtstamp_ioctl(struct net_device *netdev, | |||
707 | regval = rd32(E1000_RXSTMPL); | 723 | regval = rd32(E1000_RXSTMPL); |
708 | regval = rd32(E1000_RXSTMPH); | 724 | regval = rd32(E1000_RXSTMPH); |
709 | 725 | ||
710 | return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? | 726 | return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ? |
711 | -EFAULT : 0; | 727 | -EFAULT : 0; |
712 | } | 728 | } |
713 | 729 | ||
@@ -798,7 +814,7 @@ void igb_ptp_init(struct igb_adapter *adapter) | |||
798 | 814 | ||
799 | /* Initialize the time sync interrupts for devices that support it. */ | 815 | /* Initialize the time sync interrupts for devices that support it. */ |
800 | if (hw->mac.type >= e1000_82580) { | 816 | if (hw->mac.type >= e1000_82580) { |
801 | wr32(E1000_TSIM, E1000_TSIM_TXTS); | 817 | wr32(E1000_TSIM, TSYNC_INTERRUPTS); |
802 | wr32(E1000_IMS, E1000_IMS_TS); | 818 | wr32(E1000_IMS, E1000_IMS_TS); |
803 | } | 819 | } |
804 | 820 | ||
@@ -864,6 +880,9 @@ void igb_ptp_reset(struct igb_adapter *adapter) | |||
864 | if (!(adapter->flags & IGB_FLAG_PTP)) | 880 | if (!(adapter->flags & IGB_FLAG_PTP)) |
865 | return; | 881 | return; |
866 | 882 | ||
883 | /* reset the tstamp_config */ | ||
884 | memset(&adapter->tstamp_config, 0, sizeof(adapter->tstamp_config)); | ||
885 | |||
867 | switch (adapter->hw.mac.type) { | 886 | switch (adapter->hw.mac.type) { |
868 | case e1000_82576: | 887 | case e1000_82576: |
869 | /* Dial the nominal frequency. */ | 888 | /* Dial the nominal frequency. */ |
@@ -876,7 +895,7 @@ void igb_ptp_reset(struct igb_adapter *adapter) | |||
876 | case e1000_i211: | 895 | case e1000_i211: |
877 | /* Enable the timer functions and interrupts. */ | 896 | /* Enable the timer functions and interrupts. */ |
878 | wr32(E1000_TSAUXC, 0x0); | 897 | wr32(E1000_TSAUXC, 0x0); |
879 | wr32(E1000_TSIM, E1000_TSIM_TXTS); | 898 | wr32(E1000_TSIM, TSYNC_INTERRUPTS); |
880 | wr32(E1000_IMS, E1000_IMS_TS); | 899 | wr32(E1000_IMS, E1000_IMS_TS); |
881 | break; | 900 | break; |
882 | default: | 901 | default: |