|
@@ -48,6 +48,7 @@
|
|
|
#include <linux/netdevice.h>
|
|
|
#include <linux/cache.h>
|
|
|
#include <linux/pci.h>
|
|
|
+#include <linux/pci-aspm.h>
|
|
|
#include <linux/ethtool.h>
|
|
|
#include <linux/uaccess.h>
|
|
|
#include <linux/slab.h>
|
|
@@ -476,6 +477,26 @@ ath5k_pci_probe(struct pci_dev *pdev,
|
|
|
int ret;
|
|
|
u8 csz;
|
|
|
|
|
|
+ /*
|
|
|
+ * L0s needs to be disabled on all ath5k cards.
|
|
|
+ *
|
|
|
+ * For distributions shipping with CONFIG_PCIEASPM (this will be enabled
|
|
|
+ * by default in the future in 2.6.36) this will also mean both L1 and
|
|
|
+ * L0s will be disabled when a pre 1.1 PCIe device is detected. We do
|
|
|
+ * know L1 works correctly even for all ath5k pre 1.1 PCIe devices
|
|
|
+ * though but cannot currently undue the effect of a blacklist, for
|
|
|
+ * details you can read pcie_aspm_sanity_check() and see how it adjusts
|
|
|
+ * the device link capability.
|
|
|
+ *
|
|
|
+ * It may be possible in the future to implement some PCI API to allow
|
|
|
+ * drivers to override blacklists for pre 1.1 PCIe but for now it is
|
|
|
+ * best to accept that both L0s and L1 will be disabled completely for
|
|
|
+ * distributions shipping with CONFIG_PCIEASPM rather than having this
|
|
|
+ * issue present. Motivation for adding this new API will be to help
|
|
|
+ * with power consumption for some of these devices.
|
|
|
+ */
|
|
|
+ pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S);
|
|
|
+
|
|
|
ret = pci_enable_device(pdev);
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "can't enable device\n");
|