|
@@ -11,6 +11,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <linux/delay.h>
|
|
|
+#include <linux/device.h>
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/irq.h>
|
|
@@ -594,6 +595,7 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
|
|
|
int i;
|
|
|
int phy_count;
|
|
|
struct phy **phy;
|
|
|
+ struct device_link **link;
|
|
|
void __iomem *base;
|
|
|
struct resource *res;
|
|
|
struct dw_pcie *pci;
|
|
@@ -649,11 +651,21 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
|
|
|
if (!phy)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ link = devm_kzalloc(dev, sizeof(*link) * phy_count, GFP_KERNEL);
|
|
|
+ if (!link)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
for (i = 0; i < phy_count; i++) {
|
|
|
snprintf(name, sizeof(name), "pcie-phy%d", i);
|
|
|
phy[i] = devm_phy_get(dev, name);
|
|
|
if (IS_ERR(phy[i]))
|
|
|
return PTR_ERR(phy[i]);
|
|
|
+
|
|
|
+ link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
|
|
|
+ if (!link[i]) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto err_link;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
dra7xx->base = base;
|
|
@@ -732,6 +744,10 @@ err_get_sync:
|
|
|
pm_runtime_disable(dev);
|
|
|
dra7xx_pcie_disable_phy(dra7xx);
|
|
|
|
|
|
+err_link:
|
|
|
+ while (--i >= 0)
|
|
|
+ device_link_del(link[i]);
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|