* [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies
@ 2026-08-05 10:50 Aksh Garg
2026-08-05 11:07 ` sashiko-bot
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Aksh Garg @ 2026-08-05 10:50 UTC (permalink / raw)
To: linux-pci, lpieralisi, kwilczynski, mani, robh, bhelgaas, mpillai,
rdunlap, 18255117159, unicorn_wang
Cc: linux-kernel, s-vadapalli, danishanwar, a-garg7
The cadence-plat driver has a single platform driver that can be built-in
or a loadable module, but it calls two separate backend drivers depending
on whether it is a host or endpoint.
If one of the mode is build as built-in and another as loadable module,
we end up with a situation where the built-in pcie-cadence-plat driver
tries to call the modular host or endpoint driver, which causes a link
failure:
ld: error: undefined symbol: cdns_pcie_ep_setup
>>> referenced by pcie-cadence-plat.c
>>> drivers/pci/controller/cadence/pcie-cadence-plat.o:(cdns_plat_pcie_probe) in archive vmlinux.a
ld: error: undefined symbol: cdns_pcie_host_setup
>>> referenced by pcie-cadence-plat.c
>>> drivers/pci/controller/cadence/pcie-cadence-plat.o:(cdns_plat_pcie_probe) in archive vmlinux.a
Fix this by moving the 'select' of PCIE_CADENCE_HOST and PCIE_CADENCE_EP
from the individual PLAT_HOST/PLAT_EP symbols into the common PCIE_CADENCE_PLAT
symbol, conditioned on which backends (modes) are enabled.
Fixes: 611627a4e5e4 ("PCI: cadence: Add module support for platform controller driver")
Reported-by: Randy Dunlap <rdunlap@infradead.org>
Closes: https://lore.kernel.org/linux-next/589ea512-93c6-4e1c-83d7-ba45a0b35843@infradead.org/
Signed-off-by: Aksh Garg <a-garg7@ti.com>
---
drivers/pci/controller/cadence/Kconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controller/cadence/Kconfig
index 9e651d545973..fd704dec47dd 100644
--- a/drivers/pci/controller/cadence/Kconfig
+++ b/drivers/pci/controller/cadence/Kconfig
@@ -20,11 +20,12 @@ config PCIE_CADENCE_EP
config PCIE_CADENCE_PLAT
tristate
+ select PCIE_CADENCE_HOST if PCIE_CADENCE_PLAT_HOST != n
+ select PCIE_CADENCE_EP if PCIE_CADENCE_PLAT_EP != n
config PCIE_CADENCE_PLAT_HOST
tristate "Cadence platform PCIe controller (host mode)"
depends on OF
- select PCIE_CADENCE_HOST
select PCIE_CADENCE_PLAT
help
Say Y here if you want to support the Cadence PCIe platform controller in
@@ -35,7 +36,6 @@ config PCIE_CADENCE_PLAT_EP
tristate "Cadence platform PCIe controller (endpoint mode)"
depends on OF
depends on PCI_ENDPOINT
- select PCIE_CADENCE_EP
select PCIE_CADENCE_PLAT
help
Say Y here if you want to support the Cadence PCIe platform controller in
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies
2026-08-05 10:50 [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies Aksh Garg
@ 2026-08-05 11:07 ` sashiko-bot
2026-08-05 17:29 ` Randy Dunlap
2026-08-06 16:47 ` Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-05 11:07 UTC (permalink / raw)
To: Aksh Garg; +Cc: linux-pci
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Invalid drvdata cast in cdns_plat_pcie_shutdown causes out-of-bounds access and kernel panic.
- [High] Probe error paths unconditionally return 0, masquerading initialization failures as success.
--
--- Patch [1]: [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies ---
commit f31c2dc6bdd9c13d43549cb7b505f8e0289ac1c5
Author: Aksh Garg <a-garg7@ti.com>
PCI: cadence-plat: Fix host/endpoint dependencies
The cadence-plat driver has a single platform driver that can be built-in
or a loadable module, but it calls two separate backend drivers depending
on whether it is a host or endpoint. Fix this by moving the 'select' of
PCIE_CADENCE_HOST and PCIE_CADENCE_EP into the common PCIE_CADENCE_PLAT
symbol.
Link: https://lore.kernel.org/linux-next/589ea512-93c6-4e1c-83d7-ba45a0b35843@infradead.org/
> diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controller/cadence/Kconfig
> index 9e651d5459735..fd704dec47dda 100644
> --- a/drivers/pci/controller/cadence/Kconfig
> +++ b/drivers/pci/controller/cadence/Kconfig
[ ... ]
[Severity: High]
This is a pre-existing issue, but I noticed a potential problem in
drivers/pci/controller/cadence/pcie-cadence-plat.c:cdns_plat_pcie_shutdown().
The function casts the drvdata to struct cdns_pcie:
drivers/pci/controller/cadence/pcie-cadence-plat.c:cdns_plat_pcie_shutdown() {
struct cdns_pcie *pcie = dev_get_drvdata(dev);
...
cdns_pcie_disable_phy(pcie);
}
However, the probe function allocates a smaller wrapper struct and sets it
as drvdata:
drivers/pci/controller/cadence/pcie-cadence-plat.c:cdns_plat_pcie_probe() {
cdns_plat_pcie = devm_kzalloc(dev, sizeof(*cdns_plat_pcie), GFP_KERNEL);
...
platform_set_drvdata(pdev, cdns_plat_pcie);
}
Since cdns_pcie_disable_phy() attempts to read pcie->phy_count and iterates
over pcie->phy[i], could this out-of-bounds access cause a kernel panic
during shutdown?
[Severity: High]
This isn't a bug introduced by this patch, but there appears to be a problem
with the error handling in the probe function:
drivers/pci/controller/cadence/pcie-cadence-plat.c:cdns_plat_pcie_probe() {
...
err_init:
err_get_sync:
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 0;
}
Does this unconditionally return 0 on failure paths?
It looks like the error code is dropped, which would masquerade probe
failures as successes. This could leave the driver bound while its resources
are actually disabled, potentially leading to crashes on unbind or shutdown.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260805105014.3952686-1-a-garg7@ti.com?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies
2026-08-05 10:50 [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies Aksh Garg
2026-08-05 11:07 ` sashiko-bot
@ 2026-08-05 17:29 ` Randy Dunlap
2026-08-06 16:47 ` Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: Randy Dunlap @ 2026-08-05 17:29 UTC (permalink / raw)
To: Aksh Garg, linux-pci, lpieralisi, kwilczynski, mani, robh,
bhelgaas, mpillai, 18255117159, unicorn_wang
Cc: linux-kernel, s-vadapalli, danishanwar
On 8/5/26 3:50 AM, Aksh Garg wrote:
> The cadence-plat driver has a single platform driver that can be built-in
> or a loadable module, but it calls two separate backend drivers depending
> on whether it is a host or endpoint.
>
> If one of the mode is build as built-in and another as loadable module,
> we end up with a situation where the built-in pcie-cadence-plat driver
> tries to call the modular host or endpoint driver, which causes a link
> failure:
>
> ld: error: undefined symbol: cdns_pcie_ep_setup
> >>> referenced by pcie-cadence-plat.c
> >>> drivers/pci/controller/cadence/pcie-cadence-plat.o:(cdns_plat_pcie_probe) in archive vmlinux.a
>
> ld: error: undefined symbol: cdns_pcie_host_setup
> >>> referenced by pcie-cadence-plat.c
> >>> drivers/pci/controller/cadence/pcie-cadence-plat.o:(cdns_plat_pcie_probe) in archive vmlinux.a
>
> Fix this by moving the 'select' of PCIE_CADENCE_HOST and PCIE_CADENCE_EP
> from the individual PLAT_HOST/PLAT_EP symbols into the common PCIE_CADENCE_PLAT
> symbol, conditioned on which backends (modes) are enabled.
>
> Fixes: 611627a4e5e4 ("PCI: cadence: Add module support for platform controller driver")
> Reported-by: Randy Dunlap <rdunlap@infradead.org>
> Closes: https://lore.kernel.org/linux-next/589ea512-93c6-4e1c-83d7-ba45a0b35843@infradead.org/
> Signed-off-by: Aksh Garg <a-garg7@ti.com>
Tested-by: Randy Dunlap <rdunlap@infradead.org>
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Thanks.
> ---
> drivers/pci/controller/cadence/Kconfig | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controller/cadence/Kconfig
> index 9e651d545973..fd704dec47dd 100644
> --- a/drivers/pci/controller/cadence/Kconfig
> +++ b/drivers/pci/controller/cadence/Kconfig
> @@ -20,11 +20,12 @@ config PCIE_CADENCE_EP
>
> config PCIE_CADENCE_PLAT
> tristate
> + select PCIE_CADENCE_HOST if PCIE_CADENCE_PLAT_HOST != n
> + select PCIE_CADENCE_EP if PCIE_CADENCE_PLAT_EP != n
>
> config PCIE_CADENCE_PLAT_HOST
> tristate "Cadence platform PCIe controller (host mode)"
> depends on OF
> - select PCIE_CADENCE_HOST
> select PCIE_CADENCE_PLAT
> help
> Say Y here if you want to support the Cadence PCIe platform controller in
> @@ -35,7 +36,6 @@ config PCIE_CADENCE_PLAT_EP
> tristate "Cadence platform PCIe controller (endpoint mode)"
> depends on OF
> depends on PCI_ENDPOINT
> - select PCIE_CADENCE_EP
> select PCIE_CADENCE_PLAT
> help
> Say Y here if you want to support the Cadence PCIe platform controller in
--
~Randy
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies
2026-08-05 10:50 [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies Aksh Garg
2026-08-05 11:07 ` sashiko-bot
2026-08-05 17:29 ` Randy Dunlap
@ 2026-08-06 16:47 ` Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: Manivannan Sadhasivam @ 2026-08-06 16:47 UTC (permalink / raw)
To: linux-pci, lpieralisi, kwilczynski, mani, robh, bhelgaas, mpillai,
rdunlap, 18255117159, unicorn_wang, Aksh Garg
Cc: linux-kernel, s-vadapalli, danishanwar
On Wed, 05 Aug 2026 16:20:14 +0530, Aksh Garg wrote:
> The cadence-plat driver has a single platform driver that can be built-in
> or a loadable module, but it calls two separate backend drivers depending
> on whether it is a host or endpoint.
>
> If one of the mode is build as built-in and another as loadable module,
> we end up with a situation where the built-in pcie-cadence-plat driver
> tries to call the modular host or endpoint driver, which causes a link
> failure:
>
> [...]
Applied, thanks!
[1/1] PCI: cadence-plat: Fix host/endpoint dependencies
commit: e4486b0dc8b2496133f38451babd7e84e2f4a1fd
Best regards,
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-06 16:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-05 10:50 [PATCH] PCI: cadence-plat: Fix host/endpoint dependencies Aksh Garg
2026-08-05 11:07 ` sashiko-bot
2026-08-05 17:29 ` Randy Dunlap
2026-08-06 16:47 ` Manivannan Sadhasivam
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.