@@ -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>
@@ -469,6 +470,19 @@ ath5k_pci_probe(struct pci_dev *pdev,
int ret;
u8 csz;
+ /*
+ * Disable PCIE ASPM L0S on the card.
+ * ASPM triggers hardware bug, that makes card stall transmission
+ * untill reset, and even that doesn't always help.
+ * This happens on meduim to heavy transmit utilization.
+ * In addition to stall, hardware usually gives a storm of
+ * RXORN interrupts, despite idle channel, and otherwise doesn't work.
+ * Windows driver also disables the L0s ASPM,
+ * probably due to same reason
+ * Note: to benefit from this fix, please _enable_ CONFIG_PCIEASPM
+ */
+ 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");