瀏覽代碼

iwlwifi: disable aspm by default

Some iwlwifi devices inexplicably disconnect themselves from the PCI-E
bus causing the predictable failures.  This seems to disappear if ASPM
is disabled.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
John W. Linville 15 年之前
父節點
當前提交
1a7123cdd9
共有 2 個文件被更改,包括 8 次插入0 次删除
  1. 4 0
      drivers/net/wireless/iwlwifi/iwl-agn.c
  2. 4 0
      drivers/net/wireless/iwlwifi/iwl3945-base.c

+ 4 - 0
drivers/net/wireless/iwlwifi/iwl-agn.c

@@ -33,6 +33,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
+#include <linux/pci-aspm.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
@@ -3968,6 +3969,9 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	/**************************
 	/**************************
 	 * 2. Initializing PCI bus
 	 * 2. Initializing PCI bus
 	 **************************/
 	 **************************/
+	pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 |
+				PCIE_LINK_STATE_CLKPM);
+
 	if (pci_enable_device(pdev)) {
 	if (pci_enable_device(pdev)) {
 		err = -ENODEV;
 		err = -ENODEV;
 		goto out_ieee80211_free_hw;
 		goto out_ieee80211_free_hw;

+ 4 - 0
drivers/net/wireless/iwlwifi/iwl3945-base.c

@@ -33,6 +33,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
+#include <linux/pci-aspm.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
@@ -3963,6 +3964,9 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
 	/***************************
 	/***************************
 	 * 2. Initializing PCI bus
 	 * 2. Initializing PCI bus
 	 * *************************/
 	 * *************************/
+	pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 |
+				PCIE_LINK_STATE_CLKPM);
+
 	if (pci_enable_device(pdev)) {
 	if (pci_enable_device(pdev)) {
 		err = -ENODEV;
 		err = -ENODEV;
 		goto out_ieee80211_free_hw;
 		goto out_ieee80211_free_hw;