* [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-08-10 12:43 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-08-10 12:43 UTC (permalink / raw)
To: linux-pci
Cc: linux-kernel, linux-omap, linux-arm-kernel, linux-rockchip,
linux-arm-msm, linux-riscv, spacemit, linux-tegra, Bjorn Helgaas,
Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli
This is practically a full revert of commit
7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
and a partial revert of the device link pieces from commits
dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
49229238ab47 ("PCI: keystone: Cleanup PHY handling")
The trouble with these commits is that they dereference fields inside
struct phy from a consumer driver, which will become no longer possible.
Since commit 987351e1ea77 ("phy: core: Add consumer device link
support") from 2019, the PHY core also adds a device link to order PHY
provider and consumer suspend/resume operations. All reverted commits
are from 2017-2018, and what they do should actually be redundant now.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
---
Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Cc: Rob Herring <robh@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Cc: Siddharth Vadapalli <s-vadapalli@ti.com>
v8->v9: none
v7->v8: only context change - "return 0" became "return ret" for
cdns_plat_pcie_probe()
v6->v7: none
v5->v6: collect tag from Manivannan Sadhasivam
v3->v5: none
v2->v3:
- remove dangling set but unused phy_count local variable in
cdns_plat_pcie_probe()
v1->v2:
- fully remove struct device link **link from struct cdns_pcie and from
cdns_plat_pcie_probe() error path
- collect tag from Bjorn Helgaas
- adjust commit title
---
.../controller/cadence/pcie-cadence-plat.c | 4 ---
drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
drivers/pci/controller/cadence/pcie-cadence.h | 2 --
drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
5 files changed, 5 insertions(+), 64 deletions(-)
diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c
index 8aed8b4c3e11..13edc6be21f5 100644
--- a/drivers/pci/controller/cadence/pcie-cadence-plat.c
+++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c
@@ -41,7 +41,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
struct pci_host_bridge *bridge;
struct cdns_pcie_ep *ep;
struct cdns_pcie_rc *rc;
- int phy_count;
bool is_rc;
int ret;
@@ -122,9 +121,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
pm_runtime_put_sync(dev);
pm_runtime_disable(dev);
cdns_pcie_disable_phy(cdns_plat_pcie->pcie);
- phy_count = cdns_plat_pcie->pcie->phy_count;
- while (phy_count--)
- device_link_del(cdns_plat_pcie->pcie->link[phy_count]);
return ret;
}
diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
index a1eada56edba..0ac980249941 100644
--- a/drivers/pci/controller/cadence/pcie-cadence.c
+++ b/drivers/pci/controller/cadence/pcie-cadence.c
@@ -222,7 +222,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
struct device_node *np = dev->of_node;
int phy_count;
struct phy **phy;
- struct device_link **link;
int i;
int ret;
const char *name;
@@ -238,10 +237,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
for (i = 0; i < phy_count; i++) {
of_property_read_string_index(np, "phy-names", i, &name);
phy[i] = devm_phy_get(dev, name);
@@ -249,17 +244,10 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
ret = PTR_ERR(phy[i]);
goto err_phy;
}
- link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
- if (!link[i]) {
- devm_phy_put(dev, phy[i]);
- ret = -EINVAL;
- goto err_phy;
- }
}
pcie->phy_count = phy_count;
pcie->phy = phy;
- pcie->link = link;
ret = cdns_pcie_enable_phy(pcie);
if (ret)
@@ -268,10 +256,8 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
return 0;
err_phy:
- while (--i >= 0) {
- device_link_del(link[i]);
+ while (--i >= 0)
devm_phy_put(dev, phy[i]);
- }
return ret;
}
diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
index b4d51adefea5..4a96e1869e53 100644
--- a/drivers/pci/controller/cadence/pcie-cadence.h
+++ b/drivers/pci/controller/cadence/pcie-cadence.h
@@ -260,7 +260,6 @@ struct cdns_plat_pcie_of_data {
* @is_hpa: indicates if the architecture is HPA
* @phy_count: number of supported PHY devices
* @phy: list of pointers to specific PHY control blocks
- * @link: list of pointers to corresponding device link representations
* @ops: Platform-specific ops to control various inputs from Cadence PCIe
* wrapper
* @cdns_pcie_reg_offsets: Register bank offsets for different SoC
@@ -276,7 +275,6 @@ struct cdns_pcie {
bool is_hpa;
int phy_count;
struct phy **phy;
- struct device_link **link;
const struct cdns_pcie_ops *ops;
const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets;
int max_link_speed;
diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
index 3fc889944f02..bf6c5b86bb27 100644
--- a/drivers/pci/controller/dwc/pci-dra7xx.c
+++ b/drivers/pci/controller/dwc/pci-dra7xx.c
@@ -9,7 +9,6 @@
#include <linux/clk.h>
#include <linux/delay.h>
-#include <linux/device.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
@@ -678,7 +677,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
int i;
int phy_count;
struct phy **phy;
- struct device_link **link;
void __iomem *base;
struct dw_pcie *pci;
struct dra7xx_pcie *dra7xx;
@@ -726,10 +724,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
dra7xx->clk = devm_clk_get_optional(dev, NULL);
if (IS_ERR(dra7xx->clk))
return dev_err_probe(dev, PTR_ERR(dra7xx->clk),
@@ -744,12 +738,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
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;
@@ -851,10 +839,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
pm_runtime_disable(dev);
dra7xx_pcie_disable_phy(dra7xx);
-err_link:
- while (--i >= 0)
- device_link_del(link[i]);
-
return ret;
}
diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
index e9b012a5ea9a..8085c4f61403 100644
--- a/drivers/pci/controller/dwc/pci-keystone.c
+++ b/drivers/pci/controller/dwc/pci-keystone.c
@@ -130,7 +130,6 @@ struct keystone_pcie {
int num_lanes;
u32 num_viewport;
struct phy **phy;
- struct device_link **link;
struct device_node *msi_intc_np;
struct irq_domain *intx_irq_domain;
struct device_node *np;
@@ -1130,7 +1129,6 @@ static int ks_pcie_probe(struct platform_device *pdev)
enum dw_pcie_device_mode mode;
struct dw_pcie *pci;
struct keystone_pcie *ks_pcie;
- struct device_link **link;
struct gpio_desc *gpiod;
struct resource *res;
void __iomem *base;
@@ -1201,31 +1199,17 @@ static int ks_pcie_probe(struct platform_device *pdev)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, num_lanes, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
for (i = 0; i < num_lanes; i++) {
snprintf(name, sizeof(name), "pcie-phy%d", i);
phy[i] = devm_phy_optional_get(dev, name);
if (IS_ERR(phy[i])) {
ret = PTR_ERR(phy[i]);
- goto err_link;
- }
-
- if (!phy[i])
- continue;
-
- link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
- if (!link[i]) {
- ret = -EINVAL;
- goto err_link;
+ goto err;
}
}
ks_pcie->np = np;
ks_pcie->pci = pci;
- ks_pcie->link = link;
ks_pcie->num_lanes = num_lanes;
ks_pcie->phy = phy;
@@ -1235,7 +1219,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
ret = PTR_ERR(gpiod);
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get reset GPIO\n");
- goto err_link;
+ goto err;
}
/* Obtain references to the PHYs */
@@ -1250,7 +1234,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
if (ret) {
dev_err(dev, "failed to enable phy\n");
- goto err_link;
+ goto err;
}
platform_set_drvdata(pdev, ks_pcie);
@@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
pm_runtime_disable(dev);
ks_pcie_disable_phy(ks_pcie);
-err_link:
- while (--i >= 0 && link[i])
- device_link_del(link[i]);
-
+err:
return ret;
}
static void ks_pcie_remove(struct platform_device *pdev)
{
struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
- struct device_link **link = ks_pcie->link;
- int num_lanes = ks_pcie->num_lanes;
struct device *dev = &pdev->dev;
pm_runtime_put(dev);
pm_runtime_disable(dev);
ks_pcie_disable_phy(ks_pcie);
- while (num_lanes--)
- device_link_del(link[num_lanes]);
}
static struct platform_driver ks_pcie_driver = {
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 33+ messages in thread* [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-08-10 12:43 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-08-10 12:43 UTC (permalink / raw)
To: linux-pci
Cc: linux-kernel, linux-omap, linux-arm-kernel, linux-rockchip,
linux-arm-msm, linux-riscv, spacemit, linux-tegra, Bjorn Helgaas,
Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli
This is practically a full revert of commit
7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
and a partial revert of the device link pieces from commits
dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
49229238ab47 ("PCI: keystone: Cleanup PHY handling")
The trouble with these commits is that they dereference fields inside
struct phy from a consumer driver, which will become no longer possible.
Since commit 987351e1ea77 ("phy: core: Add consumer device link
support") from 2019, the PHY core also adds a device link to order PHY
provider and consumer suspend/resume operations. All reverted commits
are from 2017-2018, and what they do should actually be redundant now.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
---
Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Cc: Rob Herring <robh@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Cc: Siddharth Vadapalli <s-vadapalli@ti.com>
v8->v9: none
v7->v8: only context change - "return 0" became "return ret" for
cdns_plat_pcie_probe()
v6->v7: none
v5->v6: collect tag from Manivannan Sadhasivam
v3->v5: none
v2->v3:
- remove dangling set but unused phy_count local variable in
cdns_plat_pcie_probe()
v1->v2:
- fully remove struct device link **link from struct cdns_pcie and from
cdns_plat_pcie_probe() error path
- collect tag from Bjorn Helgaas
- adjust commit title
---
.../controller/cadence/pcie-cadence-plat.c | 4 ---
drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
drivers/pci/controller/cadence/pcie-cadence.h | 2 --
drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
5 files changed, 5 insertions(+), 64 deletions(-)
diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c
index 8aed8b4c3e11..13edc6be21f5 100644
--- a/drivers/pci/controller/cadence/pcie-cadence-plat.c
+++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c
@@ -41,7 +41,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
struct pci_host_bridge *bridge;
struct cdns_pcie_ep *ep;
struct cdns_pcie_rc *rc;
- int phy_count;
bool is_rc;
int ret;
@@ -122,9 +121,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
pm_runtime_put_sync(dev);
pm_runtime_disable(dev);
cdns_pcie_disable_phy(cdns_plat_pcie->pcie);
- phy_count = cdns_plat_pcie->pcie->phy_count;
- while (phy_count--)
- device_link_del(cdns_plat_pcie->pcie->link[phy_count]);
return ret;
}
diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
index a1eada56edba..0ac980249941 100644
--- a/drivers/pci/controller/cadence/pcie-cadence.c
+++ b/drivers/pci/controller/cadence/pcie-cadence.c
@@ -222,7 +222,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
struct device_node *np = dev->of_node;
int phy_count;
struct phy **phy;
- struct device_link **link;
int i;
int ret;
const char *name;
@@ -238,10 +237,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
for (i = 0; i < phy_count; i++) {
of_property_read_string_index(np, "phy-names", i, &name);
phy[i] = devm_phy_get(dev, name);
@@ -249,17 +244,10 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
ret = PTR_ERR(phy[i]);
goto err_phy;
}
- link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
- if (!link[i]) {
- devm_phy_put(dev, phy[i]);
- ret = -EINVAL;
- goto err_phy;
- }
}
pcie->phy_count = phy_count;
pcie->phy = phy;
- pcie->link = link;
ret = cdns_pcie_enable_phy(pcie);
if (ret)
@@ -268,10 +256,8 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
return 0;
err_phy:
- while (--i >= 0) {
- device_link_del(link[i]);
+ while (--i >= 0)
devm_phy_put(dev, phy[i]);
- }
return ret;
}
diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
index b4d51adefea5..4a96e1869e53 100644
--- a/drivers/pci/controller/cadence/pcie-cadence.h
+++ b/drivers/pci/controller/cadence/pcie-cadence.h
@@ -260,7 +260,6 @@ struct cdns_plat_pcie_of_data {
* @is_hpa: indicates if the architecture is HPA
* @phy_count: number of supported PHY devices
* @phy: list of pointers to specific PHY control blocks
- * @link: list of pointers to corresponding device link representations
* @ops: Platform-specific ops to control various inputs from Cadence PCIe
* wrapper
* @cdns_pcie_reg_offsets: Register bank offsets for different SoC
@@ -276,7 +275,6 @@ struct cdns_pcie {
bool is_hpa;
int phy_count;
struct phy **phy;
- struct device_link **link;
const struct cdns_pcie_ops *ops;
const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets;
int max_link_speed;
diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
index 3fc889944f02..bf6c5b86bb27 100644
--- a/drivers/pci/controller/dwc/pci-dra7xx.c
+++ b/drivers/pci/controller/dwc/pci-dra7xx.c
@@ -9,7 +9,6 @@
#include <linux/clk.h>
#include <linux/delay.h>
-#include <linux/device.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
@@ -678,7 +677,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
int i;
int phy_count;
struct phy **phy;
- struct device_link **link;
void __iomem *base;
struct dw_pcie *pci;
struct dra7xx_pcie *dra7xx;
@@ -726,10 +724,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
dra7xx->clk = devm_clk_get_optional(dev, NULL);
if (IS_ERR(dra7xx->clk))
return dev_err_probe(dev, PTR_ERR(dra7xx->clk),
@@ -744,12 +738,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
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;
@@ -851,10 +839,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
pm_runtime_disable(dev);
dra7xx_pcie_disable_phy(dra7xx);
-err_link:
- while (--i >= 0)
- device_link_del(link[i]);
-
return ret;
}
diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
index e9b012a5ea9a..8085c4f61403 100644
--- a/drivers/pci/controller/dwc/pci-keystone.c
+++ b/drivers/pci/controller/dwc/pci-keystone.c
@@ -130,7 +130,6 @@ struct keystone_pcie {
int num_lanes;
u32 num_viewport;
struct phy **phy;
- struct device_link **link;
struct device_node *msi_intc_np;
struct irq_domain *intx_irq_domain;
struct device_node *np;
@@ -1130,7 +1129,6 @@ static int ks_pcie_probe(struct platform_device *pdev)
enum dw_pcie_device_mode mode;
struct dw_pcie *pci;
struct keystone_pcie *ks_pcie;
- struct device_link **link;
struct gpio_desc *gpiod;
struct resource *res;
void __iomem *base;
@@ -1201,31 +1199,17 @@ static int ks_pcie_probe(struct platform_device *pdev)
if (!phy)
return -ENOMEM;
- link = devm_kcalloc(dev, num_lanes, sizeof(*link), GFP_KERNEL);
- if (!link)
- return -ENOMEM;
-
for (i = 0; i < num_lanes; i++) {
snprintf(name, sizeof(name), "pcie-phy%d", i);
phy[i] = devm_phy_optional_get(dev, name);
if (IS_ERR(phy[i])) {
ret = PTR_ERR(phy[i]);
- goto err_link;
- }
-
- if (!phy[i])
- continue;
-
- link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
- if (!link[i]) {
- ret = -EINVAL;
- goto err_link;
+ goto err;
}
}
ks_pcie->np = np;
ks_pcie->pci = pci;
- ks_pcie->link = link;
ks_pcie->num_lanes = num_lanes;
ks_pcie->phy = phy;
@@ -1235,7 +1219,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
ret = PTR_ERR(gpiod);
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get reset GPIO\n");
- goto err_link;
+ goto err;
}
/* Obtain references to the PHYs */
@@ -1250,7 +1234,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
if (ret) {
dev_err(dev, "failed to enable phy\n");
- goto err_link;
+ goto err;
}
platform_set_drvdata(pdev, ks_pcie);
@@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
pm_runtime_disable(dev);
ks_pcie_disable_phy(ks_pcie);
-err_link:
- while (--i >= 0 && link[i])
- device_link_del(link[i]);
-
+err:
return ret;
}
static void ks_pcie_remove(struct platform_device *pdev)
{
struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
- struct device_link **link = ks_pcie->link;
- int num_lanes = ks_pcie->num_lanes;
struct device *dev = &pdev->dev;
pm_runtime_put(dev);
pm_runtime_disable(dev);
ks_pcie_disable_phy(ks_pcie);
- while (num_lanes--)
- device_link_del(link[num_lanes]);
}
static struct platform_driver ks_pcie_driver = {
--
2.34.1
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-08-10 12:43 ` Vladimir Oltean
(?)
(?)
@ 2026-08-10 12:58 ` sashiko-bot
-1 siblings, 0 replies; 33+ messages in thread
From: sashiko-bot @ 2026-08-10 12:58 UTC (permalink / raw)
To: Vladimir Oltean; +Cc: linux-pci
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The Keystone PCIe driver completely skips deinitializing the DesignWare host or endpoint during module removal, leading to severe resource leaks and Use-After-Free conditions.
--
--- Patch [3]: [PATCH v9 3/3] PCI: Remove device links to PHY ---
commit dba6a718906e10ffe3960ba8d21e61e4e4e62e26
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Subject: PCI: Remove device links to PHY
This commit removes explicit device links between the PCIe controllers and
PHY providers in Cadence, DRA7xx, and Keystone drivers. The PHY core has
automatically added consumer device link support since 2019, making the
manual link management redundant.
> diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
> index e9b012a5ea9a2..8085c4f614031 100644
> --- a/drivers/pci/controller/dwc/pci-keystone.c
> +++ b/drivers/pci/controller/dwc/pci-keystone.c
[ ... ]
> @@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
>
> -err_link:
> - while (--i >= 0 && link[i])
> - device_link_del(link[i]);
> -
> +err:
> return ret;
> }
>
> static void ks_pcie_remove(struct platform_device *pdev)
> {
> struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
> - struct device_link **link = ks_pcie->link;
> - int num_lanes = ks_pcie->num_lanes;
> struct device *dev = &pdev->dev;
>
> pm_runtime_put(dev);
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
[Severity: High]
This is a pre-existing issue, but is the driver missing a call to
deregister the dw_pcie core during module removal?
The ks_pcie_remove() function does not call dw_pcie_host_deinit() or
dw_pcie_ep_deinit(). This could leave the PCI controller registered in the
kernel's PCI subsystem while its backing memory (allocated via
devm_kzalloc) is freed by devres when the driver is unbound.
If this happens, wouldn't subsequent access to the PCI bus (e.g. via sysfs
or background polling) dereference freed pointers and cause a
use-after-free panic?
> - while (num_lanes--)
> - device_link_del(link[num_lanes]);
> }
>
> static struct platform_driver ks_pcie_driver = {
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260810124315.433448-1-vladimir.oltean@nxp.com?part=3
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-08-10 12:43 ` Vladimir Oltean
(?)
@ 2026-09-11 22:12 ` Bjorn Helgaas
-1 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-11 22:12 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
[+cc Felix, author of device link leak fixes]
On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> This is practically a full revert of commit
> 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> and a partial revert of the device link pieces from commits
> dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
Can we split this into three commits (dra7xx, cadence, keystone)?
This combined commit is applied on the pci/controller/misc branch, and
then we have conflicts between that branch and
pci/controller/dwc-dra7xx.
I think if we split this into three separate commits, we can apply the
dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
leak fixes below so we don't clutter the git history with conflict
resolutions or irrelevant commits:
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> The trouble with these commits is that they dereference fields inside
> struct phy from a consumer driver, which will become no longer possible.
>
> Since commit 987351e1ea77 ("phy: core: Add consumer device link
> support") from 2019, the PHY core also adds a device link to order PHY
> provider and consumer suspend/resume operations. All reverted commits
> are from 2017-2018, and what they do should actually be redundant now.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
> ---
> Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
> Cc: Manivannan Sadhasivam <mani@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Vignesh Raghavendra <vigneshr@ti.com>
> Cc: Siddharth Vadapalli <s-vadapalli@ti.com>
>
> v8->v9: none
> v7->v8: only context change - "return 0" became "return ret" for
> cdns_plat_pcie_probe()
> v6->v7: none
> v5->v6: collect tag from Manivannan Sadhasivam
> v3->v5: none
> v2->v3:
> - remove dangling set but unused phy_count local variable in
> cdns_plat_pcie_probe()
> v1->v2:
> - fully remove struct device link **link from struct cdns_pcie and from
> cdns_plat_pcie_probe() error path
> - collect tag from Bjorn Helgaas
> - adjust commit title
> ---
> .../controller/cadence/pcie-cadence-plat.c | 4 ---
> drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
> drivers/pci/controller/cadence/pcie-cadence.h | 2 --
> drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
> drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
> 5 files changed, 5 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> index 8aed8b4c3e11..13edc6be21f5 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> @@ -41,7 +41,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> struct pci_host_bridge *bridge;
> struct cdns_pcie_ep *ep;
> struct cdns_pcie_rc *rc;
> - int phy_count;
> bool is_rc;
> int ret;
>
> @@ -122,9 +121,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> pm_runtime_put_sync(dev);
> pm_runtime_disable(dev);
> cdns_pcie_disable_phy(cdns_plat_pcie->pcie);
> - phy_count = cdns_plat_pcie->pcie->phy_count;
> - while (phy_count--)
> - device_link_del(cdns_plat_pcie->pcie->link[phy_count]);
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
> index a1eada56edba..0ac980249941 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence.c
> @@ -222,7 +222,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> struct device_node *np = dev->of_node;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> int i;
> int ret;
> const char *name;
> @@ -238,10 +237,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < phy_count; i++) {
> of_property_read_string_index(np, "phy-names", i, &name);
> phy[i] = devm_phy_get(dev, name);
> @@ -249,17 +244,10 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> ret = PTR_ERR(phy[i]);
> goto err_phy;
> }
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - devm_phy_put(dev, phy[i]);
> - ret = -EINVAL;
> - goto err_phy;
> - }
> }
>
> pcie->phy_count = phy_count;
> pcie->phy = phy;
> - pcie->link = link;
>
> ret = cdns_pcie_enable_phy(pcie);
> if (ret)
> @@ -268,10 +256,8 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> return 0;
>
> err_phy:
> - while (--i >= 0) {
> - device_link_del(link[i]);
> + while (--i >= 0)
> devm_phy_put(dev, phy[i]);
> - }
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
> index b4d51adefea5..4a96e1869e53 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.h
> +++ b/drivers/pci/controller/cadence/pcie-cadence.h
> @@ -260,7 +260,6 @@ struct cdns_plat_pcie_of_data {
> * @is_hpa: indicates if the architecture is HPA
> * @phy_count: number of supported PHY devices
> * @phy: list of pointers to specific PHY control blocks
> - * @link: list of pointers to corresponding device link representations
> * @ops: Platform-specific ops to control various inputs from Cadence PCIe
> * wrapper
> * @cdns_pcie_reg_offsets: Register bank offsets for different SoC
> @@ -276,7 +275,6 @@ struct cdns_pcie {
> bool is_hpa;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> const struct cdns_pcie_ops *ops;
> const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets;
> int max_link_speed;
> diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
> index 3fc889944f02..bf6c5b86bb27 100644
> --- a/drivers/pci/controller/dwc/pci-dra7xx.c
> +++ b/drivers/pci/controller/dwc/pci-dra7xx.c
> @@ -9,7 +9,6 @@
>
> #include <linux/clk.h>
> #include <linux/delay.h>
> -#include <linux/device.h>
> #include <linux/err.h>
> #include <linux/interrupt.h>
> #include <linux/irq.h>
> @@ -678,7 +677,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> int i;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> void __iomem *base;
> struct dw_pcie *pci;
> struct dra7xx_pcie *dra7xx;
> @@ -726,10 +724,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> dra7xx->clk = devm_clk_get_optional(dev, NULL);
> if (IS_ERR(dra7xx->clk))
> return dev_err_probe(dev, PTR_ERR(dra7xx->clk),
> @@ -744,12 +738,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> 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;
> @@ -851,10 +839,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> dra7xx_pcie_disable_phy(dra7xx);
>
> -err_link:
> - while (--i >= 0)
> - device_link_del(link[i]);
> -
> return ret;
> }
>
> diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
> index e9b012a5ea9a..8085c4f61403 100644
> --- a/drivers/pci/controller/dwc/pci-keystone.c
> +++ b/drivers/pci/controller/dwc/pci-keystone.c
> @@ -130,7 +130,6 @@ struct keystone_pcie {
> int num_lanes;
> u32 num_viewport;
> struct phy **phy;
> - struct device_link **link;
> struct device_node *msi_intc_np;
> struct irq_domain *intx_irq_domain;
> struct device_node *np;
> @@ -1130,7 +1129,6 @@ static int ks_pcie_probe(struct platform_device *pdev)
> enum dw_pcie_device_mode mode;
> struct dw_pcie *pci;
> struct keystone_pcie *ks_pcie;
> - struct device_link **link;
> struct gpio_desc *gpiod;
> struct resource *res;
> void __iomem *base;
> @@ -1201,31 +1199,17 @@ static int ks_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, num_lanes, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < num_lanes; i++) {
> snprintf(name, sizeof(name), "pcie-phy%d", i);
> phy[i] = devm_phy_optional_get(dev, name);
> if (IS_ERR(phy[i])) {
> ret = PTR_ERR(phy[i]);
> - goto err_link;
> - }
> -
> - if (!phy[i])
> - continue;
> -
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - ret = -EINVAL;
> - goto err_link;
> + goto err;
> }
> }
>
> ks_pcie->np = np;
> ks_pcie->pci = pci;
> - ks_pcie->link = link;
> ks_pcie->num_lanes = num_lanes;
> ks_pcie->phy = phy;
>
> @@ -1235,7 +1219,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
> ret = PTR_ERR(gpiod);
> if (ret != -EPROBE_DEFER)
> dev_err(dev, "Failed to get reset GPIO\n");
> - goto err_link;
> + goto err;
> }
>
> /* Obtain references to the PHYs */
> @@ -1250,7 +1234,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
>
> if (ret) {
> dev_err(dev, "failed to enable phy\n");
> - goto err_link;
> + goto err;
> }
>
> platform_set_drvdata(pdev, ks_pcie);
> @@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
>
> -err_link:
> - while (--i >= 0 && link[i])
> - device_link_del(link[i]);
> -
> +err:
> return ret;
> }
>
> static void ks_pcie_remove(struct platform_device *pdev)
> {
> struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
> - struct device_link **link = ks_pcie->link;
> - int num_lanes = ks_pcie->num_lanes;
> struct device *dev = &pdev->dev;
>
> pm_runtime_put(dev);
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
> - while (num_lanes--)
> - device_link_del(link[num_lanes]);
> }
>
> static struct platform_driver ks_pcie_driver = {
> --
> 2.34.1
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-11 22:12 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-11 22:12 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
[+cc Felix, author of device link leak fixes]
On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> This is practically a full revert of commit
> 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> and a partial revert of the device link pieces from commits
> dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
Can we split this into three commits (dra7xx, cadence, keystone)?
This combined commit is applied on the pci/controller/misc branch, and
then we have conflicts between that branch and
pci/controller/dwc-dra7xx.
I think if we split this into three separate commits, we can apply the
dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
leak fixes below so we don't clutter the git history with conflict
resolutions or irrelevant commits:
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> The trouble with these commits is that they dereference fields inside
> struct phy from a consumer driver, which will become no longer possible.
>
> Since commit 987351e1ea77 ("phy: core: Add consumer device link
> support") from 2019, the PHY core also adds a device link to order PHY
> provider and consumer suspend/resume operations. All reverted commits
> are from 2017-2018, and what they do should actually be redundant now.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
> ---
> Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
> Cc: Manivannan Sadhasivam <mani@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Vignesh Raghavendra <vigneshr@ti.com>
> Cc: Siddharth Vadapalli <s-vadapalli@ti.com>
>
> v8->v9: none
> v7->v8: only context change - "return 0" became "return ret" for
> cdns_plat_pcie_probe()
> v6->v7: none
> v5->v6: collect tag from Manivannan Sadhasivam
> v3->v5: none
> v2->v3:
> - remove dangling set but unused phy_count local variable in
> cdns_plat_pcie_probe()
> v1->v2:
> - fully remove struct device link **link from struct cdns_pcie and from
> cdns_plat_pcie_probe() error path
> - collect tag from Bjorn Helgaas
> - adjust commit title
> ---
> .../controller/cadence/pcie-cadence-plat.c | 4 ---
> drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
> drivers/pci/controller/cadence/pcie-cadence.h | 2 --
> drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
> drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
> 5 files changed, 5 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> index 8aed8b4c3e11..13edc6be21f5 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> @@ -41,7 +41,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> struct pci_host_bridge *bridge;
> struct cdns_pcie_ep *ep;
> struct cdns_pcie_rc *rc;
> - int phy_count;
> bool is_rc;
> int ret;
>
> @@ -122,9 +121,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> pm_runtime_put_sync(dev);
> pm_runtime_disable(dev);
> cdns_pcie_disable_phy(cdns_plat_pcie->pcie);
> - phy_count = cdns_plat_pcie->pcie->phy_count;
> - while (phy_count--)
> - device_link_del(cdns_plat_pcie->pcie->link[phy_count]);
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
> index a1eada56edba..0ac980249941 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence.c
> @@ -222,7 +222,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> struct device_node *np = dev->of_node;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> int i;
> int ret;
> const char *name;
> @@ -238,10 +237,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < phy_count; i++) {
> of_property_read_string_index(np, "phy-names", i, &name);
> phy[i] = devm_phy_get(dev, name);
> @@ -249,17 +244,10 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> ret = PTR_ERR(phy[i]);
> goto err_phy;
> }
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - devm_phy_put(dev, phy[i]);
> - ret = -EINVAL;
> - goto err_phy;
> - }
> }
>
> pcie->phy_count = phy_count;
> pcie->phy = phy;
> - pcie->link = link;
>
> ret = cdns_pcie_enable_phy(pcie);
> if (ret)
> @@ -268,10 +256,8 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> return 0;
>
> err_phy:
> - while (--i >= 0) {
> - device_link_del(link[i]);
> + while (--i >= 0)
> devm_phy_put(dev, phy[i]);
> - }
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
> index b4d51adefea5..4a96e1869e53 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.h
> +++ b/drivers/pci/controller/cadence/pcie-cadence.h
> @@ -260,7 +260,6 @@ struct cdns_plat_pcie_of_data {
> * @is_hpa: indicates if the architecture is HPA
> * @phy_count: number of supported PHY devices
> * @phy: list of pointers to specific PHY control blocks
> - * @link: list of pointers to corresponding device link representations
> * @ops: Platform-specific ops to control various inputs from Cadence PCIe
> * wrapper
> * @cdns_pcie_reg_offsets: Register bank offsets for different SoC
> @@ -276,7 +275,6 @@ struct cdns_pcie {
> bool is_hpa;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> const struct cdns_pcie_ops *ops;
> const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets;
> int max_link_speed;
> diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
> index 3fc889944f02..bf6c5b86bb27 100644
> --- a/drivers/pci/controller/dwc/pci-dra7xx.c
> +++ b/drivers/pci/controller/dwc/pci-dra7xx.c
> @@ -9,7 +9,6 @@
>
> #include <linux/clk.h>
> #include <linux/delay.h>
> -#include <linux/device.h>
> #include <linux/err.h>
> #include <linux/interrupt.h>
> #include <linux/irq.h>
> @@ -678,7 +677,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> int i;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> void __iomem *base;
> struct dw_pcie *pci;
> struct dra7xx_pcie *dra7xx;
> @@ -726,10 +724,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> dra7xx->clk = devm_clk_get_optional(dev, NULL);
> if (IS_ERR(dra7xx->clk))
> return dev_err_probe(dev, PTR_ERR(dra7xx->clk),
> @@ -744,12 +738,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> 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;
> @@ -851,10 +839,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> dra7xx_pcie_disable_phy(dra7xx);
>
> -err_link:
> - while (--i >= 0)
> - device_link_del(link[i]);
> -
> return ret;
> }
>
> diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
> index e9b012a5ea9a..8085c4f61403 100644
> --- a/drivers/pci/controller/dwc/pci-keystone.c
> +++ b/drivers/pci/controller/dwc/pci-keystone.c
> @@ -130,7 +130,6 @@ struct keystone_pcie {
> int num_lanes;
> u32 num_viewport;
> struct phy **phy;
> - struct device_link **link;
> struct device_node *msi_intc_np;
> struct irq_domain *intx_irq_domain;
> struct device_node *np;
> @@ -1130,7 +1129,6 @@ static int ks_pcie_probe(struct platform_device *pdev)
> enum dw_pcie_device_mode mode;
> struct dw_pcie *pci;
> struct keystone_pcie *ks_pcie;
> - struct device_link **link;
> struct gpio_desc *gpiod;
> struct resource *res;
> void __iomem *base;
> @@ -1201,31 +1199,17 @@ static int ks_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, num_lanes, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < num_lanes; i++) {
> snprintf(name, sizeof(name), "pcie-phy%d", i);
> phy[i] = devm_phy_optional_get(dev, name);
> if (IS_ERR(phy[i])) {
> ret = PTR_ERR(phy[i]);
> - goto err_link;
> - }
> -
> - if (!phy[i])
> - continue;
> -
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - ret = -EINVAL;
> - goto err_link;
> + goto err;
> }
> }
>
> ks_pcie->np = np;
> ks_pcie->pci = pci;
> - ks_pcie->link = link;
> ks_pcie->num_lanes = num_lanes;
> ks_pcie->phy = phy;
>
> @@ -1235,7 +1219,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
> ret = PTR_ERR(gpiod);
> if (ret != -EPROBE_DEFER)
> dev_err(dev, "Failed to get reset GPIO\n");
> - goto err_link;
> + goto err;
> }
>
> /* Obtain references to the PHYs */
> @@ -1250,7 +1234,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
>
> if (ret) {
> dev_err(dev, "failed to enable phy\n");
> - goto err_link;
> + goto err;
> }
>
> platform_set_drvdata(pdev, ks_pcie);
> @@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
>
> -err_link:
> - while (--i >= 0 && link[i])
> - device_link_del(link[i]);
> -
> +err:
> return ret;
> }
>
> static void ks_pcie_remove(struct platform_device *pdev)
> {
> struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
> - struct device_link **link = ks_pcie->link;
> - int num_lanes = ks_pcie->num_lanes;
> struct device *dev = &pdev->dev;
>
> pm_runtime_put(dev);
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
> - while (num_lanes--)
> - device_link_del(link[num_lanes]);
> }
>
> static struct platform_driver ks_pcie_driver = {
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-11 22:12 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-11 22:12 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
[+cc Felix, author of device link leak fixes]
On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> This is practically a full revert of commit
> 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> and a partial revert of the device link pieces from commits
> dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
Can we split this into three commits (dra7xx, cadence, keystone)?
This combined commit is applied on the pci/controller/misc branch, and
then we have conflicts between that branch and
pci/controller/dwc-dra7xx.
I think if we split this into three separate commits, we can apply the
dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
leak fixes below so we don't clutter the git history with conflict
resolutions or irrelevant commits:
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> The trouble with these commits is that they dereference fields inside
> struct phy from a consumer driver, which will become no longer possible.
>
> Since commit 987351e1ea77 ("phy: core: Add consumer device link
> support") from 2019, the PHY core also adds a device link to order PHY
> provider and consumer suspend/resume operations. All reverted commits
> are from 2017-2018, and what they do should actually be redundant now.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
> ---
> Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
> Cc: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
> Cc: Manivannan Sadhasivam <mani@kernel.org>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Vignesh Raghavendra <vigneshr@ti.com>
> Cc: Siddharth Vadapalli <s-vadapalli@ti.com>
>
> v8->v9: none
> v7->v8: only context change - "return 0" became "return ret" for
> cdns_plat_pcie_probe()
> v6->v7: none
> v5->v6: collect tag from Manivannan Sadhasivam
> v3->v5: none
> v2->v3:
> - remove dangling set but unused phy_count local variable in
> cdns_plat_pcie_probe()
> v1->v2:
> - fully remove struct device link **link from struct cdns_pcie and from
> cdns_plat_pcie_probe() error path
> - collect tag from Bjorn Helgaas
> - adjust commit title
> ---
> .../controller/cadence/pcie-cadence-plat.c | 4 ---
> drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
> drivers/pci/controller/cadence/pcie-cadence.h | 2 --
> drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
> drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
> 5 files changed, 5 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-plat.c b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> index 8aed8b4c3e11..13edc6be21f5 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-plat.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-plat.c
> @@ -41,7 +41,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> struct pci_host_bridge *bridge;
> struct cdns_pcie_ep *ep;
> struct cdns_pcie_rc *rc;
> - int phy_count;
> bool is_rc;
> int ret;
>
> @@ -122,9 +121,6 @@ static int cdns_plat_pcie_probe(struct platform_device *pdev)
> pm_runtime_put_sync(dev);
> pm_runtime_disable(dev);
> cdns_pcie_disable_phy(cdns_plat_pcie->pcie);
> - phy_count = cdns_plat_pcie->pcie->phy_count;
> - while (phy_count--)
> - device_link_del(cdns_plat_pcie->pcie->link[phy_count]);
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
> index a1eada56edba..0ac980249941 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence.c
> @@ -222,7 +222,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> struct device_node *np = dev->of_node;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> int i;
> int ret;
> const char *name;
> @@ -238,10 +237,6 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < phy_count; i++) {
> of_property_read_string_index(np, "phy-names", i, &name);
> phy[i] = devm_phy_get(dev, name);
> @@ -249,17 +244,10 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> ret = PTR_ERR(phy[i]);
> goto err_phy;
> }
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - devm_phy_put(dev, phy[i]);
> - ret = -EINVAL;
> - goto err_phy;
> - }
> }
>
> pcie->phy_count = phy_count;
> pcie->phy = phy;
> - pcie->link = link;
>
> ret = cdns_pcie_enable_phy(pcie);
> if (ret)
> @@ -268,10 +256,8 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
> return 0;
>
> err_phy:
> - while (--i >= 0) {
> - device_link_del(link[i]);
> + while (--i >= 0)
> devm_phy_put(dev, phy[i]);
> - }
>
> return ret;
> }
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
> index b4d51adefea5..4a96e1869e53 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.h
> +++ b/drivers/pci/controller/cadence/pcie-cadence.h
> @@ -260,7 +260,6 @@ struct cdns_plat_pcie_of_data {
> * @is_hpa: indicates if the architecture is HPA
> * @phy_count: number of supported PHY devices
> * @phy: list of pointers to specific PHY control blocks
> - * @link: list of pointers to corresponding device link representations
> * @ops: Platform-specific ops to control various inputs from Cadence PCIe
> * wrapper
> * @cdns_pcie_reg_offsets: Register bank offsets for different SoC
> @@ -276,7 +275,6 @@ struct cdns_pcie {
> bool is_hpa;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> const struct cdns_pcie_ops *ops;
> const struct cdns_plat_pcie_of_data *cdns_pcie_reg_offsets;
> int max_link_speed;
> diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
> index 3fc889944f02..bf6c5b86bb27 100644
> --- a/drivers/pci/controller/dwc/pci-dra7xx.c
> +++ b/drivers/pci/controller/dwc/pci-dra7xx.c
> @@ -9,7 +9,6 @@
>
> #include <linux/clk.h>
> #include <linux/delay.h>
> -#include <linux/device.h>
> #include <linux/err.h>
> #include <linux/interrupt.h>
> #include <linux/irq.h>
> @@ -678,7 +677,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> int i;
> int phy_count;
> struct phy **phy;
> - struct device_link **link;
> void __iomem *base;
> struct dw_pcie *pci;
> struct dra7xx_pcie *dra7xx;
> @@ -726,10 +724,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, phy_count, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> dra7xx->clk = devm_clk_get_optional(dev, NULL);
> if (IS_ERR(dra7xx->clk))
> return dev_err_probe(dev, PTR_ERR(dra7xx->clk),
> @@ -744,12 +738,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> 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;
> @@ -851,10 +839,6 @@ static int dra7xx_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> dra7xx_pcie_disable_phy(dra7xx);
>
> -err_link:
> - while (--i >= 0)
> - device_link_del(link[i]);
> -
> return ret;
> }
>
> diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
> index e9b012a5ea9a..8085c4f61403 100644
> --- a/drivers/pci/controller/dwc/pci-keystone.c
> +++ b/drivers/pci/controller/dwc/pci-keystone.c
> @@ -130,7 +130,6 @@ struct keystone_pcie {
> int num_lanes;
> u32 num_viewport;
> struct phy **phy;
> - struct device_link **link;
> struct device_node *msi_intc_np;
> struct irq_domain *intx_irq_domain;
> struct device_node *np;
> @@ -1130,7 +1129,6 @@ static int ks_pcie_probe(struct platform_device *pdev)
> enum dw_pcie_device_mode mode;
> struct dw_pcie *pci;
> struct keystone_pcie *ks_pcie;
> - struct device_link **link;
> struct gpio_desc *gpiod;
> struct resource *res;
> void __iomem *base;
> @@ -1201,31 +1199,17 @@ static int ks_pcie_probe(struct platform_device *pdev)
> if (!phy)
> return -ENOMEM;
>
> - link = devm_kcalloc(dev, num_lanes, sizeof(*link), GFP_KERNEL);
> - if (!link)
> - return -ENOMEM;
> -
> for (i = 0; i < num_lanes; i++) {
> snprintf(name, sizeof(name), "pcie-phy%d", i);
> phy[i] = devm_phy_optional_get(dev, name);
> if (IS_ERR(phy[i])) {
> ret = PTR_ERR(phy[i]);
> - goto err_link;
> - }
> -
> - if (!phy[i])
> - continue;
> -
> - link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
> - if (!link[i]) {
> - ret = -EINVAL;
> - goto err_link;
> + goto err;
> }
> }
>
> ks_pcie->np = np;
> ks_pcie->pci = pci;
> - ks_pcie->link = link;
> ks_pcie->num_lanes = num_lanes;
> ks_pcie->phy = phy;
>
> @@ -1235,7 +1219,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
> ret = PTR_ERR(gpiod);
> if (ret != -EPROBE_DEFER)
> dev_err(dev, "Failed to get reset GPIO\n");
> - goto err_link;
> + goto err;
> }
>
> /* Obtain references to the PHYs */
> @@ -1250,7 +1234,7 @@ static int ks_pcie_probe(struct platform_device *pdev)
>
> if (ret) {
> dev_err(dev, "failed to enable phy\n");
> - goto err_link;
> + goto err;
> }
>
> platform_set_drvdata(pdev, ks_pcie);
> @@ -1337,25 +1321,18 @@ static int ks_pcie_probe(struct platform_device *pdev)
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
>
> -err_link:
> - while (--i >= 0 && link[i])
> - device_link_del(link[i]);
> -
> +err:
> return ret;
> }
>
> static void ks_pcie_remove(struct platform_device *pdev)
> {
> struct keystone_pcie *ks_pcie = platform_get_drvdata(pdev);
> - struct device_link **link = ks_pcie->link;
> - int num_lanes = ks_pcie->num_lanes;
> struct device *dev = &pdev->dev;
>
> pm_runtime_put(dev);
> pm_runtime_disable(dev);
> ks_pcie_disable_phy(ks_pcie);
> - while (num_lanes--)
> - device_link_del(link[num_lanes]);
> }
>
> static struct platform_driver ks_pcie_driver = {
> --
> 2.34.1
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-09-11 22:12 ` Bjorn Helgaas
(?)
@ 2026-09-12 11:39 ` Vladimir Oltean
-1 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 11:39 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
Hi Bjorn,
On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> [+cc Felix, author of device link leak fixes]
>
> On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > This is practically a full revert of commit
> > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > and a partial revert of the device link pieces from commits
> > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
>
> Can we split this into three commits (dra7xx, cadence, keystone)?
> This combined commit is applied on the pci/controller/misc branch, and
> then we have conflicts between that branch and
> pci/controller/dwc-dra7xx.
>
> I think if we split this into three separate commits, we can apply the
> dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> leak fixes below so we don't clutter the git history with conflict
> resolutions or irrelevant commits:
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
Isn't this patch already merged in pci/next as
https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
?
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 11:39 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 11:39 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
Hi Bjorn,
On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> [+cc Felix, author of device link leak fixes]
>
> On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > This is practically a full revert of commit
> > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > and a partial revert of the device link pieces from commits
> > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
>
> Can we split this into three commits (dra7xx, cadence, keystone)?
> This combined commit is applied on the pci/controller/misc branch, and
> then we have conflicts between that branch and
> pci/controller/dwc-dra7xx.
>
> I think if we split this into three separate commits, we can apply the
> dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> leak fixes below so we don't clutter the git history with conflict
> resolutions or irrelevant commits:
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
Isn't this patch already merged in pci/next as
https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
?
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 11:39 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 11:39 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
Hi Bjorn,
On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> [+cc Felix, author of device link leak fixes]
>
> On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > This is practically a full revert of commit
> > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > and a partial revert of the device link pieces from commits
> > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
>
> Can we split this into three commits (dra7xx, cadence, keystone)?
> This combined commit is applied on the pci/controller/misc branch, and
> then we have conflicts between that branch and
> pci/controller/dwc-dra7xx.
>
> I think if we split this into three separate commits, we can apply the
> dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> leak fixes below so we don't clutter the git history with conflict
> resolutions or irrelevant commits:
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
>
> https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
Isn't this patch already merged in pci/next as
https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
?
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-09-12 11:39 ` Vladimir Oltean
(?)
@ 2026-09-12 14:02 ` Bjorn Helgaas
-1 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 14:02 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> Hi Bjorn,
>
> On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > [+cc Felix, author of device link leak fixes]
> >
> > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > This is practically a full revert of commit
> > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > and a partial revert of the device link pieces from commits
> > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> >
> > Can we split this into three commits (dra7xx, cadence, keystone)?
> > This combined commit is applied on the pci/controller/misc branch, and
> > then we have conflicts between that branch and
> > pci/controller/dwc-dra7xx.
> >
> > I think if we split this into three separate commits, we can apply the
> > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > leak fixes below so we don't clutter the git history with conflict
> > resolutions or irrelevant commits:
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
>
> Isn't this patch already merged in pci/next as
> https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> ?
Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
to revision. IMO the git history will be much cleaner. The end
result will be the same but we won't have conflict resolutions and
fixes to code that was removed.
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 14:02 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 14:02 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> Hi Bjorn,
>
> On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > [+cc Felix, author of device link leak fixes]
> >
> > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > This is practically a full revert of commit
> > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > and a partial revert of the device link pieces from commits
> > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> >
> > Can we split this into three commits (dra7xx, cadence, keystone)?
> > This combined commit is applied on the pci/controller/misc branch, and
> > then we have conflicts between that branch and
> > pci/controller/dwc-dra7xx.
> >
> > I think if we split this into three separate commits, we can apply the
> > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > leak fixes below so we don't clutter the git history with conflict
> > resolutions or irrelevant commits:
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
>
> Isn't this patch already merged in pci/next as
> https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> ?
Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
to revision. IMO the git history will be much cleaner. The end
result will be the same but we won't have conflict resolutions and
fixes to code that was removed.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 14:02 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 14:02 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Vignesh Raghavendra,
Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> Hi Bjorn,
>
> On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > [+cc Felix, author of device link leak fixes]
> >
> > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > This is practically a full revert of commit
> > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > and a partial revert of the device link pieces from commits
> > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> >
> > Can we split this into three commits (dra7xx, cadence, keystone)?
> > This combined commit is applied on the pci/controller/misc branch, and
> > then we have conflicts between that branch and
> > pci/controller/dwc-dra7xx.
> >
> > I think if we split this into three separate commits, we can apply the
> > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > leak fixes below so we don't clutter the git history with conflict
> > resolutions or irrelevant commits:
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> >
> > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
>
> Isn't this patch already merged in pci/next as
> https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> ?
Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
to revision. IMO the git history will be much cleaner. The end
result will be the same but we won't have conflict resolutions and
fixes to code that was removed.
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-09-12 14:02 ` Bjorn Helgaas
(?)
@ 2026-09-12 15:23 ` Vladimir Oltean
-1 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 15:23 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > Hi Bjorn,
> >
> > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > [+cc Felix, author of device link leak fixes]
> > >
> > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > This is practically a full revert of commit
> > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > and a partial revert of the device link pieces from commits
> > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > >
> > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > This combined commit is applied on the pci/controller/misc branch, and
> > > then we have conflicts between that branch and
> > > pci/controller/dwc-dra7xx.
> > >
> > > I think if we split this into three separate commits, we can apply the
> > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > leak fixes below so we don't clutter the git history with conflict
> > > resolutions or irrelevant commits:
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> >
> > Isn't this patch already merged in pci/next as
> > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > ?
>
> Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> to revision. IMO the git history will be much cleaner. The end
> result will be the same but we won't have conflict resolutions and
> fixes to code that was removed.
OK, and what is your request from me? Submit 3 patches as a replacement
to this one against which tree?
FWIW I didn't know the PCI next branch is not stable. It is, for other
subsystems.
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 15:23 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 15:23 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > Hi Bjorn,
> >
> > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > [+cc Felix, author of device link leak fixes]
> > >
> > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > This is practically a full revert of commit
> > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > and a partial revert of the device link pieces from commits
> > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > >
> > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > This combined commit is applied on the pci/controller/misc branch, and
> > > then we have conflicts between that branch and
> > > pci/controller/dwc-dra7xx.
> > >
> > > I think if we split this into three separate commits, we can apply the
> > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > leak fixes below so we don't clutter the git history with conflict
> > > resolutions or irrelevant commits:
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> >
> > Isn't this patch already merged in pci/next as
> > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > ?
>
> Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> to revision. IMO the git history will be much cleaner. The end
> result will be the same but we won't have conflict resolutions and
> fixes to code that was removed.
OK, and what is your request from me? Submit 3 patches as a replacement
to this one against which tree?
FWIW I didn't know the PCI next branch is not stable. It is, for other
subsystems.
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 15:23 ` Vladimir Oltean
0 siblings, 0 replies; 33+ messages in thread
From: Vladimir Oltean @ 2026-09-12 15:23 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > Hi Bjorn,
> >
> > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > [+cc Felix, author of device link leak fixes]
> > >
> > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > This is practically a full revert of commit
> > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > and a partial revert of the device link pieces from commits
> > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > >
> > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > This combined commit is applied on the pci/controller/misc branch, and
> > > then we have conflicts between that branch and
> > > pci/controller/dwc-dra7xx.
> > >
> > > I think if we split this into three separate commits, we can apply the
> > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > leak fixes below so we don't clutter the git history with conflict
> > > resolutions or irrelevant commits:
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > >
> > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> >
> > Isn't this patch already merged in pci/next as
> > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > ?
>
> Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> to revision. IMO the git history will be much cleaner. The end
> result will be the same but we won't have conflict resolutions and
> fixes to code that was removed.
OK, and what is your request from me? Submit 3 patches as a replacement
to this one against which tree?
FWIW I didn't know the PCI next branch is not stable. It is, for other
subsystems.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
2026-09-12 15:23 ` Vladimir Oltean
(?)
@ 2026-09-12 15:28 ` Bjorn Helgaas
-1 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 15:28 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 06:23:11PM +0300, Vladimir Oltean wrote:
> On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> > On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > > Hi Bjorn,
> > >
> > > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > > [+cc Felix, author of device link leak fixes]
> > > >
> > > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > > This is practically a full revert of commit
> > > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > > and a partial revert of the device link pieces from commits
> > > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > > >
> > > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > > This combined commit is applied on the pci/controller/misc branch, and
> > > > then we have conflicts between that branch and
> > > > pci/controller/dwc-dra7xx.
> > > >
> > > > I think if we split this into three separate commits, we can apply the
> > > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > > leak fixes below so we don't clutter the git history with conflict
> > > > resolutions or irrelevant commits:
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> > >
> > > Isn't this patch already merged in pci/next as
> > > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > > ?
> >
> > Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> > to revision. IMO the git history will be much cleaner. The end
> > result will be the same but we won't have conflict resolutions and
> > fixes to code that was removed.
>
> OK, and what is your request from me? Submit 3 patches as a replacement
> to this one against which tree?
Simplest would be three patches based on v7.3-rc1.
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 15:28 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 15:28 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 06:23:11PM +0300, Vladimir Oltean wrote:
> On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> > On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > > Hi Bjorn,
> > >
> > > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > > [+cc Felix, author of device link leak fixes]
> > > >
> > > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > > This is practically a full revert of commit
> > > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > > and a partial revert of the device link pieces from commits
> > > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > > >
> > > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > > This combined commit is applied on the pci/controller/misc branch, and
> > > > then we have conflicts between that branch and
> > > > pci/controller/dwc-dra7xx.
> > > >
> > > > I think if we split this into three separate commits, we can apply the
> > > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > > leak fixes below so we don't clutter the git history with conflict
> > > > resolutions or irrelevant commits:
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> > >
> > > Isn't this patch already merged in pci/next as
> > > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > > ?
> >
> > Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> > to revision. IMO the git history will be much cleaner. The end
> > result will be the same but we won't have conflict resolutions and
> > fixes to code that was removed.
>
> OK, and what is your request from me? Submit 3 patches as a replacement
> to this one against which tree?
Simplest would be three patches based on v7.3-rc1.
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH v9 3/3] PCI: Remove device links to PHY
@ 2026-09-12 15:28 ` Bjorn Helgaas
0 siblings, 0 replies; 33+ messages in thread
From: Bjorn Helgaas @ 2026-09-12 15:28 UTC (permalink / raw)
To: Vladimir Oltean
Cc: linux-pci, linux-kernel, linux-omap, linux-arm-kernel,
linux-rockchip, linux-arm-msm, linux-riscv, spacemit, linux-tegra,
Bjorn Helgaas, Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring,
Vignesh Raghavendra, Siddharth Vadapalli, Felix Gu
On Sat, Sep 12, 2026 at 06:23:11PM +0300, Vladimir Oltean wrote:
> On Sat, Sep 12, 2026 at 09:02:07AM -0500, Bjorn Helgaas wrote:
> > On Sat, Sep 12, 2026 at 02:39:44PM +0300, Vladimir Oltean wrote:
> > > Hi Bjorn,
> > >
> > > On Fri, Sep 11, 2026 at 05:12:09PM -0500, Bjorn Helgaas wrote:
> > > > [+cc Felix, author of device link leak fixes]
> > > >
> > > > On Mon, Aug 10, 2026 at 03:43:15PM +0300, Vladimir Oltean wrote:
> > > > > This is practically a full revert of commit
> > > > > 7a4db656a635 ("PCI: dra7xx: Create functional dependency between PCIe and PHY")
> > > > > and a partial revert of the device link pieces from commits
> > > > > dfb80534692d ("PCI: cadence: Add generic PHY support to host and EP drivers")
> > > > > 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
> > > >
> > > > Can we split this into three commits (dra7xx, cadence, keystone)?
> > > > This combined commit is applied on the pci/controller/misc branch, and
> > > > then we have conflicts between that branch and
> > > > pci/controller/dwc-dra7xx.
> > > >
> > > > I think if we split this into three separate commits, we can apply the
> > > > dra7xx one on pci/controller/dwc-dra7xx and drop Felix's device link
> > > > leak fixes below so we don't clutter the git history with conflict
> > > > resolutions or irrelevant commits:
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=2b9a036b568c ("PCI: dra7xx: Fix device link leak when devm_phy_get() fails")
> > > >
> > > > https://git.kernel.org/cgit/linux/kernel/git/pci/pci.git/commit/?id=bdfdf654b4b2 ("PCI: dra7xx: Fix device links leak when dra7xx_pcie_enable_phy() fails")
> > >
> > > Isn't this patch already merged in pci/next as
> > > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?id=9a9d18547ddc97a73d5d90cff4d5aef90bd8c15d
> > > ?
> >
> > Yes, it is, but until Linus pulls it, the PCI tree is a draft subject
> > to revision. IMO the git history will be much cleaner. The end
> > result will be the same but we won't have conflict resolutions and
> > fixes to code that was removed.
>
> OK, and what is your request from me? Submit 3 patches as a replacement
> to this one against which tree?
Simplest would be three patches based on v7.3-rc1.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 33+ messages in thread