]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/pci/dwc/pcie-qcom.c
Merge branch 'pci/host/qcom'
[linux.git] / drivers / pci / dwc / pcie-qcom.c
index 7a04ab8b893cca1bd372f2a43303656002f84d21..a1d0198081a645ee13c00b744c3493ab93da3e6d 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
 #include <linux/pci.h>
+#include <linux/pm_runtime.h>
 #include <linux/platform_device.h>
 #include <linux/phy/phy.h>
 #include <linux/regulator/consumer.h>
@@ -869,7 +870,7 @@ static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie)
 
        /* enable PCIe clocks and resets */
        val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL);
-       val &= !BIT(0);
+       val &= ~BIT(0);
        writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL);
 
        /* change DBI base address */
@@ -1088,6 +1089,7 @@ static int qcom_pcie_host_init(struct pcie_port *pp)
        struct qcom_pcie *pcie = to_qcom_pcie(pci);
        int ret;
 
+       pm_runtime_get_sync(pci->dev);
        qcom_ep_reset_assert(pcie);
 
        ret = pcie->ops->init(pcie);
@@ -1124,6 +1126,7 @@ static int qcom_pcie_host_init(struct pcie_port *pp)
        phy_power_off(pcie->phy);
 err_deinit:
        pcie->ops->deinit(pcie);
+       pm_runtime_put(pci->dev);
 
        return ret;
 }
@@ -1212,6 +1215,7 @@ static int qcom_pcie_probe(struct platform_device *pdev)
        if (!pci)
                return -ENOMEM;
 
+       pm_runtime_enable(dev);
        pci->dev = dev;
        pci->ops = &dw_pcie_ops;
        pp = &pci->pp;
@@ -1257,14 +1261,17 @@ static int qcom_pcie_probe(struct platform_device *pdev)
        }
 
        ret = phy_init(pcie->phy);
-       if (ret)
+       if (ret) {
+               pm_runtime_disable(&pdev->dev);
                return ret;
+       }
 
        platform_set_drvdata(pdev, pcie);
 
        ret = dw_pcie_host_init(pp);
        if (ret) {
                dev_err(dev, "cannot initialize host\n");
+               pm_runtime_disable(&pdev->dev);
                return ret;
        }