|
@@ -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>
|
|
@@ -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 @@ err_disable_phy:
|
|
|
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;
|
|
|
}
|
|
|
|