diff options
25 files changed, 1003 insertions, 738 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c index ff2d806eaef7..a5f6b11d6992 100644 --- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c +++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* 80003ES2LAN Gigabit Ethernet Controller (Copper) | 22 | /* 80003ES2LAN Gigabit Ethernet Controller (Copper) |
| 30 | * 80003ES2LAN Gigabit Ethernet Controller (Serdes) | 23 | * 80003ES2LAN Gigabit Ethernet Controller (Serdes) |
diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.h b/drivers/net/ethernet/intel/e1000e/80003es2lan.h index 90d363b2d280..535a9430976d 100644 --- a/drivers/net/ethernet/intel/e1000e/80003es2lan.h +++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_80003ES2LAN_H_ | 22 | #ifndef _E1000E_80003ES2LAN_H_ |
| 30 | #define _E1000E_80003ES2LAN_H_ | 23 | #define _E1000E_80003ES2LAN_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c index 8fed74e3fa53..e0aa7f1efb08 100644 --- a/drivers/net/ethernet/intel/e1000e/82571.c +++ b/drivers/net/ethernet/intel/e1000e/82571.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* 82571EB Gigabit Ethernet Controller | 22 | /* 82571EB Gigabit Ethernet Controller |
| 30 | * 82571EB Gigabit Ethernet Controller (Copper) | 23 | * 82571EB Gigabit Ethernet Controller (Copper) |
diff --git a/drivers/net/ethernet/intel/e1000e/82571.h b/drivers/net/ethernet/intel/e1000e/82571.h index 08e24dc3dc0e..2e758f796d60 100644 --- a/drivers/net/ethernet/intel/e1000e/82571.h +++ b/drivers/net/ethernet/intel/e1000e/82571.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_82571_H_ | 22 | #ifndef _E1000E_82571_H_ |
| 30 | #define _E1000E_82571_H_ | 23 | #define _E1000E_82571_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/Makefile b/drivers/net/ethernet/intel/e1000e/Makefile index c2dcfcc10857..106de493373c 100644 --- a/drivers/net/ethernet/intel/e1000e/Makefile +++ b/drivers/net/ethernet/intel/e1000e/Makefile | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | ################################################################################ | 1 | ################################################################################ |
| 2 | # | 2 | # |
| 3 | # Intel PRO/1000 Linux driver | 3 | # Intel PRO/1000 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, |
| @@ -12,9 +12,8 @@ | |||
| 12 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 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 |
| 16 | # this program; if not, write to the Free Software Foundation, Inc., | 16 | # along with 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/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h index 351c94a0cf74..d18e89212575 100644 --- a/drivers/net/ethernet/intel/e1000e/defines.h +++ b/drivers/net/ethernet/intel/e1000e/defines.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000_DEFINES_H_ | 22 | #ifndef _E1000_DEFINES_H_ |
| 30 | #define _E1000_DEFINES_H_ | 23 | #define _E1000_DEFINES_H_ |
| @@ -35,9 +28,11 @@ | |||
| 35 | 28 | ||
| 36 | /* Definitions for power management and wakeup registers */ | 29 | /* Definitions for power management and wakeup registers */ |
| 37 | /* Wake Up Control */ | 30 | /* Wake Up Control */ |
| 38 | #define E1000_WUC_APME 0x00000001 /* APM Enable */ | 31 | #define E1000_WUC_APME 0x00000001 /* APM Enable */ |
| 39 | #define E1000_WUC_PME_EN 0x00000002 /* PME Enable */ | 32 | #define E1000_WUC_PME_EN 0x00000002 /* PME Enable */ |
| 40 | #define E1000_WUC_PHY_WAKE 0x00000100 /* if PHY supports wakeup */ | 33 | #define E1000_WUC_PME_STATUS 0x00000004 /* PME Status */ |
| 34 | #define E1000_WUC_APMPME 0x00000008 /* Assert PME on APM Wakeup */ | ||
| 35 | #define E1000_WUC_PHY_WAKE 0x00000100 /* if PHY supports wakeup */ | ||
| 41 | 36 | ||
| 42 | /* Wake Up Filter Control */ | 37 | /* Wake Up Filter Control */ |
| 43 | #define E1000_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ | 38 | #define E1000_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */ |
diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h index 0150f7fc893d..5325e3e2154e 100644 --- a/drivers/net/ethernet/intel/e1000e/e1000.h +++ b/drivers/net/ethernet/intel/e1000e/e1000.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* Linux PRO/1000 Ethernet Driver main header file */ | 22 | /* Linux PRO/1000 Ethernet Driver main header file */ |
| 30 | 23 | ||
| @@ -333,7 +326,6 @@ struct e1000_adapter { | |||
| 333 | struct work_struct update_phy_task; | 326 | struct work_struct update_phy_task; |
| 334 | struct work_struct print_hang_task; | 327 | struct work_struct print_hang_task; |
| 335 | 328 | ||
| 336 | bool idle_check; | ||
| 337 | int phy_hang_count; | 329 | int phy_hang_count; |
| 338 | 330 | ||
| 339 | u16 tx_ring_count; | 331 | u16 tx_ring_count; |
| @@ -476,7 +468,7 @@ void e1000e_check_options(struct e1000_adapter *adapter); | |||
| 476 | void e1000e_set_ethtool_ops(struct net_device *netdev); | 468 | void e1000e_set_ethtool_ops(struct net_device *netdev); |
| 477 | 469 | ||
| 478 | int e1000e_up(struct e1000_adapter *adapter); | 470 | int e1000e_up(struct e1000_adapter *adapter); |
| 479 | void e1000e_down(struct e1000_adapter *adapter); | 471 | void e1000e_down(struct e1000_adapter *adapter, bool reset); |
| 480 | void e1000e_reinit_locked(struct e1000_adapter *adapter); | 472 | void e1000e_reinit_locked(struct e1000_adapter *adapter); |
| 481 | void e1000e_reset(struct e1000_adapter *adapter); | 473 | void e1000e_reset(struct e1000_adapter *adapter); |
| 482 | void e1000e_power_up_phy(struct e1000_adapter *adapter); | 474 | void e1000e_power_up_phy(struct e1000_adapter *adapter); |
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c index d14c8f53384c..3c2898d0c2aa 100644 --- a/drivers/net/ethernet/intel/e1000e/ethtool.c +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* ethtool support for e1000 */ | 22 | /* ethtool support for e1000 */ |
| 30 | 23 | ||
| @@ -332,7 +325,7 @@ static int e1000_set_settings(struct net_device *netdev, | |||
| 332 | 325 | ||
| 333 | /* reset the link */ | 326 | /* reset the link */ |
| 334 | if (netif_running(adapter->netdev)) { | 327 | if (netif_running(adapter->netdev)) { |
| 335 | e1000e_down(adapter); | 328 | e1000e_down(adapter, true); |
| 336 | e1000e_up(adapter); | 329 | e1000e_up(adapter); |
| 337 | } else { | 330 | } else { |
| 338 | e1000e_reset(adapter); | 331 | e1000e_reset(adapter); |
| @@ -380,7 +373,7 @@ static int e1000_set_pauseparam(struct net_device *netdev, | |||
| 380 | if (adapter->fc_autoneg == AUTONEG_ENABLE) { | 373 | if (adapter->fc_autoneg == AUTONEG_ENABLE) { |
| 381 | hw->fc.requested_mode = e1000_fc_default; | 374 | hw->fc.requested_mode = e1000_fc_default; |
| 382 | if (netif_running(adapter->netdev)) { | 375 | if (netif_running(adapter->netdev)) { |
| 383 | e1000e_down(adapter); | 376 | e1000e_down(adapter, true); |
| 384 | e1000e_up(adapter); | 377 | e1000e_up(adapter); |
| 385 | } else { | 378 | } else { |
| 386 | e1000e_reset(adapter); | 379 | e1000e_reset(adapter); |
| @@ -726,7 +719,7 @@ static int e1000_set_ringparam(struct net_device *netdev, | |||
| 726 | 719 | ||
| 727 | pm_runtime_get_sync(netdev->dev.parent); | 720 | pm_runtime_get_sync(netdev->dev.parent); |
| 728 | 721 | ||
| 729 | e1000e_down(adapter); | 722 | e1000e_down(adapter, true); |
| 730 | 723 | ||
| 731 | /* We can't just free everything and then setup again, because the | 724 | /* We can't just free everything and then setup again, because the |
| 732 | * ISRs in MSI-X mode get passed pointers to the Tx and Rx ring | 725 | * ISRs in MSI-X mode get passed pointers to the Tx and Rx ring |
| @@ -924,15 +917,21 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data) | |||
| 924 | } | 917 | } |
| 925 | if (mac->type == e1000_pch2lan) { | 918 | if (mac->type == e1000_pch2lan) { |
| 926 | /* SHRAH[0,1,2] different than previous */ | 919 | /* SHRAH[0,1,2] different than previous */ |
| 927 | if (i == 7) | 920 | if (i == 1) |
| 928 | mask &= 0xFFF4FFFF; | 921 | mask &= 0xFFF4FFFF; |
| 929 | /* SHRAH[3] different than SHRAH[0,1,2] */ | 922 | /* SHRAH[3] different than SHRAH[0,1,2] */ |
| 930 | if (i == 10) | 923 | if (i == 4) |
| 931 | mask |= (1 << 30); | 924 | mask |= (1 << 30); |
| 925 | /* RAR[1-6] owned by management engine - skipping */ | ||
| 926 | if (i > 0) | ||
| 927 | i += 6; | ||
| 932 | } | 928 | } |
| 933 | 929 | ||
| 934 | REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1), mask, | 930 | REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1), mask, |
| 935 | 0xFFFFFFFF); | 931 | 0xFFFFFFFF); |
| 932 | /* reset index to actual value */ | ||
| 933 | if ((mac->type == e1000_pch2lan) && (i > 6)) | ||
| 934 | i -= 6; | ||
| 936 | } | 935 | } |
| 937 | 936 | ||
| 938 | for (i = 0; i < mac->mta_reg_count; i++) | 937 | for (i = 0; i < mac->mta_reg_count; i++) |
diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h index b7f38435d1fd..6b3de5f39a97 100644 --- a/drivers/net/ethernet/intel/e1000e/hw.h +++ b/drivers/net/ethernet/intel/e1000e/hw.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000_HW_H_ | 22 | #ifndef _E1000_HW_H_ |
| 30 | #define _E1000_HW_H_ | 23 | #define _E1000_HW_H_ |
| @@ -655,12 +648,20 @@ struct e1000_shadow_ram { | |||
| 655 | 648 | ||
| 656 | #define E1000_ICH8_SHADOW_RAM_WORDS 2048 | 649 | #define E1000_ICH8_SHADOW_RAM_WORDS 2048 |
| 657 | 650 | ||
| 651 | /* I218 PHY Ultra Low Power (ULP) states */ | ||
| 652 | enum e1000_ulp_state { | ||
| 653 | e1000_ulp_state_unknown, | ||
| 654 | e1000_ulp_state_off, | ||
| 655 | e1000_ulp_state_on, | ||
| 656 | }; | ||
| 657 | |||
| 658 | struct e1000_dev_spec_ich8lan { | 658 | struct e1000_dev_spec_ich8lan { |
| 659 | bool kmrn_lock_loss_workaround_enabled; | 659 | bool kmrn_lock_loss_workaround_enabled; |
| 660 | struct e1000_shadow_ram shadow_ram[E1000_ICH8_SHADOW_RAM_WORDS]; | 660 | struct e1000_shadow_ram shadow_ram[E1000_ICH8_SHADOW_RAM_WORDS]; |
| 661 | bool nvm_k1_enabled; | 661 | bool nvm_k1_enabled; |
| 662 | bool eee_disable; | 662 | bool eee_disable; |
| 663 | u16 eee_lp_ability; | 663 | u16 eee_lp_ability; |
| 664 | enum e1000_ulp_state ulp_state; | ||
| 664 | }; | 665 | }; |
| 665 | 666 | ||
| 666 | struct e1000_hw { | 667 | struct e1000_hw { |
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 42f0f6717511..9866f264f55e 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* 82562G 10/100 Network Connection | 22 | /* 82562G 10/100 Network Connection |
| 30 | * 82562G-2 10/100 Network Connection | 23 | * 82562G-2 10/100 Network Connection |
| @@ -53,6 +46,14 @@ | |||
| 53 | * 82578DC Gigabit Network Connection | 46 | * 82578DC Gigabit Network Connection |
| 54 | * 82579LM Gigabit Network Connection | 47 | * 82579LM Gigabit Network Connection |
| 55 | * 82579V Gigabit Network Connection | 48 | * 82579V Gigabit Network Connection |
| 49 | * Ethernet Connection I217-LM | ||
| 50 | * Ethernet Connection I217-V | ||
| 51 | * Ethernet Connection I218-V | ||
| 52 | * Ethernet Connection I218-LM | ||
| 53 | * Ethernet Connection (2) I218-LM | ||
| 54 | * Ethernet Connection (2) I218-V | ||
| 55 | * Ethernet Connection (3) I218-LM | ||
| 56 | * Ethernet Connection (3) I218-V | ||
| 56 | */ | 57 | */ |
| 57 | 58 | ||
| 58 | #include "e1000.h" | 59 | #include "e1000.h" |
| @@ -142,7 +143,9 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index); | |||
| 142 | static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index); | 143 | static void e1000_rar_set_pch_lpt(struct e1000_hw *hw, u8 *addr, u32 index); |
| 143 | static s32 e1000_k1_workaround_lv(struct e1000_hw *hw); | 144 | static s32 e1000_k1_workaround_lv(struct e1000_hw *hw); |
| 144 | static void e1000_gate_hw_phy_config_ich8lan(struct e1000_hw *hw, bool gate); | 145 | static void e1000_gate_hw_phy_config_ich8lan(struct e1000_hw *hw, bool gate); |
| 146 | static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force); | ||
| 145 | static s32 e1000_setup_copper_link_pch_lpt(struct e1000_hw *hw); | 147 | static s32 e1000_setup_copper_link_pch_lpt(struct e1000_hw *hw); |
| 148 | static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state); | ||
| 146 | 149 | ||
| 147 | static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) | 150 | static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) |
| 148 | { | 151 | { |
| @@ -239,6 +242,47 @@ out: | |||
| 239 | } | 242 | } |
| 240 | 243 | ||
| 241 | /** | 244 | /** |
| 245 | * e1000_toggle_lanphypc_pch_lpt - toggle the LANPHYPC pin value | ||
| 246 | * @hw: pointer to the HW structure | ||
| 247 | * | ||
| 248 | * Toggling the LANPHYPC pin value fully power-cycles the PHY and is | ||
| 249 | * used to reset the PHY to a quiescent state when necessary. | ||
| 250 | **/ | ||
| 251 | static void e1000_toggle_lanphypc_pch_lpt(struct e1000_hw *hw) | ||
| 252 | { | ||
| 253 | u32 mac_reg; | ||
| 254 | |||
| 255 | /* Set Phy Config Counter to 50msec */ | ||
| 256 | mac_reg = er32(FEXTNVM3); | ||
| 257 | mac_reg &= ~E1000_FEXTNVM3_PHY_CFG_COUNTER_MASK; | ||
| 258 | mac_reg |= E1000_FEXTNVM3_PHY_CFG_COUNTER_50MSEC; | ||
| 259 | ew32(FEXTNVM3, mac_reg); | ||
| 260 | |||
| 261 | /* Toggle LANPHYPC Value bit */ | ||
| 262 | mac_reg = er32(CTRL); | ||
| 263 | mac_reg |= E1000_CTRL_LANPHYPC_OVERRIDE; | ||
| 264 | mac_reg &= ~E1000_CTRL_LANPHYPC_VALUE; | ||
| 265 | ew32(CTRL, mac_reg); | ||
| 266 | e1e_flush(); | ||
| 267 | usleep_range(10, 20); | ||
| 268 | mac_reg &= ~E1000_CTRL_LANPHYPC_OVERRIDE; | ||
| 269 | ew32(CTRL, mac_reg); | ||
| 270 | e1e_flush(); | ||
| 271 | |||
| 272 | if (hw->mac.type < e1000_pch_lpt) { | ||
| 273 | msleep(50); | ||
| 274 | } else { | ||
| 275 | u16 count = 20; | ||
| 276 | |||
| 277 | do { | ||
| 278 | usleep_range(5000, 10000); | ||
| 279 | } while (!(er32(CTRL_EXT) & E1000_CTRL_EXT_LPCD) && count--); | ||
| 280 | |||
| 281 | msleep(30); | ||
| 282 | } | ||
| 283 | } | ||
| 284 | |||
| 285 | /** | ||
| 242 | * e1000_init_phy_workarounds_pchlan - PHY initialization workarounds | 286 | * e1000_init_phy_workarounds_pchlan - PHY initialization workarounds |
| 243 | * @hw: pointer to the HW structure | 287 | * @hw: pointer to the HW structure |
| 244 | * | 288 | * |
| @@ -247,6 +291,7 @@ out: | |||
| 247 | **/ | 291 | **/ |
| 248 | static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw) | 292 | static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw) |
| 249 | { | 293 | { |
| 294 | struct e1000_adapter *adapter = hw->adapter; | ||
| 250 | u32 mac_reg, fwsm = er32(FWSM); | 295 | u32 mac_reg, fwsm = er32(FWSM); |
| 251 | s32 ret_val; | 296 | s32 ret_val; |
| 252 | 297 | ||
| @@ -255,6 +300,12 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw) | |||
| 255 | */ | 300 | */ |
| 256 | e1000_gate_hw_phy_config_ich8lan(hw, true); | 301 | e1000_gate_hw_phy_config_ich8lan(hw, true); |
| 257 | 302 | ||
| 303 | /* It is not possible to be certain of the current state of ULP | ||
| 304 | * so forcibly disable it. | ||
| 305 | */ | ||
| 306 | hw->dev_spec.ich8lan.ulp_state = e1000_ulp_state_unknown; | ||
| 307 | e1000_disable_ulp_lpt_lp(hw, true); | ||
| 308 | |||
| 258 | ret_val = hw->phy.ops.acquire(hw); | 309 | ret_val = hw->phy.ops.acquire(hw); |
| 259 | if (ret_val) { | 310 | if (ret_val) { |
| 260 | e_dbg("Failed to initialize PHY flow\n"); | 311 | e_dbg("Failed to initialize PHY flow\n"); |
| @@ -300,33 +351,9 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw) | |||
| 300 | break; | 351 | break; |
| 301 | } | 352 | } |
| 302 | 353 | ||
| 303 | e_dbg("Toggling LANPHYPC\n"); | ||
| 304 | |||
| 305 | /* Set Phy Config Counter to 50msec */ | ||
| 306 | mac_reg = er32(FEXTNVM3); | ||
| 307 | mac_reg &= ~E1000_FEXTNVM3_PHY_CFG_COUNTER_MASK; | ||
| 308 | mac_reg |= E1000_FEXTNVM3_PHY_CFG_COUNTER_50MSEC; | ||
| 309 | ew32(FEXTNVM3, mac_reg); | ||
| 310 | |||
| 311 | /* Toggle LANPHYPC Value bit */ | 354 | /* Toggle LANPHYPC Value bit */ |
| 312 | mac_reg = er32(CTRL); | 355 | e1000_toggle_lanphypc_pch_lpt(hw); |
| 313 | mac_reg |= E1000_CTRL_LANPHYPC_OVERRIDE; | 356 | if (hw->mac.type >= e1000_pch_lpt) { |
| 314 | mac_reg &= ~E1000_CTRL_LANPHYPC_VALUE; | ||
| 315 | ew32(CTRL, mac_reg); | ||
| 316 | e1e_flush(); | ||
| 317 | usleep_range(10, 20); | ||
| 318 | mac_reg &= ~E1000_CTRL_LANPHYPC_OVERRIDE; | ||
| 319 | ew32(CTRL, mac_reg); | ||
| 320 | e1e_flush(); | ||
| 321 | if (hw->mac.type < e1000_pch_lpt) { | ||
| 322 | msleep(50); | ||
| 323 | } else { | ||
| 324 | u16 count = 20; | ||
| 325 | do { | ||
| 326 | usleep_range(5000, 10000); | ||
| 327 | } while (!(er32(CTRL_EXT) & | ||
| 328 | E1000_CTRL_EXT_LPCD) && count--); | ||
| 329 | usleep_range(30000, 60000); | ||
| 330 | if (e1000_phy_is_accessible_pchlan(hw)) | 357 | if (e1000_phy_is_accessible_pchlan(hw)) |
| 331 | break; | 358 | break; |
| 332 | 359 | ||
| @@ -349,12 +376,31 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw) | |||
| 349 | 376 | ||
| 350 | hw->phy.ops.release(hw); | 377 | hw->phy.ops.release(hw); |
| 351 | if (!ret_val) { | 378 | if (!ret_val) { |
| 379 | |||
| 380 | /* Check to see if able to reset PHY. Print error if not */ | ||
| 381 | if (hw->phy.ops.check_reset_block(hw)) { | ||
| 382 | e_err("Reset blocked by ME\n"); | ||
| 383 | goto out; | ||
| 384 | } | ||
| 385 | |||
| 352 | /* Reset the PHY before any access to it. Doing so, ensures | 386 | /* Reset the PHY before any access to it. Doing so, ensures |
| 353 | * that the PHY is in a known good state before we read/write | 387 | * that the PHY is in a known good state before we read/write |
| 354 | * PHY registers. The generic reset is sufficient here, | 388 | * PHY registers. The generic reset is sufficient here, |
| 355 | * because we haven't determined the PHY type yet. | 389 | * because we haven't determined the PHY type yet. |
| 356 | */ | 390 | */ |
| 357 | ret_val = e1000e_phy_hw_reset_generic(hw); | 391 | ret_val = e1000e_phy_hw_reset_generic(hw); |
| 392 | if (ret_val) | ||
| 393 | goto out; | ||
| 394 | |||
| 395 | /* On a successful reset, possibly need to wait for the PHY | ||
| 396 | * to quiesce to an accessible state before returning control | ||
| 397 | * to the calling function. If the PHY does not quiesce, then | ||
| 398 | * return E1000E_BLK_PHY_RESET, as this is the condition that | ||
| 399 | * the PHY is in. | ||
| 400 | */ | ||
| 401 | ret_val = hw->phy.ops.check_reset_block(hw); | ||
| 402 | if (ret_val) | ||
| 403 | e_err("ME blocked access to PHY after reset\n"); | ||
| 358 | } | 404 | } |
| 359 | 405 | ||
| 360 | out: | 406 | out: |
| @@ -724,8 +770,14 @@ s32 e1000_write_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 data) | |||
| 724 | * Enable/disable EEE based on setting in dev_spec structure, the duplex of | 770 | * Enable/disable EEE based on setting in dev_spec structure, the duplex of |
| 725 | * the link and the EEE capabilities of the link partner. The LPI Control | 771 | * the link and the EEE capabilities of the link partner. The LPI Control |
| 726 | * register bits will remain set only if/when link is up. | 772 | * register bits will remain set only if/when link is up. |
| 773 | * | ||
| 774 | * EEE LPI must not be asserted earlier than one second after link is up. | ||
| 775 | * On 82579, EEE LPI should not be enabled until such time otherwise there | ||
| 776 | * can be link issues with some switches. Other devices can have EEE LPI | ||
| 777 | * enabled immediately upon link up since they have a timer in hardware which | ||
| 778 | * prevents LPI from being asserted too early. | ||
| 727 | **/ | 779 | **/ |
| 728 | static s32 e1000_set_eee_pchlan(struct e1000_hw *hw) | 780 | s32 e1000_set_eee_pchlan(struct e1000_hw *hw) |
| 729 | { | 781 | { |
| 730 | struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan; | 782 | struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan; |
| 731 | s32 ret_val; | 783 | s32 ret_val; |
| @@ -979,6 +1031,253 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) | |||
| 979 | } | 1031 | } |
| 980 | 1032 | ||
| 981 | /** | 1033 | /** |
| 1034 | * e1000_enable_ulp_lpt_lp - configure Ultra Low Power mode for LynxPoint-LP | ||
| 1035 | * @hw: pointer to the HW structure | ||
| 1036 | * @to_sx: boolean indicating a system power state transition to Sx | ||
| 1037 | * | ||
| 1038 | * When link is down, configure ULP mode to significantly reduce the power | ||
| 1039 | * to the PHY. If on a Manageability Engine (ME) enabled system, tell the | ||
| 1040 | * ME firmware to start the ULP configuration. If not on an ME enabled | ||
| 1041 | * system, configure the ULP mode by software. | ||
| 1042 | */ | ||
| 1043 | s32 e1000_enable_ulp_lpt_lp(struct e1000_hw *hw, bool to_sx) | ||
| 1044 | { | ||
| 1045 | u32 mac_reg; | ||
| 1046 | s32 ret_val = 0; | ||
| 1047 | u16 phy_reg; | ||
| 1048 | |||
| 1049 | if ((hw->mac.type < e1000_pch_lpt) || | ||
| 1050 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPT_I217_LM) || | ||
| 1051 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPT_I217_V) || | ||
| 1052 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_LM2) || | ||
| 1053 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_V2) || | ||
| 1054 | (hw->dev_spec.ich8lan.ulp_state == e1000_ulp_state_on)) | ||
| 1055 | return 0; | ||
| 1056 | |||
| 1057 | if (er32(FWSM) & E1000_ICH_FWSM_FW_VALID) { | ||
| 1058 | /* Request ME configure ULP mode in the PHY */ | ||
| 1059 | mac_reg = er32(H2ME); | ||
| 1060 | mac_reg |= E1000_H2ME_ULP | E1000_H2ME_ENFORCE_SETTINGS; | ||
| 1061 | ew32(H2ME, mac_reg); | ||
| 1062 | |||
| 1063 | goto out; | ||
| 1064 | } | ||
| 1065 | |||
| 1066 | if (!to_sx) { | ||
| 1067 | int i = 0; | ||
| 1068 | |||
| 1069 | /* Poll up to 5 seconds for Cable Disconnected indication */ | ||
| 1070 | while (!(er32(FEXT) & E1000_FEXT_PHY_CABLE_DISCONNECTED)) { | ||
| 1071 | /* Bail if link is re-acquired */ | ||
| 1072 | if (er32(STATUS) & E1000_STATUS_LU) | ||
| 1073 | return -E1000_ERR_PHY; | ||
| 1074 | |||
| 1075 | if (i++ == 100) | ||
| 1076 | break; | ||
| 1077 | |||
| 1078 | msleep(50); | ||
| 1079 | } | ||
| 1080 | e_dbg("CABLE_DISCONNECTED %s set after %dmsec\n", | ||
| 1081 | (er32(FEXT) & | ||
| 1082 | E1000_FEXT_PHY_CABLE_DISCONNECTED) ? "" : "not", i * 50); | ||
| 1083 | } | ||
| 1084 | |||
| 1085 | ret_val = hw->phy.ops.acquire(hw); | ||
| 1086 | if (ret_val) | ||
| 1087 | goto out; | ||
| 1088 | |||
| 1089 | /* Force SMBus mode in PHY */ | ||
| 1090 | ret_val = e1000_read_phy_reg_hv_locked(hw, CV_SMB_CTRL, &phy_reg); | ||
| 1091 | if (ret_val) | ||
| 1092 | goto release; | ||
| 1093 | phy_reg |= CV_SMB_CTRL_FORCE_SMBUS; | ||
| 1094 | e1000_write_phy_reg_hv_locked(hw, CV_SMB_CTRL, phy_reg); | ||
| 1095 | |||
| 1096 | /* Force SMBus mode in MAC */ | ||
| 1097 | mac_reg = er32(CTRL_EXT); | ||
| 1098 | mac_reg |= E1000_CTRL_EXT_FORCE_SMBUS; | ||
| 1099 | ew32(CTRL_EXT, mac_reg); | ||
| 1100 | |||
| 1101 | /* Set Inband ULP Exit, Reset to SMBus mode and | ||
| 1102 | * Disable SMBus Release on PERST# in PHY | ||
| 1103 | */ | ||
| 1104 | ret_val = e1000_read_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, &phy_reg); | ||
| 1105 | if (ret_val) | ||
| 1106 | goto release; | ||
| 1107 | phy_reg |= (I218_ULP_CONFIG1_RESET_TO_SMBUS | | ||
| 1108 | I218_ULP_CONFIG1_DISABLE_SMB_PERST); | ||
| 1109 | if (to_sx) { | ||
| 1110 | if (er32(WUFC) & E1000_WUFC_LNKC) | ||
| 1111 | phy_reg |= I218_ULP_CONFIG1_WOL_HOST; | ||
| 1112 | |||
| 1113 | phy_reg |= I218_ULP_CONFIG1_STICKY_ULP; | ||
| 1114 | } else { | ||
| 1115 | phy_reg |= I218_ULP_CONFIG1_INBAND_EXIT; | ||
| 1116 | } | ||
| 1117 | e1000_write_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, phy_reg); | ||
| 1118 | |||
| 1119 | /* Set Disable SMBus Release on PERST# in MAC */ | ||
| 1120 | mac_reg = er32(FEXTNVM7); | ||
| 1121 | mac_reg |= E1000_FEXTNVM7_DISABLE_SMB_PERST; | ||
| 1122 | ew32(FEXTNVM7, mac_reg); | ||
| 1123 | |||
| 1124 | /* Commit ULP changes in PHY by starting auto ULP configuration */ | ||
| 1125 | phy_reg |= I218_ULP_CONFIG1_START; | ||
| 1126 | e1000_write_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, phy_reg); | ||
| 1127 | release: | ||
| 1128 | hw->phy.ops.release(hw); | ||
| 1129 | out: | ||
| 1130 | if (ret_val) | ||
| 1131 | e_dbg("Error in ULP enable flow: %d\n", ret_val); | ||
| 1132 | else | ||
| 1133 | hw->dev_spec.ich8lan.ulp_state = e1000_ulp_state_on; | ||
| 1134 | |||
| 1135 | return ret_val; | ||
| 1136 | } | ||
| 1137 | |||
| 1138 | /** | ||
| 1139 | * e1000_disable_ulp_lpt_lp - unconfigure Ultra Low Power mode for LynxPoint-LP | ||
| 1140 | * @hw: pointer to the HW structure | ||
| 1141 | * @force: boolean indicating whether or not to force disabling ULP | ||
| 1142 | * | ||
| 1143 | * Un-configure ULP mode when link is up, the system is transitioned from | ||
| 1144 | * Sx or the driver is unloaded. If on a Manageability Engine (ME) enabled | ||
| 1145 | * system, poll for an indication from ME that ULP has been un-configured. | ||
| 1146 | * If not on an ME enabled system, un-configure the ULP mode by software. | ||
| 1147 | * | ||
| 1148 | * During nominal operation, this function is called when link is acquired | ||
| 1149 | * to disable ULP mode (force=false); otherwise, for example when unloading | ||
| 1150 | * the driver or during Sx->S0 transitions, this is called with force=true | ||
| 1151 | * to forcibly disable ULP. | ||
| 1152 | */ | ||
| 1153 | static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force) | ||
| 1154 | { | ||
| 1155 | s32 ret_val = 0; | ||
| 1156 | u32 mac_reg; | ||
| 1157 | u16 phy_reg; | ||
| 1158 | int i = 0; | ||
| 1159 | |||
| 1160 | if ((hw->mac.type < e1000_pch_lpt) || | ||
| 1161 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPT_I217_LM) || | ||
| 1162 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPT_I217_V) || | ||
| 1163 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_LM2) || | ||
| 1164 | (hw->adapter->pdev->device == E1000_DEV_ID_PCH_I218_V2) || | ||
| 1165 | (hw->dev_spec.ich8lan.ulp_state == e1000_ulp_state_off)) | ||
| 1166 | return 0; | ||
| 1167 | |||
| 1168 | if (er32(FWSM) & E1000_ICH_FWSM_FW_VALID) { | ||
| 1169 | if (force) { | ||
| 1170 | /* Request ME un-configure ULP mode in the PHY */ | ||
| 1171 | mac_reg = er32(H2ME); | ||
| 1172 | mac_reg &= ~E1000_H2ME_ULP; | ||
| 1173 | mac_reg |= E1000_H2ME_ENFORCE_SETTINGS; | ||
| 1174 | ew32(H2ME, mac_reg); | ||
| 1175 | } | ||
| 1176 | |||
| 1177 | /* Poll up to 100msec for ME to clear ULP_CFG_DONE */ | ||
| 1178 | while (er32(FWSM) & E1000_FWSM_ULP_CFG_DONE) { | ||
| 1179 | if (i++ == 10) { | ||
| 1180 | ret_val = -E1000_ERR_PHY; | ||
| 1181 | goto out; | ||
| 1182 | } | ||
| 1183 | |||
| 1184 | usleep_range(10000, 20000); | ||
| 1185 | } | ||
| 1186 | e_dbg("ULP_CONFIG_DONE cleared after %dmsec\n", i * 10); | ||
| 1187 | |||
| 1188 | if (force) { | ||
| 1189 | mac_reg = er32(H2ME); | ||
| 1190 | mac_reg &= ~E1000_H2ME_ENFORCE_SETTINGS; | ||
| 1191 | ew32(H2ME, mac_reg); | ||
| 1192 | } else { | ||
| 1193 | /* Clear H2ME.ULP after ME ULP configuration */ | ||
| 1194 | mac_reg = er32(H2ME); | ||
| 1195 | mac_reg &= ~E1000_H2ME_ULP; | ||
| 1196 | ew32(H2ME, mac_reg); | ||
| 1197 | } | ||
| 1198 | |||
| 1199 | goto out; | ||
| 1200 | } | ||
| 1201 | |||
| 1202 | ret_val = hw->phy.ops.acquire(hw); | ||
| 1203 | if (ret_val) | ||
| 1204 | goto out; | ||
| 1205 | |||
| 1206 | if (force) | ||
| 1207 | /* Toggle LANPHYPC Value bit */ | ||
| 1208 | e1000_toggle_lanphypc_pch_lpt(hw); | ||
| 1209 | |||
| 1210 | /* Unforce SMBus mode in PHY */ | ||
| 1211 | ret_val = e1000_read_phy_reg_hv_locked(hw, CV_SMB_CTRL, &phy_reg); | ||
| 1212 | if (ret_val) { | ||
| 1213 | /* The MAC might be in PCIe mode, so temporarily force to | ||
| 1214 | * SMBus mode in order to access the PHY. | ||
| 1215 | */ | ||
| 1216 | mac_reg = er32(CTRL_EXT); | ||
| 1217 | mac_reg |= E1000_CTRL_EXT_FORCE_SMBUS; | ||
| 1218 | ew32(CTRL_EXT, mac_reg); | ||
| 1219 | |||
| 1220 | msleep(50); | ||
| 1221 | |||
| 1222 | ret_val = e1000_read_phy_reg_hv_locked(hw, CV_SMB_CTRL, | ||
| 1223 | &phy_reg); | ||
| 1224 | if (ret_val) | ||
| 1225 | goto release; | ||
| 1226 | } | ||
| 1227 | phy_reg &= ~CV_SMB_CTRL_FORCE_SMBUS; | ||
| 1228 | e1000_write_phy_reg_hv_locked(hw, CV_SMB_CTRL, phy_reg); | ||
| 1229 | |||
| 1230 | /* Unforce SMBus mode in MAC */ | ||
| 1231 | mac_reg = er32(CTRL_EXT); | ||
| 1232 | mac_reg &= ~E1000_CTRL_EXT_FORCE_SMBUS; | ||
| 1233 | ew32(CTRL_EXT, mac_reg); | ||
| 1234 | |||
| 1235 | /* When ULP mode was previously entered, K1 was disabled by the | ||
| 1236 | * hardware. Re-Enable K1 in the PHY when exiting ULP. | ||
| 1237 | */ | ||
| 1238 | ret_val = e1000_read_phy_reg_hv_locked(hw, HV_PM_CTRL, &phy_reg); | ||
| 1239 | if (ret_val) | ||
| 1240 | goto release; | ||
| 1241 | phy_reg |= HV_PM_CTRL_K1_ENABLE; | ||
| 1242 | e1000_write_phy_reg_hv_locked(hw, HV_PM_CTRL, phy_reg); | ||
| 1243 | |||
| 1244 | /* Clear ULP enabled configuration */ | ||
| 1245 | ret_val = e1000_read_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, &phy_reg); | ||
| 1246 | if (ret_val) | ||
| 1247 | goto release; | ||
| 1248 | phy_reg &= ~(I218_ULP_CONFIG1_IND | | ||
| 1249 | I218_ULP_CONFIG1_STICKY_ULP | | ||
| 1250 | I218_ULP_CONFIG1_RESET_TO_SMBUS | | ||
| 1251 | I218_ULP_CONFIG1_WOL_HOST | | ||
| 1252 | I218_ULP_CONFIG1_INBAND_EXIT | | ||
| 1253 | I218_ULP_CONFIG1_DISABLE_SMB_PERST); | ||
| 1254 | e1000_write_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, phy_reg); | ||
| 1255 | |||
| 1256 | /* Commit ULP changes by starting auto ULP configuration */ | ||
| 1257 | phy_reg |= I218_ULP_CONFIG1_START; | ||
| 1258 | e1000_write_phy_reg_hv_locked(hw, I218_ULP_CONFIG1, phy_reg); | ||
| 1259 | |||
| 1260 | /* Clear Disable SMBus Release on PERST# in MAC */ | ||
| 1261 | mac_reg = er32(FEXTNVM7); | ||
| 1262 | mac_reg &= ~E1000_FEXTNVM7_DISABLE_SMB_PERST; | ||
| 1263 | ew32(FEXTNVM7, mac_reg); | ||
| 1264 | |||
| 1265 | release: | ||
| 1266 | hw->phy.ops.release(hw); | ||
| 1267 | if (force) { | ||
| 1268 | e1000_phy_hw_reset(hw); | ||
| 1269 | msleep(50); | ||
| 1270 | } | ||
| 1271 | out: | ||
| 1272 | if (ret_val) | ||
| 1273 | e_dbg("Error in ULP disable flow: %d\n", ret_val); | ||
| 1274 | else | ||
| 1275 | hw->dev_spec.ich8lan.ulp_state = e1000_ulp_state_off; | ||
| 1276 | |||
| 1277 | return ret_val; | ||
| 1278 | } | ||
| 1279 | |||
| 1280 | /** | ||
| 982 | * e1000_check_for_copper_link_ich8lan - Check for link (Copper) | 1281 | * e1000_check_for_copper_link_ich8lan - Check for link (Copper) |
| 983 | * @hw: pointer to the HW structure | 1282 | * @hw: pointer to the HW structure |
| 984 | * | 1283 | * |
| @@ -1106,9 +1405,11 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw) | |||
| 1106 | e1000e_check_downshift(hw); | 1405 | e1000e_check_downshift(hw); |
| 1107 | 1406 | ||
| 1108 | /* Enable/Disable EEE after link up */ | 1407 | /* Enable/Disable EEE after link up */ |
| 1109 | ret_val = e1000_set_eee_pchlan(hw); | 1408 | if (hw->phy.type > e1000_phy_82579) { |
| 1110 | if (ret_val) | 1409 | ret_val = e1000_set_eee_pchlan(hw); |
| 1111 | return ret_val; | 1410 | if (ret_val) |
| 1411 | return ret_val; | ||
| 1412 | } | ||
| 1112 | 1413 | ||
| 1113 | /* If we are forcing speed/duplex, then we simply return since | 1414 | /* If we are forcing speed/duplex, then we simply return since |
| 1114 | * we have already determined whether we have link or not. | 1415 | * we have already determined whether we have link or not. |
| @@ -1374,7 +1675,7 @@ static void e1000_rar_set_pch2lan(struct e1000_hw *hw, u8 *addr, u32 index) | |||
| 1374 | /* RAR[1-6] are owned by manageability. Skip those and program the | 1675 | /* RAR[1-6] are owned by manageability. Skip those and program the |
| 1375 | * next address into the SHRA register array. | 1676 | * next address into the SHRA register array. |
| 1376 | */ | 1677 | */ |
| 1377 | if (index < (u32)(hw->mac.rar_entry_count - 6)) { | 1678 | if (index < (u32)(hw->mac.rar_entry_count)) { |
| 1378 | s32 ret_val; | 1679 | s32 ret_val; |
| 1379 | 1680 | ||
| 1380 | ret_val = e1000_acquire_swflag_ich8lan(hw); | 1681 | ret_val = e1000_acquire_swflag_ich8lan(hw); |
| @@ -1484,11 +1785,13 @@ out: | |||
| 1484 | **/ | 1785 | **/ |
| 1485 | static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw) | 1786 | static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw) |
| 1486 | { | 1787 | { |
| 1487 | u32 fwsm; | 1788 | bool blocked = false; |
| 1789 | int i = 0; | ||
| 1488 | 1790 | ||
| 1489 | fwsm = er32(FWSM); | 1791 | while ((blocked = !(er32(FWSM) & E1000_ICH_FWSM_RSPCIPHY)) && |
| 1490 | 1792 | (i++ < 10)) | |
| 1491 | return (fwsm & E1000_ICH_FWSM_RSPCIPHY) ? 0 : E1000_BLK_PHY_RESET; | 1793 | usleep_range(10000, 20000); |
| 1794 | return blocked ? E1000_BLK_PHY_RESET : 0; | ||
| 1492 | } | 1795 | } |
| 1493 | 1796 | ||
| 1494 | /** | 1797 | /** |
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h index 217090df33e7..bead50f9187b 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.h +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_ICH8LAN_H_ | 22 | #ifndef _E1000E_ICH8LAN_H_ |
| 30 | #define _E1000E_ICH8LAN_H_ | 23 | #define _E1000E_ICH8LAN_H_ |
| @@ -65,11 +58,16 @@ | |||
| 65 | 58 | ||
| 66 | #define E1000_FWSM_WLOCK_MAC_MASK 0x0380 | 59 | #define E1000_FWSM_WLOCK_MAC_MASK 0x0380 |
| 67 | #define E1000_FWSM_WLOCK_MAC_SHIFT 7 | 60 | #define E1000_FWSM_WLOCK_MAC_SHIFT 7 |
| 61 | #define E1000_FWSM_ULP_CFG_DONE 0x00000400 /* Low power cfg done */ | ||
| 68 | 62 | ||
| 69 | /* Shared Receive Address Registers */ | 63 | /* Shared Receive Address Registers */ |
| 70 | #define E1000_SHRAL_PCH_LPT(_i) (0x05408 + ((_i) * 8)) | 64 | #define E1000_SHRAL_PCH_LPT(_i) (0x05408 + ((_i) * 8)) |
| 71 | #define E1000_SHRAH_PCH_LPT(_i) (0x0540C + ((_i) * 8)) | 65 | #define E1000_SHRAH_PCH_LPT(_i) (0x0540C + ((_i) * 8)) |
| 72 | 66 | ||
| 67 | #define E1000_H2ME 0x05B50 /* Host to ME */ | ||
| 68 | #define E1000_H2ME_ULP 0x00000800 /* ULP Indication Bit */ | ||
| 69 | #define E1000_H2ME_ENFORCE_SETTINGS 0x00001000 /* Enforce Settings */ | ||
| 70 | |||
| 73 | #define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \ | 71 | #define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \ |
| 74 | (ID_LED_OFF1_OFF2 << 8) | \ | 72 | (ID_LED_OFF1_OFF2 << 8) | \ |
| 75 | (ID_LED_OFF1_ON2 << 4) | \ | 73 | (ID_LED_OFF1_ON2 << 4) | \ |
| @@ -82,6 +80,9 @@ | |||
| 82 | 80 | ||
| 83 | #define E1000_ICH8_LAN_INIT_TIMEOUT 1500 | 81 | #define E1000_ICH8_LAN_INIT_TIMEOUT 1500 |
| 84 | 82 | ||
| 83 | /* FEXT register bit definition */ | ||
| 84 | #define E1000_FEXT_PHY_CABLE_DISCONNECTED 0x00000004 | ||
| 85 | |||
| 85 | #define E1000_FEXTNVM_SW_CONFIG 1 | 86 | #define E1000_FEXTNVM_SW_CONFIG 1 |
| 86 | #define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* different on ICH8M */ | 87 | #define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* different on ICH8M */ |
| 87 | 88 | ||
| @@ -95,10 +96,12 @@ | |||
| 95 | #define E1000_FEXTNVM6_REQ_PLL_CLK 0x00000100 | 96 | #define E1000_FEXTNVM6_REQ_PLL_CLK 0x00000100 |
| 96 | #define E1000_FEXTNVM6_ENABLE_K1_ENTRY_CONDITION 0x00000200 | 97 | #define E1000_FEXTNVM6_ENABLE_K1_ENTRY_CONDITION 0x00000200 |
| 97 | 98 | ||
| 99 | #define E1000_FEXTNVM7_DISABLE_SMB_PERST 0x00000020 | ||
| 100 | |||
| 98 | #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL | 101 | #define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL |
| 99 | 102 | ||
| 100 | #define E1000_ICH_RAR_ENTRIES 7 | 103 | #define E1000_ICH_RAR_ENTRIES 7 |
| 101 | #define E1000_PCH2_RAR_ENTRIES 11 /* RAR[0-6], SHRA[0-3] */ | 104 | #define E1000_PCH2_RAR_ENTRIES 5 /* RAR[0], SHRA[0-3] */ |
| 102 | #define E1000_PCH_LPT_RAR_ENTRIES 12 /* RAR[0], SHRA[0-10] */ | 105 | #define E1000_PCH_LPT_RAR_ENTRIES 12 /* RAR[0], SHRA[0-10] */ |
| 103 | 106 | ||
| 104 | #define PHY_PAGE_SHIFT 5 | 107 | #define PHY_PAGE_SHIFT 5 |
| @@ -161,6 +164,16 @@ | |||
| 161 | #define CV_SMB_CTRL PHY_REG(769, 23) | 164 | #define CV_SMB_CTRL PHY_REG(769, 23) |
| 162 | #define CV_SMB_CTRL_FORCE_SMBUS 0x0001 | 165 | #define CV_SMB_CTRL_FORCE_SMBUS 0x0001 |
| 163 | 166 | ||
| 167 | /* I218 Ultra Low Power Configuration 1 Register */ | ||
| 168 | #define I218_ULP_CONFIG1 PHY_REG(779, 16) | ||
| 169 | #define I218_ULP_CONFIG1_START 0x0001 /* Start auto ULP config */ | ||
| 170 | #define I218_ULP_CONFIG1_IND 0x0004 /* Pwr up from ULP indication */ | ||
| 171 | #define I218_ULP_CONFIG1_STICKY_ULP 0x0010 /* Set sticky ULP mode */ | ||
| 172 | #define I218_ULP_CONFIG1_INBAND_EXIT 0x0020 /* Inband on ULP exit */ | ||
| 173 | #define I218_ULP_CONFIG1_WOL_HOST 0x0040 /* WoL Host on ULP exit */ | ||
| 174 | #define I218_ULP_CONFIG1_RESET_TO_SMBUS 0x0100 /* Reset to SMBus mode */ | ||
| 175 | #define I218_ULP_CONFIG1_DISABLE_SMB_PERST 0x1000 /* Disable on PERST# */ | ||
| 176 | |||
| 164 | /* SMBus Address Phy Register */ | 177 | /* SMBus Address Phy Register */ |
| 165 | #define HV_SMB_ADDR PHY_REG(768, 26) | 178 | #define HV_SMB_ADDR PHY_REG(768, 26) |
| 166 | #define HV_SMB_ADDR_MASK 0x007F | 179 | #define HV_SMB_ADDR_MASK 0x007F |
| @@ -195,6 +208,7 @@ | |||
| 195 | /* PHY Power Management Control */ | 208 | /* PHY Power Management Control */ |
| 196 | #define HV_PM_CTRL PHY_REG(770, 17) | 209 | #define HV_PM_CTRL PHY_REG(770, 17) |
| 197 | #define HV_PM_CTRL_PLL_STOP_IN_K1_GIGA 0x100 | 210 | #define HV_PM_CTRL_PLL_STOP_IN_K1_GIGA 0x100 |
| 211 | #define HV_PM_CTRL_K1_ENABLE 0x4000 | ||
| 198 | 212 | ||
| 199 | #define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in ms */ | 213 | #define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in ms */ |
| 200 | 214 | ||
| @@ -268,4 +282,6 @@ void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw); | |||
| 268 | s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable); | 282 | s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable); |
| 269 | s32 e1000_read_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 *data); | 283 | s32 e1000_read_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 *data); |
| 270 | s32 e1000_write_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 data); | 284 | s32 e1000_write_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 data); |
| 285 | s32 e1000_set_eee_pchlan(struct e1000_hw *hw); | ||
| 286 | s32 e1000_enable_ulp_lpt_lp(struct e1000_hw *hw, bool to_sx); | ||
| 271 | #endif /* _E1000E_ICH8LAN_H_ */ | 287 | #endif /* _E1000E_ICH8LAN_H_ */ |
diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c index 2480c1091873..baa0a466d1d0 100644 --- a/drivers/net/ethernet/intel/e1000e/mac.c +++ b/drivers/net/ethernet/intel/e1000e/mac.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #include "e1000.h" | 22 | #include "e1000.h" |
| 30 | 23 | ||
diff --git a/drivers/net/ethernet/intel/e1000e/mac.h b/drivers/net/ethernet/intel/e1000e/mac.h index a61fee404ebe..4e81c2825b7a 100644 --- a/drivers/net/ethernet/intel/e1000e/mac.h +++ b/drivers/net/ethernet/intel/e1000e/mac.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_MAC_H_ | 22 | #ifndef _E1000E_MAC_H_ |
| 30 | #define _E1000E_MAC_H_ | 23 | #define _E1000E_MAC_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/manage.c b/drivers/net/ethernet/intel/e1000e/manage.c index e4b0f1ef92f6..cb37ff1f1321 100644 --- a/drivers/net/ethernet/intel/e1000e/manage.c +++ b/drivers/net/ethernet/intel/e1000e/manage.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #include "e1000.h" | 22 | #include "e1000.h" |
| 30 | 23 | ||
diff --git a/drivers/net/ethernet/intel/e1000e/manage.h b/drivers/net/ethernet/intel/e1000e/manage.h index 326897c29ea8..a8c27f98f7b0 100644 --- a/drivers/net/ethernet/intel/e1000e/manage.h +++ b/drivers/net/ethernet/intel/e1000e/manage.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_MANAGE_H_ | 22 | #ifndef _E1000E_MANAGE_H_ |
| 30 | #define _E1000E_MANAGE_H_ | 23 | #define _E1000E_MANAGE_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index e6f8961d49eb..5129c4cd14bc 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | 22 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
| 30 | 23 | ||
| @@ -1701,7 +1694,7 @@ static void e1000_clean_rx_ring(struct e1000_ring *rx_ring) | |||
| 1701 | adapter->flags2 &= ~FLAG2_IS_DISCARDING; | 1694 | adapter->flags2 &= ~FLAG2_IS_DISCARDING; |
| 1702 | 1695 | ||
| 1703 | writel(0, rx_ring->head); | 1696 | writel(0, rx_ring->head); |
| 1704 | if (rx_ring->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) | 1697 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) |
| 1705 | e1000e_update_rdt_wa(rx_ring, 0); | 1698 | e1000e_update_rdt_wa(rx_ring, 0); |
| 1706 | else | 1699 | else |
| 1707 | writel(0, rx_ring->tail); | 1700 | writel(0, rx_ring->tail); |
| @@ -2405,7 +2398,7 @@ static void e1000_clean_tx_ring(struct e1000_ring *tx_ring) | |||
| 2405 | tx_ring->next_to_clean = 0; | 2398 | tx_ring->next_to_clean = 0; |
| 2406 | 2399 | ||
| 2407 | writel(0, tx_ring->head); | 2400 | writel(0, tx_ring->head); |
| 2408 | if (tx_ring->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) | 2401 | if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) |
| 2409 | e1000e_update_tdt_wa(tx_ring, 0); | 2402 | e1000e_update_tdt_wa(tx_ring, 0); |
| 2410 | else | 2403 | else |
| 2411 | writel(0, tx_ring->tail); | 2404 | writel(0, tx_ring->tail); |
| @@ -3334,6 +3327,9 @@ static void e1000e_set_rx_mode(struct net_device *netdev) | |||
| 3334 | struct e1000_hw *hw = &adapter->hw; | 3327 | struct e1000_hw *hw = &adapter->hw; |
| 3335 | u32 rctl; | 3328 | u32 rctl; |
| 3336 | 3329 | ||
| 3330 | if (pm_runtime_suspended(netdev->dev.parent)) | ||
| 3331 | return; | ||
| 3332 | |||
| 3337 | /* Check for Promiscuous and All Multicast modes */ | 3333 | /* Check for Promiscuous and All Multicast modes */ |
| 3338 | rctl = er32(RCTL); | 3334 | rctl = er32(RCTL); |
| 3339 | 3335 | ||
| @@ -3694,10 +3690,6 @@ void e1000e_power_up_phy(struct e1000_adapter *adapter) | |||
| 3694 | */ | 3690 | */ |
| 3695 | static void e1000_power_down_phy(struct e1000_adapter *adapter) | 3691 | static void e1000_power_down_phy(struct e1000_adapter *adapter) |
| 3696 | { | 3692 | { |
| 3697 | /* WoL is enabled */ | ||
| 3698 | if (adapter->wol) | ||
| 3699 | return; | ||
| 3700 | |||
| 3701 | if (adapter->hw.phy.ops.power_down) | 3693 | if (adapter->hw.phy.ops.power_down) |
| 3702 | adapter->hw.phy.ops.power_down(&adapter->hw); | 3694 | adapter->hw.phy.ops.power_down(&adapter->hw); |
| 3703 | } | 3695 | } |
| @@ -3914,10 +3906,8 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
| 3914 | } | 3906 | } |
| 3915 | 3907 | ||
| 3916 | if (!netif_running(adapter->netdev) && | 3908 | if (!netif_running(adapter->netdev) && |
| 3917 | !test_bit(__E1000_TESTING, &adapter->state)) { | 3909 | !test_bit(__E1000_TESTING, &adapter->state)) |
| 3918 | e1000_power_down_phy(adapter); | 3910 | e1000_power_down_phy(adapter); |
| 3919 | return; | ||
| 3920 | } | ||
| 3921 | 3911 | ||
| 3922 | e1000_get_phy_info(hw); | 3912 | e1000_get_phy_info(hw); |
| 3923 | 3913 | ||
| @@ -3984,7 +3974,12 @@ static void e1000e_flush_descriptors(struct e1000_adapter *adapter) | |||
| 3984 | 3974 | ||
| 3985 | static void e1000e_update_stats(struct e1000_adapter *adapter); | 3975 | static void e1000e_update_stats(struct e1000_adapter *adapter); |
| 3986 | 3976 | ||
| 3987 | void e1000e_down(struct e1000_adapter *adapter) | 3977 | /** |
| 3978 | * e1000e_down - quiesce the device and optionally reset the hardware | ||
| 3979 | * @adapter: board private structure | ||
| 3980 | * @reset: boolean flag to reset the hardware or not | ||
| 3981 | */ | ||
| 3982 | void e1000e_down(struct e1000_adapter *adapter, bool reset) | ||
| 3988 | { | 3983 | { |
| 3989 | struct net_device *netdev = adapter->netdev; | 3984 | struct net_device *netdev = adapter->netdev; |
| 3990 | struct e1000_hw *hw = &adapter->hw; | 3985 | struct e1000_hw *hw = &adapter->hw; |
| @@ -4038,12 +4033,8 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
| 4038 | e1000_lv_jumbo_workaround_ich8lan(hw, false)) | 4033 | e1000_lv_jumbo_workaround_ich8lan(hw, false)) |
| 4039 | e_dbg("failed to disable jumbo frame workaround mode\n"); | 4034 | e_dbg("failed to disable jumbo frame workaround mode\n"); |
| 4040 | 4035 | ||
| 4041 | if (!pci_channel_offline(adapter->pdev)) | 4036 | if (reset && !pci_channel_offline(adapter->pdev)) |
| 4042 | e1000e_reset(adapter); | 4037 | e1000e_reset(adapter); |
| 4043 | |||
| 4044 | /* TODO: for power management, we could drop the link and | ||
| 4045 | * pci_disable_device here. | ||
| 4046 | */ | ||
| 4047 | } | 4038 | } |
| 4048 | 4039 | ||
| 4049 | void e1000e_reinit_locked(struct e1000_adapter *adapter) | 4040 | void e1000e_reinit_locked(struct e1000_adapter *adapter) |
| @@ -4051,7 +4042,7 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter) | |||
| 4051 | might_sleep(); | 4042 | might_sleep(); |
| 4052 | while (test_and_set_bit(__E1000_RESETTING, &adapter->state)) | 4043 | while (test_and_set_bit(__E1000_RESETTING, &adapter->state)) |
| 4053 | usleep_range(1000, 2000); | 4044 | usleep_range(1000, 2000); |
| 4054 | e1000e_down(adapter); | 4045 | e1000e_down(adapter, true); |
| 4055 | e1000e_up(adapter); | 4046 | e1000e_up(adapter); |
| 4056 | clear_bit(__E1000_RESETTING, &adapter->state); | 4047 | clear_bit(__E1000_RESETTING, &adapter->state); |
| 4057 | } | 4048 | } |
| @@ -4329,7 +4320,6 @@ static int e1000_open(struct net_device *netdev) | |||
| 4329 | adapter->tx_hang_recheck = false; | 4320 | adapter->tx_hang_recheck = false; |
| 4330 | netif_start_queue(netdev); | 4321 | netif_start_queue(netdev); |
| 4331 | 4322 | ||
| 4332 | adapter->idle_check = true; | ||
| 4333 | hw->mac.get_link_status = true; | 4323 | hw->mac.get_link_status = true; |
| 4334 | pm_runtime_put(&pdev->dev); | 4324 | pm_runtime_put(&pdev->dev); |
| 4335 | 4325 | ||
| @@ -4379,14 +4369,15 @@ static int e1000_close(struct net_device *netdev) | |||
| 4379 | pm_runtime_get_sync(&pdev->dev); | 4369 | pm_runtime_get_sync(&pdev->dev); |
| 4380 | 4370 | ||
| 4381 | if (!test_bit(__E1000_DOWN, &adapter->state)) { | 4371 | if (!test_bit(__E1000_DOWN, &adapter->state)) { |
| 4382 | e1000e_down(adapter); | 4372 | e1000e_down(adapter, true); |
| 4383 | e1000_free_irq(adapter); | 4373 | e1000_free_irq(adapter); |
| 4374 | |||
| 4375 | /* Link status message must follow this format */ | ||
| 4376 | pr_info("%s NIC Link is Down\n", adapter->netdev->name); | ||
| 4384 | } | 4377 | } |
| 4385 | 4378 | ||
| 4386 | napi_disable(&adapter->napi); | 4379 | napi_disable(&adapter->napi); |
| 4387 | 4380 | ||
| 4388 | e1000_power_down_phy(adapter); | ||
| 4389 | |||
| 4390 | e1000e_free_tx_resources(adapter->tx_ring); | 4381 | e1000e_free_tx_resources(adapter->tx_ring); |
| 4391 | e1000e_free_rx_resources(adapter->rx_ring); | 4382 | e1000e_free_rx_resources(adapter->rx_ring); |
| 4392 | 4383 | ||
| @@ -4463,11 +4454,16 @@ static void e1000e_update_phy_task(struct work_struct *work) | |||
| 4463 | struct e1000_adapter *adapter = container_of(work, | 4454 | struct e1000_adapter *adapter = container_of(work, |
| 4464 | struct e1000_adapter, | 4455 | struct e1000_adapter, |
| 4465 | update_phy_task); | 4456 | update_phy_task); |
| 4457 | struct e1000_hw *hw = &adapter->hw; | ||
| 4466 | 4458 | ||
| 4467 | if (test_bit(__E1000_DOWN, &adapter->state)) | 4459 | if (test_bit(__E1000_DOWN, &adapter->state)) |
| 4468 | return; | 4460 | return; |
| 4469 | 4461 | ||
| 4470 | e1000_get_phy_info(&adapter->hw); | 4462 | e1000_get_phy_info(hw); |
| 4463 | |||
| 4464 | /* Enable EEE on 82579 after link up */ | ||
| 4465 | if (hw->phy.type == e1000_phy_82579) | ||
| 4466 | e1000_set_eee_pchlan(hw); | ||
| 4471 | } | 4467 | } |
| 4472 | 4468 | ||
| 4473 | /** | 4469 | /** |
| @@ -5687,8 +5683,11 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu) | |||
| 5687 | adapter->max_frame_size = max_frame; | 5683 | adapter->max_frame_size = max_frame; |
| 5688 | e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu); | 5684 | e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu); |
| 5689 | netdev->mtu = new_mtu; | 5685 | netdev->mtu = new_mtu; |
| 5686 | |||
| 5687 | pm_runtime_get_sync(netdev->dev.parent); | ||
| 5688 | |||
| 5690 | if (netif_running(netdev)) | 5689 | if (netif_running(netdev)) |
| 5691 | e1000e_down(adapter); | 5690 | e1000e_down(adapter, true); |
| 5692 | 5691 | ||
| 5693 | /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN | 5692 | /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN |
| 5694 | * means we reserve 2 more, this pushes us to allocate from the next | 5693 | * means we reserve 2 more, this pushes us to allocate from the next |
| @@ -5714,6 +5713,8 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu) | |||
| 5714 | else | 5713 | else |
| 5715 | e1000e_reset(adapter); | 5714 | e1000e_reset(adapter); |
| 5716 | 5715 | ||
| 5716 | pm_runtime_put_sync(netdev->dev.parent); | ||
| 5717 | |||
| 5717 | clear_bit(__E1000_RESETTING, &adapter->state); | 5718 | clear_bit(__E1000_RESETTING, &adapter->state); |
| 5718 | 5719 | ||
| 5719 | return 0; | 5720 | return 0; |
| @@ -5855,7 +5856,7 @@ static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | |||
| 5855 | static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc) | 5856 | static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc) |
| 5856 | { | 5857 | { |
| 5857 | struct e1000_hw *hw = &adapter->hw; | 5858 | struct e1000_hw *hw = &adapter->hw; |
| 5858 | u32 i, mac_reg; | 5859 | u32 i, mac_reg, wuc; |
| 5859 | u16 phy_reg, wuc_enable; | 5860 | u16 phy_reg, wuc_enable; |
| 5860 | int retval; | 5861 | int retval; |
| 5861 | 5862 | ||
| @@ -5902,13 +5903,18 @@ static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc) | |||
| 5902 | phy_reg |= BM_RCTL_RFCE; | 5903 | phy_reg |= BM_RCTL_RFCE; |
| 5903 | hw->phy.ops.write_reg_page(&adapter->hw, BM_RCTL, phy_reg); | 5904 | hw->phy.ops.write_reg_page(&adapter->hw, BM_RCTL, phy_reg); |
| 5904 | 5905 | ||
| 5906 | wuc = E1000_WUC_PME_EN; | ||
| 5907 | if (wufc & (E1000_WUFC_MAG | E1000_WUFC_LNKC)) | ||
| 5908 | wuc |= E1000_WUC_APME; | ||
| 5909 | |||
| 5905 | /* enable PHY wakeup in MAC register */ | 5910 | /* enable PHY wakeup in MAC register */ |
| 5906 | ew32(WUFC, wufc); | 5911 | ew32(WUFC, wufc); |
| 5907 | ew32(WUC, E1000_WUC_PHY_WAKE | E1000_WUC_PME_EN); | 5912 | ew32(WUC, (E1000_WUC_PHY_WAKE | E1000_WUC_APMPME | |
| 5913 | E1000_WUC_PME_STATUS | wuc)); | ||
| 5908 | 5914 | ||
| 5909 | /* configure and enable PHY wakeup in PHY registers */ | 5915 | /* configure and enable PHY wakeup in PHY registers */ |
| 5910 | hw->phy.ops.write_reg_page(&adapter->hw, BM_WUFC, wufc); | 5916 | hw->phy.ops.write_reg_page(&adapter->hw, BM_WUFC, wufc); |
| 5911 | hw->phy.ops.write_reg_page(&adapter->hw, BM_WUC, E1000_WUC_PME_EN); | 5917 | hw->phy.ops.write_reg_page(&adapter->hw, BM_WUC, wuc); |
| 5912 | 5918 | ||
| 5913 | /* activate PHY wakeup */ | 5919 | /* activate PHY wakeup */ |
| 5914 | wuc_enable |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT; | 5920 | wuc_enable |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT; |
| @@ -5921,15 +5927,10 @@ release: | |||
| 5921 | return retval; | 5927 | return retval; |
| 5922 | } | 5928 | } |
| 5923 | 5929 | ||
| 5924 | static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) | 5930 | static int e1000e_pm_freeze(struct device *dev) |
| 5925 | { | 5931 | { |
| 5926 | struct net_device *netdev = pci_get_drvdata(pdev); | 5932 | struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev)); |
| 5927 | struct e1000_adapter *adapter = netdev_priv(netdev); | 5933 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 5928 | struct e1000_hw *hw = &adapter->hw; | ||
| 5929 | u32 ctrl, ctrl_ext, rctl, status; | ||
| 5930 | /* Runtime suspend should only enable wakeup for link changes */ | ||
| 5931 | u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol; | ||
| 5932 | int retval = 0; | ||
| 5933 | 5934 | ||
| 5934 | netif_device_detach(netdev); | 5935 | netif_device_detach(netdev); |
| 5935 | 5936 | ||
| @@ -5940,11 +5941,29 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) | |||
| 5940 | usleep_range(10000, 20000); | 5941 | usleep_range(10000, 20000); |
| 5941 | 5942 | ||
| 5942 | WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); | 5943 | WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); |
| 5943 | e1000e_down(adapter); | 5944 | |
| 5945 | /* Quiesce the device without resetting the hardware */ | ||
| 5946 | e1000e_down(adapter, false); | ||
| 5944 | e1000_free_irq(adapter); | 5947 | e1000_free_irq(adapter); |
| 5945 | } | 5948 | } |
| 5946 | e1000e_reset_interrupt_capability(adapter); | 5949 | e1000e_reset_interrupt_capability(adapter); |
| 5947 | 5950 | ||
| 5951 | /* Allow time for pending master requests to run */ | ||
| 5952 | e1000e_disable_pcie_master(&adapter->hw); | ||
| 5953 | |||
| 5954 | return 0; | ||
| 5955 | } | ||
| 5956 | |||
| 5957 | static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) | ||
| 5958 | { | ||
| 5959 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
| 5960 | struct e1000_adapter *adapter = netdev_priv(netdev); | ||
| 5961 | struct e1000_hw *hw = &adapter->hw; | ||
| 5962 | u32 ctrl, ctrl_ext, rctl, status; | ||
| 5963 | /* Runtime suspend should only enable wakeup for link changes */ | ||
| 5964 | u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol; | ||
| 5965 | int retval = 0; | ||
| 5966 | |||
| 5948 | status = er32(STATUS); | 5967 | status = er32(STATUS); |
| 5949 | if (status & E1000_STATUS_LU) | 5968 | if (status & E1000_STATUS_LU) |
| 5950 | wufc &= ~E1000_WUFC_LNKC; | 5969 | wufc &= ~E1000_WUFC_LNKC; |
| @@ -5975,12 +5994,12 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) | |||
| 5975 | ew32(CTRL_EXT, ctrl_ext); | 5994 | ew32(CTRL_EXT, ctrl_ext); |
| 5976 | } | 5995 | } |
| 5977 | 5996 | ||
| 5997 | if (!runtime) | ||
| 5998 | e1000e_power_up_phy(adapter); | ||
| 5999 | |||
| 5978 | if (adapter->flags & FLAG_IS_ICH) | 6000 | if (adapter->flags & FLAG_IS_ICH) |
| 5979 | e1000_suspend_workarounds_ich8lan(&adapter->hw); | 6001 | e1000_suspend_workarounds_ich8lan(&adapter->hw); |
| 5980 | 6002 | ||
| 5981 | /* Allow time for pending master requests to run */ | ||
| 5982 | e1000e_disable_pcie_master(&adapter->hw); | ||
| 5983 | |||
| 5984 | if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP) { | 6003 | if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP) { |
| 5985 | /* enable wakeup by the PHY */ | 6004 | /* enable wakeup by the PHY */ |
| 5986 | retval = e1000_init_phy_wakeup(adapter, wufc); | 6005 | retval = e1000_init_phy_wakeup(adapter, wufc); |
| @@ -5994,10 +6013,23 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) | |||
| 5994 | } else { | 6013 | } else { |
| 5995 | ew32(WUC, 0); | 6014 | ew32(WUC, 0); |
| 5996 | ew32(WUFC, 0); | 6015 | ew32(WUFC, 0); |
| 6016 | |||
| 6017 | e1000_power_down_phy(adapter); | ||
| 5997 | } | 6018 | } |
| 5998 | 6019 | ||
| 5999 | if (adapter->hw.phy.type == e1000_phy_igp_3) | 6020 | if (adapter->hw.phy.type == e1000_phy_igp_3) { |
| 6000 | e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw); | 6021 | e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw); |
| 6022 | } else if (hw->mac.type == e1000_pch_lpt) { | ||
| 6023 | if (!(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC))) | ||
| 6024 | /* ULP does not support wake from unicast, multicast | ||
| 6025 | * or broadcast. | ||
| 6026 | */ | ||
| 6027 | retval = e1000_enable_ulp_lpt_lp(hw, !runtime); | ||
| 6028 | |||
| 6029 | if (retval) | ||
| 6030 | return retval; | ||
| 6031 | } | ||
| 6032 | |||
| 6001 | 6033 | ||
| 6002 | /* Release control of h/w to f/w. If f/w is AMT enabled, this | 6034 | /* Release control of h/w to f/w. If f/w is AMT enabled, this |
| 6003 | * would have already happened in close and is redundant. | 6035 | * would have already happened in close and is redundant. |
| @@ -6105,18 +6137,12 @@ static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state) | |||
| 6105 | } | 6137 | } |
| 6106 | 6138 | ||
| 6107 | #ifdef CONFIG_PM | 6139 | #ifdef CONFIG_PM |
| 6108 | static bool e1000e_pm_ready(struct e1000_adapter *adapter) | ||
| 6109 | { | ||
| 6110 | return !!adapter->tx_ring->buffer_info; | ||
| 6111 | } | ||
| 6112 | |||
| 6113 | static int __e1000_resume(struct pci_dev *pdev) | 6140 | static int __e1000_resume(struct pci_dev *pdev) |
| 6114 | { | 6141 | { |
| 6115 | struct net_device *netdev = pci_get_drvdata(pdev); | 6142 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 6116 | struct e1000_adapter *adapter = netdev_priv(netdev); | 6143 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 6117 | struct e1000_hw *hw = &adapter->hw; | 6144 | struct e1000_hw *hw = &adapter->hw; |
| 6118 | u16 aspm_disable_flag = 0; | 6145 | u16 aspm_disable_flag = 0; |
| 6119 | u32 err; | ||
| 6120 | 6146 | ||
| 6121 | if (adapter->flags2 & FLAG2_DISABLE_ASPM_L0S) | 6147 | if (adapter->flags2 & FLAG2_DISABLE_ASPM_L0S) |
| 6122 | aspm_disable_flag = PCIE_LINK_STATE_L0S; | 6148 | aspm_disable_flag = PCIE_LINK_STATE_L0S; |
| @@ -6127,13 +6153,6 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
| 6127 | 6153 | ||
| 6128 | pci_set_master(pdev); | 6154 | pci_set_master(pdev); |
| 6129 | 6155 | ||
| 6130 | e1000e_set_interrupt_capability(adapter); | ||
| 6131 | if (netif_running(netdev)) { | ||
| 6132 | err = e1000_request_irq(adapter); | ||
| 6133 | if (err) | ||
| 6134 | return err; | ||
| 6135 | } | ||
| 6136 | |||
| 6137 | if (hw->mac.type >= e1000_pch2lan) | 6156 | if (hw->mac.type >= e1000_pch2lan) |
| 6138 | e1000_resume_workarounds_pchlan(&adapter->hw); | 6157 | e1000_resume_workarounds_pchlan(&adapter->hw); |
| 6139 | 6158 | ||
| @@ -6172,11 +6191,6 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
| 6172 | 6191 | ||
| 6173 | e1000_init_manageability_pt(adapter); | 6192 | e1000_init_manageability_pt(adapter); |
| 6174 | 6193 | ||
| 6175 | if (netif_running(netdev)) | ||
| 6176 | e1000e_up(adapter); | ||
| 6177 | |||
| 6178 | netif_device_attach(netdev); | ||
| 6179 | |||
| 6180 | /* If the controller has AMT, do not set DRV_LOAD until the interface | 6194 | /* If the controller has AMT, do not set DRV_LOAD until the interface |
| 6181 | * is up. For all other cases, let the f/w know that the h/w is now | 6195 | * is up. For all other cases, let the f/w know that the h/w is now |
| 6182 | * under the control of the driver. | 6196 | * under the control of the driver. |
| @@ -6187,75 +6201,111 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
| 6187 | return 0; | 6201 | return 0; |
| 6188 | } | 6202 | } |
| 6189 | 6203 | ||
| 6204 | static int e1000e_pm_thaw(struct device *dev) | ||
| 6205 | { | ||
| 6206 | struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev)); | ||
| 6207 | struct e1000_adapter *adapter = netdev_priv(netdev); | ||
| 6208 | |||
| 6209 | e1000e_set_interrupt_capability(adapter); | ||
| 6210 | if (netif_running(netdev)) { | ||
| 6211 | u32 err = e1000_request_irq(adapter); | ||
| 6212 | |||
| 6213 | if (err) | ||
| 6214 | return err; | ||
| 6215 | |||
| 6216 | e1000e_up(adapter); | ||
| 6217 | } | ||
| 6218 | |||
| 6219 | netif_device_attach(netdev); | ||
| 6220 | |||
| 6221 | return 0; | ||
| 6222 | } | ||
| 6223 | |||
| 6190 | #ifdef CONFIG_PM_SLEEP | 6224 | #ifdef CONFIG_PM_SLEEP |
| 6191 | static int e1000_suspend(struct device *dev) | 6225 | static int e1000e_pm_suspend(struct device *dev) |
| 6192 | { | 6226 | { |
| 6193 | struct pci_dev *pdev = to_pci_dev(dev); | 6227 | struct pci_dev *pdev = to_pci_dev(dev); |
| 6194 | 6228 | ||
| 6229 | e1000e_pm_freeze(dev); | ||
| 6230 | |||
| 6195 | return __e1000_shutdown(pdev, false); | 6231 | return __e1000_shutdown(pdev, false); |
| 6196 | } | 6232 | } |
| 6197 | 6233 | ||
| 6198 | static int e1000_resume(struct device *dev) | 6234 | static int e1000e_pm_resume(struct device *dev) |
| 6199 | { | 6235 | { |
| 6200 | struct pci_dev *pdev = to_pci_dev(dev); | 6236 | struct pci_dev *pdev = to_pci_dev(dev); |
| 6201 | struct net_device *netdev = pci_get_drvdata(pdev); | 6237 | int rc; |
| 6202 | struct e1000_adapter *adapter = netdev_priv(netdev); | ||
| 6203 | 6238 | ||
| 6204 | if (e1000e_pm_ready(adapter)) | 6239 | rc = __e1000_resume(pdev); |
| 6205 | adapter->idle_check = true; | 6240 | if (rc) |
| 6241 | return rc; | ||
| 6206 | 6242 | ||
| 6207 | return __e1000_resume(pdev); | 6243 | return e1000e_pm_thaw(dev); |
| 6208 | } | 6244 | } |
| 6209 | #endif /* CONFIG_PM_SLEEP */ | 6245 | #endif /* CONFIG_PM_SLEEP */ |
| 6210 | 6246 | ||
| 6211 | #ifdef CONFIG_PM_RUNTIME | 6247 | #ifdef CONFIG_PM_RUNTIME |
| 6212 | static int e1000_runtime_suspend(struct device *dev) | 6248 | static int e1000e_pm_runtime_idle(struct device *dev) |
| 6213 | { | 6249 | { |
| 6214 | struct pci_dev *pdev = to_pci_dev(dev); | 6250 | struct pci_dev *pdev = to_pci_dev(dev); |
| 6215 | struct net_device *netdev = pci_get_drvdata(pdev); | 6251 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 6216 | struct e1000_adapter *adapter = netdev_priv(netdev); | 6252 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 6217 | 6253 | ||
| 6218 | if (!e1000e_pm_ready(adapter)) | 6254 | if (!e1000e_has_link(adapter)) |
| 6219 | return 0; | 6255 | pm_schedule_suspend(dev, 5 * MSEC_PER_SEC); |
| 6220 | 6256 | ||
| 6221 | return __e1000_shutdown(pdev, true); | 6257 | return -EBUSY; |
| 6222 | } | 6258 | } |
| 6223 | 6259 | ||
| 6224 | static int e1000_idle(struct device *dev) | 6260 | static int e1000e_pm_runtime_resume(struct device *dev) |
| 6225 | { | 6261 | { |
| 6226 | struct pci_dev *pdev = to_pci_dev(dev); | 6262 | struct pci_dev *pdev = to_pci_dev(dev); |
| 6227 | struct net_device *netdev = pci_get_drvdata(pdev); | 6263 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 6228 | struct e1000_adapter *adapter = netdev_priv(netdev); | 6264 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 6265 | int rc; | ||
| 6229 | 6266 | ||
| 6230 | if (!e1000e_pm_ready(adapter)) | 6267 | rc = __e1000_resume(pdev); |
| 6231 | return 0; | 6268 | if (rc) |
| 6269 | return rc; | ||
| 6232 | 6270 | ||
| 6233 | if (adapter->idle_check) { | 6271 | if (netdev->flags & IFF_UP) |
| 6234 | adapter->idle_check = false; | 6272 | rc = e1000e_up(adapter); |
| 6235 | if (!e1000e_has_link(adapter)) | ||
| 6236 | pm_schedule_suspend(dev, MSEC_PER_SEC); | ||
| 6237 | } | ||
| 6238 | 6273 | ||
| 6239 | return -EBUSY; | 6274 | return rc; |
| 6240 | } | 6275 | } |
| 6241 | 6276 | ||
| 6242 | static int e1000_runtime_resume(struct device *dev) | 6277 | static int e1000e_pm_runtime_suspend(struct device *dev) |
| 6243 | { | 6278 | { |
| 6244 | struct pci_dev *pdev = to_pci_dev(dev); | 6279 | struct pci_dev *pdev = to_pci_dev(dev); |
| 6245 | struct net_device *netdev = pci_get_drvdata(pdev); | 6280 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 6246 | struct e1000_adapter *adapter = netdev_priv(netdev); | 6281 | struct e1000_adapter *adapter = netdev_priv(netdev); |
| 6247 | 6282 | ||
| 6248 | if (!e1000e_pm_ready(adapter)) | 6283 | if (netdev->flags & IFF_UP) { |
| 6249 | return 0; | 6284 | int count = E1000_CHECK_RESET_COUNT; |
| 6285 | |||
| 6286 | while (test_bit(__E1000_RESETTING, &adapter->state) && count--) | ||
| 6287 | usleep_range(10000, 20000); | ||
| 6288 | |||
| 6289 | WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); | ||
| 6290 | |||
| 6291 | /* Down the device without resetting the hardware */ | ||
| 6292 | e1000e_down(adapter, false); | ||
| 6293 | } | ||
| 6250 | 6294 | ||
| 6251 | adapter->idle_check = !dev->power.runtime_auto; | 6295 | if (__e1000_shutdown(pdev, true)) { |
| 6252 | return __e1000_resume(pdev); | 6296 | e1000e_pm_runtime_resume(dev); |
| 6297 | return -EBUSY; | ||
| 6298 | } | ||
| 6299 | |||
| 6300 | return 0; | ||
| 6253 | } | 6301 | } |
| 6254 | #endif /* CONFIG_PM_RUNTIME */ | 6302 | #endif /* CONFIG_PM_RUNTIME */ |
| 6255 | #endif /* CONFIG_PM */ | 6303 | #endif /* CONFIG_PM */ |
| 6256 | 6304 | ||
| 6257 | static void e1000_shutdown(struct pci_dev *pdev) | 6305 | static void e1000_shutdown(struct pci_dev *pdev) |
| 6258 | { | 6306 | { |
| 6307 | e1000e_pm_freeze(&pdev->dev); | ||
| 6308 | |||
| 6259 | __e1000_shutdown(pdev, false); | 6309 | __e1000_shutdown(pdev, false); |
| 6260 | } | 6310 | } |
| 6261 | 6311 | ||
| @@ -6341,7 +6391,7 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev, | |||
| 6341 | return PCI_ERS_RESULT_DISCONNECT; | 6391 | return PCI_ERS_RESULT_DISCONNECT; |
| 6342 | 6392 | ||
| 6343 | if (netif_running(netdev)) | 6393 | if (netif_running(netdev)) |
| 6344 | e1000e_down(adapter); | 6394 | e1000e_down(adapter, true); |
| 6345 | pci_disable_device(pdev); | 6395 | pci_disable_device(pdev); |
| 6346 | 6396 | ||
| 6347 | /* Request a slot slot reset. */ | 6397 | /* Request a slot slot reset. */ |
| @@ -6353,7 +6403,7 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev, | |||
| 6353 | * @pdev: Pointer to PCI device | 6403 | * @pdev: Pointer to PCI device |
| 6354 | * | 6404 | * |
| 6355 | * Restart the card from scratch, as if from a cold-boot. Implementation | 6405 | * Restart the card from scratch, as if from a cold-boot. Implementation |
| 6356 | * resembles the first-half of the e1000_resume routine. | 6406 | * resembles the first-half of the e1000e_pm_resume routine. |
| 6357 | */ | 6407 | */ |
| 6358 | static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev) | 6408 | static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev) |
| 6359 | { | 6409 | { |
| @@ -6400,7 +6450,7 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev) | |||
| 6400 | * | 6450 | * |
| 6401 | * This callback is called when the error recovery driver tells us that | 6451 | * This callback is called when the error recovery driver tells us that |
| 6402 | * its OK to resume normal operation. Implementation resembles the | 6452 | * its OK to resume normal operation. Implementation resembles the |
| 6403 | * second-half of the e1000_resume routine. | 6453 | * second-half of the e1000e_pm_resume routine. |
| 6404 | */ | 6454 | */ |
| 6405 | static void e1000_io_resume(struct pci_dev *pdev) | 6455 | static void e1000_io_resume(struct pci_dev *pdev) |
| 6406 | { | 6456 | { |
| @@ -6905,9 +6955,6 @@ static void e1000_remove(struct pci_dev *pdev) | |||
| 6905 | } | 6955 | } |
| 6906 | } | 6956 | } |
| 6907 | 6957 | ||
| 6908 | if (!(netdev->flags & IFF_UP)) | ||
| 6909 | e1000_power_down_phy(adapter); | ||
| 6910 | |||
| 6911 | /* Don't lie to e1000_close() down the road. */ | 6958 | /* Don't lie to e1000_close() down the road. */ |
| 6912 | if (!down) | 6959 | if (!down) |
| 6913 | clear_bit(__E1000_DOWN, &adapter->state); | 6960 | clear_bit(__E1000_DOWN, &adapter->state); |
| @@ -7029,9 +7076,14 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = { | |||
| 7029 | MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); | 7076 | MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); |
| 7030 | 7077 | ||
| 7031 | static const struct dev_pm_ops e1000_pm_ops = { | 7078 | static const struct dev_pm_ops e1000_pm_ops = { |
| 7032 | SET_SYSTEM_SLEEP_PM_OPS(e1000_suspend, e1000_resume) | 7079 | .suspend = e1000e_pm_suspend, |
| 7033 | SET_RUNTIME_PM_OPS(e1000_runtime_suspend, e1000_runtime_resume, | 7080 | .resume = e1000e_pm_resume, |
| 7034 | e1000_idle) | 7081 | .freeze = e1000e_pm_freeze, |
| 7082 | .thaw = e1000e_pm_thaw, | ||
| 7083 | .poweroff = e1000e_pm_suspend, | ||
| 7084 | .restore = e1000e_pm_resume, | ||
| 7085 | SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume, | ||
| 7086 | e1000e_pm_runtime_idle) | ||
| 7035 | }; | 7087 | }; |
| 7036 | 7088 | ||
| 7037 | /* PCI Device API Driver */ | 7089 | /* PCI Device API Driver */ |
| @@ -7058,7 +7110,7 @@ static int __init e1000_init_module(void) | |||
| 7058 | int ret; | 7110 | int ret; |
| 7059 | pr_info("Intel(R) PRO/1000 Network Driver - %s\n", | 7111 | pr_info("Intel(R) PRO/1000 Network Driver - %s\n", |
| 7060 | e1000e_driver_version); | 7112 | e1000e_driver_version); |
| 7061 | pr_info("Copyright(c) 1999 - 2013 Intel Corporation.\n"); | 7113 | pr_info("Copyright(c) 1999 - 2014 Intel Corporation.\n"); |
| 7062 | ret = pci_register_driver(&e1000_driver); | 7114 | ret = pci_register_driver(&e1000_driver); |
| 7063 | 7115 | ||
| 7064 | return ret; | 7116 | return ret; |
diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c index d70a03906ac0..a9a976f04bff 100644 --- a/drivers/net/ethernet/intel/e1000e/nvm.c +++ b/drivers/net/ethernet/intel/e1000e/nvm.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #include "e1000.h" | 22 | #include "e1000.h" |
| 30 | 23 | ||
diff --git a/drivers/net/ethernet/intel/e1000e/nvm.h b/drivers/net/ethernet/intel/e1000e/nvm.h index 45fc69561627..342bf69efab5 100644 --- a/drivers/net/ethernet/intel/e1000e/nvm.h +++ b/drivers/net/ethernet/intel/e1000e/nvm.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_NVM_H_ | 22 | #ifndef _E1000E_NVM_H_ |
| 30 | #define _E1000E_NVM_H_ | 23 | #define _E1000E_NVM_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/param.c b/drivers/net/ethernet/intel/e1000e/param.c index c16bd75b6caa..d0ac0f3249c8 100644 --- a/drivers/net/ethernet/intel/e1000e/param.c +++ b/drivers/net/ethernet/intel/e1000e/param.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #include <linux/netdevice.h> | 22 | #include <linux/netdevice.h> |
| 30 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| @@ -381,6 +374,12 @@ void e1000e_check_options(struct e1000_adapter *adapter) | |||
| 381 | "%s set to dynamic mode\n", opt.name); | 374 | "%s set to dynamic mode\n", opt.name); |
| 382 | adapter->itr = 20000; | 375 | adapter->itr = 20000; |
| 383 | break; | 376 | break; |
| 377 | case 2: | ||
| 378 | dev_info(&adapter->pdev->dev, | ||
| 379 | "%s Invalid mode - setting default\n", | ||
| 380 | opt.name); | ||
| 381 | adapter->itr_setting = opt.def; | ||
| 382 | /* fall-through */ | ||
| 384 | case 3: | 383 | case 3: |
| 385 | dev_info(&adapter->pdev->dev, | 384 | dev_info(&adapter->pdev->dev, |
| 386 | "%s set to dynamic conservative mode\n", | 385 | "%s set to dynamic conservative mode\n", |
diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c index 20e71f4ca426..00b3fc98bf30 100644 --- a/drivers/net/ethernet/intel/e1000e/phy.c +++ b/drivers/net/ethernet/intel/e1000e/phy.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #include "e1000.h" | 22 | #include "e1000.h" |
| 30 | 23 | ||
diff --git a/drivers/net/ethernet/intel/e1000e/phy.h b/drivers/net/ethernet/intel/e1000e/phy.h index f4f71b9991e3..3841bccf058c 100644 --- a/drivers/net/ethernet/intel/e1000e/phy.h +++ b/drivers/net/ethernet/intel/e1000e/phy.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_PHY_H_ | 22 | #ifndef _E1000E_PHY_H_ |
| 30 | #define _E1000E_PHY_H_ | 23 | #define _E1000E_PHY_H_ |
diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c index 065f8c80d4f2..3bd79a3ff829 100644 --- a/drivers/net/ethernet/intel/e1000e/ptp.c +++ b/drivers/net/ethernet/intel/e1000e/ptp.c | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | /* PTP 1588 Hardware Clock (PHC) | 22 | /* PTP 1588 Hardware Clock (PHC) |
| 30 | * Derived from PTP Hardware Clock driver for Intel 82576 and 82580 (igb) | 23 | * Derived from PTP Hardware Clock driver for Intel 82576 and 82580 (igb) |
| @@ -47,6 +40,7 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta) | |||
| 47 | ptp_clock_info); | 40 | ptp_clock_info); |
| 48 | struct e1000_hw *hw = &adapter->hw; | 41 | struct e1000_hw *hw = &adapter->hw; |
| 49 | bool neg_adj = false; | 42 | bool neg_adj = false; |
| 43 | unsigned long flags; | ||
| 50 | u64 adjustment; | 44 | u64 adjustment; |
| 51 | u32 timinca, incvalue; | 45 | u32 timinca, incvalue; |
| 52 | s32 ret_val; | 46 | s32 ret_val; |
| @@ -64,6 +58,8 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta) | |||
| 64 | if (ret_val) | 58 | if (ret_val) |
| 65 | return ret_val; | 59 | return ret_val; |
| 66 | 60 | ||
| 61 | spin_lock_irqsave(&adapter->systim_lock, flags); | ||
| 62 | |||
| 67 | incvalue = timinca & E1000_TIMINCA_INCVALUE_MASK; | 63 | incvalue = timinca & E1000_TIMINCA_INCVALUE_MASK; |
| 68 | 64 | ||
| 69 | adjustment = incvalue; | 65 | adjustment = incvalue; |
| @@ -77,6 +73,8 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta) | |||
| 77 | 73 | ||
| 78 | ew32(TIMINCA, timinca); | 74 | ew32(TIMINCA, timinca); |
| 79 | 75 | ||
| 76 | spin_unlock_irqrestore(&adapter->systim_lock, flags); | ||
| 77 | |||
| 80 | return 0; | 78 | return 0; |
| 81 | } | 79 | } |
| 82 | 80 | ||
diff --git a/drivers/net/ethernet/intel/e1000e/regs.h b/drivers/net/ethernet/intel/e1000e/regs.h index a7e6a3e37257..ea235bbe50d3 100644 --- a/drivers/net/ethernet/intel/e1000e/regs.h +++ b/drivers/net/ethernet/intel/e1000e/regs.h | |||
| @@ -1,30 +1,23 @@ | |||
| 1 | /******************************************************************************* | 1 | /* Intel PRO/1000 Linux driver |
| 2 | 2 | * Copyright(c) 1999 - 2014 Intel Corporation. | |
| 3 | Intel PRO/1000 Linux driver | 3 | * |
| 4 | Copyright(c) 1999 - 2013 Intel Corporation. | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | 5 | * under the terms and conditions of the GNU General Public License, | |
| 6 | This program is free software; you can redistribute it and/or modify it | 6 | * version 2, as published by the Free Software Foundation. |
| 7 | under the terms and conditions of the GNU General Public License, | 7 | * |
| 8 | version 2, as published by the Free Software Foundation. | 8 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 9 | 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 | This program is distributed in the hope it will be useful, but WITHOUT | 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 11 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 | * more details. |
| 12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 12 | * |
| 13 | more details. | 13 | * The full GNU General Public License is included in this distribution in |
| 14 | 14 | * the file called "COPYING". | |
| 15 | You should have received a copy of the GNU General Public License along with | 15 | * |
| 16 | this program; if not, write to the Free Software Foundation, Inc., | 16 | * Contact Information: |
| 17 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | 17 | * Linux NICS <linux.nics@intel.com> |
| 18 | 18 | * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | |
| 19 | The full GNU General Public License is included in this distribution in | 19 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
| 20 | the file called "COPYING". | 20 | */ |
| 21 | |||
| 22 | Contact Information: | ||
| 23 | Linux NICS <linux.nics@intel.com> | ||
| 24 | e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> | ||
| 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | ||
| 26 | |||
| 27 | *******************************************************************************/ | ||
| 28 | 21 | ||
| 29 | #ifndef _E1000E_REGS_H_ | 22 | #ifndef _E1000E_REGS_H_ |
| 30 | #define _E1000E_REGS_H_ | 23 | #define _E1000E_REGS_H_ |
| @@ -39,6 +32,7 @@ | |||
| 39 | #define E1000_SCTL 0x00024 /* SerDes Control - RW */ | 32 | #define E1000_SCTL 0x00024 /* SerDes Control - RW */ |
| 40 | #define E1000_FCAL 0x00028 /* Flow Control Address Low - RW */ | 33 | #define E1000_FCAL 0x00028 /* Flow Control Address Low - RW */ |
| 41 | #define E1000_FCAH 0x0002C /* Flow Control Address High -RW */ | 34 | #define E1000_FCAH 0x0002C /* Flow Control Address High -RW */ |
| 35 | #define E1000_FEXT 0x0002C /* Future Extended - RW */ | ||
| 42 | #define E1000_FEXTNVM 0x00028 /* Future Extended NVM - RW */ | 36 | #define E1000_FEXTNVM 0x00028 /* Future Extended NVM - RW */ |
| 43 | #define E1000_FEXTNVM3 0x0003C /* Future Extended NVM 3 - RW */ | 37 | #define E1000_FEXTNVM3 0x0003C /* Future Extended NVM 3 - RW */ |
| 44 | #define E1000_FEXTNVM4 0x00024 /* Future Extended NVM 4 - RW */ | 38 | #define E1000_FEXTNVM4 0x00024 /* Future Extended NVM 4 - RW */ |
diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c index 45947b3f7d92..fa36fe12e775 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.c +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c | |||
| @@ -76,8 +76,6 @@ static s32 igb_update_nvm_checksum_i350(struct e1000_hw *hw); | |||
| 76 | static const u16 e1000_82580_rxpbs_table[] = | 76 | static const u16 e1000_82580_rxpbs_table[] = |
| 77 | { 36, 72, 144, 1, 2, 4, 8, 16, | 77 | { 36, 72, 144, 1, 2, 4, 8, 16, |
| 78 | 35, 70, 140 }; | 78 | 35, 70, 140 }; |
| 79 | #define E1000_82580_RXPBS_TABLE_SIZE \ | ||
| 80 | (sizeof(e1000_82580_rxpbs_table)/sizeof(u16)) | ||
| 81 | 79 | ||
| 82 | /** | 80 | /** |
| 83 | * 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 |
| @@ -2307,7 +2305,7 @@ u16 igb_rxpbs_adjust_82580(u32 data) | |||
| 2307 | { | 2305 | { |
| 2308 | u16 ret_val = 0; | 2306 | u16 ret_val = 0; |
| 2309 | 2307 | ||
| 2310 | if (data < E1000_82580_RXPBS_TABLE_SIZE) | 2308 | if (data < ARRAY_SIZE(e1000_82580_rxpbs_table)) |
| 2311 | ret_val = e1000_82580_rxpbs_table[data]; | 2309 | ret_val = e1000_82580_rxpbs_table[data]; |
| 2312 | 2310 | ||
| 2313 | return ret_val; | 2311 | return ret_val; |
| @@ -2713,6 +2711,7 @@ static const u8 e1000_emc_therm_limit[4] = { | |||
| 2713 | E1000_EMC_DIODE3_THERM_LIMIT | 2711 | E1000_EMC_DIODE3_THERM_LIMIT |
| 2714 | }; | 2712 | }; |
| 2715 | 2713 | ||
| 2714 | #ifdef CONFIG_IGB_HWMON | ||
| 2716 | /** | 2715 | /** |
| 2717 | * igb_get_thermal_sensor_data_generic - Gathers thermal sensor data | 2716 | * igb_get_thermal_sensor_data_generic - Gathers thermal sensor data |
| 2718 | * @hw: pointer to hardware structure | 2717 | * @hw: pointer to hardware structure |
| @@ -2835,6 +2834,7 @@ static s32 igb_init_thermal_sensor_thresh_generic(struct e1000_hw *hw) | |||
| 2835 | return status; | 2834 | return status; |
| 2836 | } | 2835 | } |
| 2837 | 2836 | ||
| 2837 | #endif | ||
| 2838 | static struct e1000_mac_operations e1000_mac_ops_82575 = { | 2838 | static struct e1000_mac_operations e1000_mac_ops_82575 = { |
| 2839 | .init_hw = igb_init_hw_82575, | 2839 | .init_hw = igb_init_hw_82575, |
| 2840 | .check_for_link = igb_check_for_link_82575, | 2840 | .check_for_link = igb_check_for_link_82575, |
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 57e0cd89b3dc..6ac5da219150 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
| @@ -516,7 +516,8 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector, | |||
| 516 | /* Workaround hardware that can't do proper VEPA multicast | 516 | /* Workaround hardware that can't do proper VEPA multicast |
| 517 | * source pruning. | 517 | * source pruning. |
| 518 | */ | 518 | */ |
| 519 | if ((skb->pkt_type & (PACKET_BROADCAST | PACKET_MULTICAST)) && | 519 | if ((skb->pkt_type == PACKET_BROADCAST || |
| 520 | skb->pkt_type == PACKET_MULTICAST) && | ||
| 520 | ether_addr_equal(rx_ring->netdev->dev_addr, | 521 | ether_addr_equal(rx_ring->netdev->dev_addr, |
| 521 | eth_hdr(skb)->h_source)) { | 522 | eth_hdr(skb)->h_source)) { |
| 522 | dev_kfree_skb_irq(skb); | 523 | dev_kfree_skb_irq(skb); |
