Linux wireless drivers development
 help / color / mirror / Atom feed
From: Oliver Zemann <oliver.zemann@gmail.com>
To: Matthias Klein <matthias.klein@optimeas.de>,
	Michal Kazior <michal.kazior@tieto.com>
Cc: linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: compex wle900vx (ath10k) problem on 4.4.24 / armv7
Date: Mon, 24 Oct 2016 22:14:55 +0200	[thread overview]
Message-ID: <45bffe7d-8f27-ef26-b7f9-78709e52652f@gmail.com> (raw)
In-Reply-To: <em1c0906d6-d30a-4f2c-bafb-bfec0d18a58d@nb-mak>


>> Can you try cherry-picking it into your 4.4.24 and see if it helps?
I created a patch which should work for 4.4.24 (at least for arch linux 
arm it applied successful)

diff --git a/drivers/pci/pcie/portdrv_core.c 
b/drivers/pci/pcie/portdrv_core.c
index 88122dc..f2caf38 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -8,6 +8,7 @@

  #include <linux/module.h>
  #include <linux/pci.h>
+#include <linux/pm_runtime.h>
  #include <linux/kernel.h>
  #include <linux/errno.h>
  #include <linux/pm.h>
@@ -350,6 +351,8 @@ static int pcie_device_init(struct pci_dev *pdev, 
int service, int irq)
          return retval;
      }

+        pm_runtime_no_callbacks(device);
+
      return 0;
  }

diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index be35da2..1624cc3 100644
--- a/drivers/pci/pcie/portdrv_pci.c
+++ b/drivers/pci/pcie/portdrv_pci.c
@@ -93,6 +93,28 @@ static int pcie_port_resume_noirq(struct device *dev)
      return 0;
  }

+static int pcie_port_runtime_suspend(struct device *dev)
+{
+    return to_pci_dev(dev)->bridge_d3 ? 0 : -EBUSY;
+}
+
+static int pcie_port_runtime_resume(struct device *dev)
+{
+    return 0;
+}
+
+static int pcie_port_runtime_idle(struct device *dev)
+{
+    /*
+     * Assume the PCI core has set bridge_d3 whenever it thinks the port
+     * should be good to go to D3.  Everything else, including moving
+     * the port to D3, is handled by the PCI core.
+     */
+    return to_pci_dev(dev)->bridge_d3 ? 0 : -EBUSY;
+}
++
+
+
  static const struct dev_pm_ops pcie_portdrv_pm_ops = {
      .suspend    = pcie_port_device_suspend,
      .resume        = pcie_port_device_resume,
@@ -101,6 +123,9 @@ static const struct dev_pm_ops pcie_portdrv_pm_ops = {
      .poweroff    = pcie_port_device_suspend,
      .restore    = pcie_port_device_resume,
      .resume_noirq    = pcie_port_resume_noirq,
+    .runtime_suspend = pcie_port_runtime_suspend,
+    .runtime_resume    = pcie_port_runtime_resume,
+    .runtime_idle    = pcie_port_runtime_idle,
  };

  #define PCIE_PORTDRV_PM_OPS    (&pcie_portdrv_pm_ops)
@@ -139,11 +164,39 @@ static int pcie_portdrv_probe(struct pci_dev *dev,
       * it by default.
       */
      dev->d3cold_allowed = false;
+
+    /*
+     * Prevent runtime PM if the port is advertising support for PCIe
+     * hotplug.  Otherwise the BIOS hotplug SMI code might not be able
+     * to enumerate devices behind this port properly (the port is
+     * powered down preventing all config space accesses to the
+     * subordinate devices).  We can't be sure for native PCIe hotplug
+     * either so prevent that as well.
+     */
+    if (!dev->is_hotplug_bridge) {
+        /*
+         * Keep the port resumed 100ms to make sure things like
+         * config space accesses from userspace (lspci) will not
+         * cause the port to repeatedly suspend and resume.
+         */
+        pm_runtime_set_autosuspend_delay(&dev->dev, 100);
+        pm_runtime_use_autosuspend(&dev->dev);
+        pm_runtime_mark_last_busy(&dev->dev);
+        pm_runtime_put_autosuspend(&dev->dev);
+        pm_runtime_allow(&dev->dev);
+    }
+
      return 0;
  }

  static void pcie_portdrv_remove(struct pci_dev *dev)
  {
+    if (!dev->is_hotplug_bridge) {
+        pm_runtime_forbid(&dev->dev);
+        pm_runtime_get_noresume(&dev->dev);
+        pm_runtime_dont_use_autosuspend(&dev->dev);
+    }
+
      pcie_port_device_remove(dev);
  }

Just compiling the kernel... lets see what happens

  reply	other threads:[~2016-10-24 20:15 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-24 10:18 compex wle900vx (ath10k) problem on 4.4.24 / armv7 Matthias Klein
2016-10-24 11:40 ` Michal Kazior
2016-10-24 12:08   ` Re[2]: " Matthias Klein
2016-10-24 20:14     ` Oliver Zemann [this message]
2016-10-25  5:53       ` Oliver Zemann
2016-10-26 20:25     ` Oliver Zemann
     [not found]     ` <386d6f28-9a13-51cc-27ae-0028d517cf27@gmail.com>
2016-10-30  9:08       ` Oliver Zemann
     [not found] <b61ccf3c-1861-c8f8-ff7d-91c2b6ff4df5@gmail.com>
2016-10-15 14:00 ` Oliver Zemann
2016-10-15 14:44   ` Sebastian Gottschall
2016-10-15 17:04     ` Oliver Zemann
2016-10-21 16:25       ` Oliver Zemann
2016-10-21 16:54         ` Michal Kazior
2016-10-22 11:55         ` Jonas Gorski
2016-10-23 15:53           ` Oliver Zemann
2016-10-23 19:33             ` Jonas Gorski
2016-10-23 19:42               ` Oliver Zemann
2016-10-24 11:14                 ` Jonas Gorski
2016-10-24 18:10                   ` Oliver Zemann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45bffe7d-8f27-ef26-b7f9-78709e52652f@gmail.com \
    --to=oliver.zemann@gmail.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=matthias.klein@optimeas.de \
    --cc=michal.kazior@tieto.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox