From: Vladimir Oltean <vladimir.oltean@nxp.com>
To: linux-phy@lists.infradead.org
Cc: "Vinod Koul" <vkoul@kernel.org>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, linux-can@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-ide@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-pci@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
linux-riscv@lists.infradead.org,
linux-rockchip@lists.infradead.org,
linux-samsung-soc@vger.kernel.org, linux-sunxi@lists.linux.dev,
linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org,
netdev@vger.kernel.org, spacemit@lists.linux.dev,
UNGLinuxDriver@microchip.com,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
"Siddharth Vadapalli" <s-vadapalli@ti.com>
Subject: [PATCH phy-next 08/22] PCI: remove device links to PHY
Date: Wed, 4 Mar 2026 19:57:21 +0200 [thread overview]
Message-ID: <20260304175735.2660419-9-vladimir.oltean@nxp.com> (raw)
In-Reply-To: <20260304175735.2660419-1-vladimir.oltean@nxp.com>
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>
---
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>
---
drivers/pci/controller/cadence/pcie-cadence.c | 16 +---------
drivers/pci/controller/dwc/pci-dra7xx.c | 16 ----------
drivers/pci/controller/dwc/pci-keystone.c | 31 +++----------------
3 files changed, 5 insertions(+), 58 deletions(-)
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/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
index d5d26229063f..b91ab37845c9 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>
@@ -683,7 +682,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;
@@ -731,10 +729,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),
@@ -749,12 +743,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;
@@ -856,10 +844,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 642e4c45eefc..07698c645e02 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;
@@ -1118,7 +1117,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;
@@ -1189,31 +1187,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;
@@ -1223,7 +1207,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 */
@@ -1238,7 +1222,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);
@@ -1325,25 +1309,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.43.0
next prev parent reply other threads:[~2026-03-04 18:00 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-04 17:57 [PATCH phy-next 00/22] Split Generic PHY consumer and provider API Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 01/22] ata: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-03-04 20:14 ` Damien Le Moal
2026-03-04 17:57 ` [PATCH phy-next 02/22] PCI: add missing headers transitively included by <linux/phy/phy.h> Vladimir Oltean
2026-03-04 22:24 ` Bjorn Helgaas
2026-03-04 22:34 ` Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 03/22] usb: " Vladimir Oltean
2026-03-05 2:43 ` Thinh Nguyen
2026-03-04 17:57 ` [PATCH phy-next 04/22] drm: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 05/22] phy: " Vladimir Oltean
2026-03-05 7:45 ` Geert Uytterhoeven
2026-03-05 10:02 ` André Draszik
2026-03-04 17:57 ` [PATCH phy-next 06/22] phy: spacemit: include missing <linux/phy/phy.h> Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 07/22] net: lan969x: include missing <linux/of.h> Vladimir Oltean
2026-03-06 9:56 ` Daniel Machon
2026-03-04 17:57 ` Vladimir Oltean [this message]
2026-03-04 22:28 ` [PATCH phy-next 08/22] PCI: remove device links to PHY Bjorn Helgaas
2026-03-04 17:57 ` [PATCH phy-next 09/22] ufs: exynos: stop poking into struct phy guts Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 10/22] drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 11/22] drm/msm/dp: remove debugging prints with internal struct phy state Vladimir Oltean
2026-03-04 23:53 ` Dmitry Baryshkov
2026-03-04 17:57 ` [PATCH phy-next 12/22] phy: move provider API out of public <linux/phy/phy.h> Vladimir Oltean
2026-03-04 23:54 ` Dmitry Baryshkov
2026-03-05 8:28 ` Geert Uytterhoeven
2026-03-06 12:51 ` Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 13/22] phy: introduce phy_get_max_link_rate() helper for consumers Vladimir Oltean
2026-03-05 7:47 ` Geert Uytterhoeven
2026-03-06 12:50 ` Vladimir Oltean
2026-03-05 9:36 ` Markus Schneider-Pargmann
2026-03-05 11:54 ` Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 14/22] drm/rockchip: dsi: include PHY provider header Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 15/22] drm: bridge: cdns-mhdp8546: use consumer API for getting PHY bus width Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 16/22] media: sunxi: a83-mips-csi2: include PHY provider header Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 17/22] net: renesas: rswitch: " Vladimir Oltean
2026-03-05 8:29 ` Geert Uytterhoeven
2026-03-04 17:57 ` [PATCH phy-next 18/22] pinctrl: tegra-xusb: " Vladimir Oltean
2026-03-05 12:43 ` Linus Walleij
2026-03-05 12:44 ` Linus Walleij
2026-03-05 12:47 ` Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 19/22] power: supply: cpcap-charger: include missing <linux/property.h> Vladimir Oltean
2026-03-05 9:52 ` Sebastian Reichel
2026-03-04 17:57 ` [PATCH phy-next 20/22] phy: include PHY provider header Vladimir Oltean
2026-03-04 23:56 ` Dmitry Baryshkov
2026-03-05 3:22 ` Shawn Lin
2026-03-06 13:06 ` Vladimir Oltean
2026-03-04 17:57 ` [PATCH phy-next 21/22] phy: remove temporary provider compatibility from consumer header Vladimir Oltean
2026-03-04 23:56 ` Dmitry Baryshkov
2026-03-04 17:57 ` [PATCH phy-next 22/22] MAINTAINERS: add regex for linux-phy Vladimir Oltean
2026-03-05 8:39 ` Konrad Dybcio
2026-03-05 8:51 ` Vladimir Oltean
2026-03-05 9:11 ` Konrad Dybcio
2026-03-05 9:13 ` Vladimir Oltean
2026-03-05 9:15 ` Konrad Dybcio
2026-03-05 9:30 ` Joe Perches
2026-03-05 11:43 ` Vladimir Oltean
2026-03-05 12:15 ` Krzysztof Wilczyński
2026-03-05 12:29 ` Krzysztof Wilczyński
2026-03-05 12:39 ` Vladimir Oltean
2026-03-05 12:44 ` Russell King (Oracle)
2026-03-05 13:01 ` Krzysztof Wilczyński
2026-03-05 12:38 ` Vladimir Oltean
2026-03-05 13:06 ` Krzysztof Wilczyński
2026-03-05 13:11 ` Vladimir Oltean
2026-03-05 15:35 ` Joe Perches
2026-03-05 15:39 ` Vladimir Oltean
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260304175735.2660419-9-vladimir.oltean@nxp.com \
--to=vladimir.oltean@nxp.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=bhelgaas@google.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=kwilczynski@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=netdev@vger.kernel.org \
--cc=robh@kernel.org \
--cc=s-vadapalli@ti.com \
--cc=spacemit@lists.linux.dev \
--cc=vigneshr@ti.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox