<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 21, 2017 at 6:43 PM, Stefan Bader <span dir="ltr"><<a href="mailto:stefan.bader@canonical.com" target="_blank">stefan.bader@canonical.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On <a href="tel:21.04.2017%2011" value="+12104201711">21.04.2017 11</a>:12, Shrirang Bagul wrote:<br>
> git://<a href="http://kernel.ubuntu.com/snb/ubuntu-xenial.git" rel="noreferrer" target="_blank">kernel.ubuntu.com/snb/<wbr>ubuntu-xenial.git</a> caracalla-kt-for-arev<br>
<br>
I really don't understand what the changes to drivers/mmc/host/sdhci.c should<br>
accomplish:<br>
<br>
@@ -1745,9 +1746,18 @@ static void sdhci_enable_sdio_irq_nolock(<wbr>struct<br>
sdhci_host *host, int enable)<br>
 static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)<br>
 {<br>
        struct sdhci_host *host = mmc_priv(mmc);<br>
+       struct pci_dev *pci_host;<br>
        unsigned long flags;<br>
<br>
-       sdhci_runtime_pm_get(host);<br>
+       pci_host = pci_get_subsys(PCI_ANY_ID, PCI_ANY_ID,<br>
+                       0x1028, 0x07b9, NULL);<br>
+<br>
+       if (!pci_host)<br>
+               sdhci_runtime_pm_get(host);<br>
+       else {<br>
+               if (enable)<br>
+                       sdhci_runtime_pm_get(host);<br>
+       }<br>
<br>
        spin_lock_irqsave(&host->lock, flags);<br>
        if (enable)<br>
<br>
So pci_host set to a value means this is the gw and NULL for anything else. At<br>
least for everything else the behaviour is not changed. Only for the IOT device<br>
the reference (assuming that is what pm_get/put do) is kept between enabling the<br>
IRQ until disabling it (while otherwise it is kept only while modifying the state).<br>
On the positive side it should not cause regressions for everything else but<br>
while not seeing any additional protection for that case, then why change it at all?<br>
<br>
-Stefan<br></blockquote><div><br></div><div>The patch is targeted to be applied only for specific models of Dell IoT gateways which use</div><div>Intel Baytrail-I processors. This patch [1] is required to support SDIO IRQ's on Baytrail [2].</div><div>Because this project will eventually go through  a de-branding / re-branding process, quirks </div><div>based on DMI strings cannot be used to uniquely identify the hardware. Hence, the use </div><div>of PCI host sub-system ID [3] to get runtime pm when sdio IRQ is enabled.</div><div><br></div><div>[1] <a href="https://git.congatec.com/arm/qmx6_kernel/commit/2ced65a11885ea84c6d3cd2ec8832d489bb0c3f7">https://git.congatec.com/arm/qmx6_kernel/commit/2ced65a11885ea84c6d3cd2ec8832d489bb0c3f7</a><br></div><div>[2] <a href="http://www.spinics.net/lists/linux-mmc/msg41440.html">http://www.spinics.net/lists/linux-mmc/msg41440.html</a><br></div><div>[3] Inspired from : <a href="http://kernel.ubuntu.com/git/ubuntu/ubuntu-xenial.git/commit/?id=38a6598a75d76b6625fca0972cd463fe56cab368">http://kernel.ubuntu.com/git/ubuntu/ubuntu-xenial.git/commit/?id=38a6598a75d76b6625fca0972cd463fe56cab368</a></div><div><br></div><div>-Shrirang</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
@@ -1758,7 +1768,12 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc,<br>
int enable)<br>
        sdhci_enable_sdio_irq_nolock(<wbr>host, enable);<br>
        spin_unlock_irqrestore(&host-><wbr>lock, flags);<br>
<br>
-       sdhci_runtime_pm_put(host);<br>
+       if (!pci_host)<br>
+               sdhci_runtime_pm_put(host);<br>
+       else {<br>
+               if (!enable)<br>
+                       sdhci_runtime_pm_put(host);<br>
+       }<br>
 }<br>
<br>
 static int sdhci_do_start_signal_voltage_<wbr>switch(struct sdhci_host *host,<br>
<br>
</blockquote></div><br></div></div>